int sys32_put_timeval(struct compat_timeval __user *ctv, const struct timeval *tv) { return (ctv == NULL || !access_wok(ctv, sizeof(*ctv)) || __xn_put_user(tv->tv_sec, &ctv->tv_sec) || __xn_put_user(tv->tv_usec, &ctv->tv_usec)) ? -EFAULT : 0; }
int sys32_put_timespec(struct compat_timespec __user *cts, const struct timespec *ts) { return (cts == NULL || !access_wok(cts, sizeof(*cts)) || __xn_put_user(ts->tv_sec, &cts->tv_sec) || __xn_put_user(ts->tv_nsec, &cts->tv_nsec)) ? -EFAULT : 0; }
ssize_t sys32_put_fdset(compat_fd_set __user *cfds, const fd_set *fds, size_t fdsize) { int rdpos, wrpos, wrlim = fdsize / sizeof(long); if (cfds == NULL || !access_wok(cfds, wrlim * sizeof(compat_ulong_t))) return -EFAULT; for (rdpos = 0, wrpos = 0; wrpos < wrlim; rdpos++, wrpos++) if (__xn_put_user(fds->fds_bits[rdpos], cfds->fds_bits + wrpos)) return -EFAULT; return (ssize_t)wrlim * sizeof(compat_ulong_t); }
static int sys_rtdm_recvmsg(struct pt_regs *regs) { struct task_struct *p = current; struct msghdr krnl_msg; int ret; if (unlikely(!access_wok(__xn_reg_arg2(regs), sizeof(krnl_msg)) || __xn_copy_from_user(&krnl_msg, (void __user *)__xn_reg_arg2(regs), sizeof(krnl_msg)))) return -EFAULT; ret = __rt_dev_recvmsg(p, __xn_reg_arg1(regs), &krnl_msg, __xn_reg_arg3(regs)); if (unlikely(ret < 0)) return ret; if (unlikely(__xn_copy_to_user((void __user *)__xn_reg_arg2(regs), &krnl_msg, sizeof(krnl_msg)))) return -EFAULT; return ret; }