static RTAI_SYSCALL_MODE int sys_rtdm_open(const char *path, long oflag) { struct task_struct *curr = current; char krnl_path[RTDM_MAX_DEVNAME_LEN + 1]; if (unlikely(!__xn_access_ok(curr, VERIFY_READ, path, sizeof(krnl_path)))) { return -EFAULT; } __xn_copy_from_user(curr, krnl_path, path, sizeof(krnl_path) - 1); krnl_path[sizeof(krnl_path) - 1] = '\0'; return __rt_dev_open(curr, (const char *)krnl_path, oflag); }
static int sys_rtdm_open(struct pt_regs *regs) { char krnl_path[RTDM_MAX_DEVNAME_LEN + 1]; struct task_struct *p = current; if (unlikely(__xn_safe_strncpy_from_user(krnl_path, (const char __user *) __xn_reg_arg1(regs), sizeof(krnl_path) - 1) < 0)) return -EFAULT; krnl_path[sizeof(krnl_path) - 1] = '\0'; return __rt_dev_open(p, (const char *)krnl_path, __xn_reg_arg2(regs)); }