Exemple #1
0
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;
}
Exemple #2
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;
}
Exemple #3
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);
}
Exemple #4
0
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;
}