On 28 May 2015 at 23:16, Arnd Bergmann arnd@linaro.org wrote:
On Tuesday 26 May 2015 18:08:29 Baolin Wang wrote:
+SYSCALL_DEFINE4(timer_settime, timer_t, timer_id, int, flags,
const struct itimerspec __user *, new_setting,
struct itimerspec __user *, old_setting)
+{
struct itimerspec new_spec, old_spec;
int error = 0;
struct itimerspec *rtn = old_setting ? &old_spec : NULL;
if (!new_setting)
return -EINVAL;
if (copy_from_user(&new_spec, new_setting, sizeof (new_spec)))
return -EFAULT;
if (!timespec_valid(&new_spec.it_interval) ||
!timespec_valid(&new_spec.it_value))
return -EINVAL;
error = __timer_settime(timer_id, flags, &new_spec, rtn);
if (old_setting && !error && copy_to_user(old_setting, &old_spec, sizeof (old_spec))) error = -EFAULT;
Since this is meant as preparation for adding the compat syscalls, I think the actual syscall code here should be as small as possible.
In order to do that, it would be better to have the timespec_valid calls inside of __timer_settime.
Arnd
Ok.