int sys32_get_timeval(struct timeval *tv, const struct compat_timeval __user *ctv) { return (ctv == NULL || !access_rok(ctv, sizeof(*ctv)) || __xn_get_user(tv->tv_sec, &ctv->tv_sec) || __xn_get_user(tv->tv_usec, &ctv->tv_usec)) ? -EFAULT : 0; }
int sys32_get_timespec(struct timespec *ts, const struct compat_timespec __user *cts) { return (cts == NULL || !access_rok(cts, sizeof(*cts)) || __xn_get_user(ts->tv_sec, &cts->tv_sec) || __xn_get_user(ts->tv_nsec, &cts->tv_nsec)) ? -EFAULT : 0; }
ssize_t sys32_get_fdset(fd_set *fds, const compat_fd_set __user *cfds, size_t cfdsize) { int rdpos, wrpos, rdlim = cfdsize / sizeof(compat_ulong_t); if (cfds == NULL || !access_rok(cfds, cfdsize)) return -EFAULT; for (rdpos = 0, wrpos = 0; rdpos < rdlim; rdpos++, wrpos++) if (__xn_get_user(fds->fds_bits[wrpos], cfds->fds_bits + rdpos)) return -EFAULT; return (ssize_t)rdlim * sizeof(long); }
static int sys_rtdm_sendmsg(struct pt_regs *regs) { struct task_struct *p = current; struct msghdr krnl_msg; if (unlikely(!access_rok(__xn_reg_arg2(regs), sizeof(krnl_msg)) || __xn_copy_from_user(&krnl_msg, (void __user *)__xn_reg_arg2(regs), sizeof(krnl_msg)))) return -EFAULT; return __rt_dev_sendmsg(p, __xn_reg_arg1(regs), &krnl_msg, __xn_reg_arg3(regs)); }