Message ID | 20171013183009.3442318-1-arnd@arndb.de |
---|---|
State | Accepted |
Commit | fe460423438b62eb7440d994ab19a9f444e6280d |
Headers | show |
Series | posix-stubs: use get_timespec64() and put_timespec64() | expand |
On Fri, 13 Oct 2017, Arnd Bergmann wrote: > This is a follow-up to commit 5c4994102fb5 ("posix-timers: > Use get_timespec64() and put_timespec64()"), which left two > system call using copy_from_user()/copy_to_user(). We can > change them as well for consistency. > > Signed-off-by: Arnd Bergmann <arnd@arndb.de> Acked-by: Nicolas Pitre <nico@linaro.org> > --- > kernel/time/posix-stubs.c | 20 ++++++++------------ > 1 file changed, 8 insertions(+), 12 deletions(-) > > diff --git a/kernel/time/posix-stubs.c b/kernel/time/posix-stubs.c > index 06f34feb635e..b258bee13b02 100644 > --- a/kernel/time/posix-stubs.c > +++ b/kernel/time/posix-stubs.c > @@ -117,8 +117,7 @@ SYSCALL_DEFINE4(clock_nanosleep, const clockid_t, which_clock, int, flags, > const struct timespec __user *, rqtp, > struct timespec __user *, rmtp) > { > - struct timespec64 t64; > - struct timespec t; > + struct timespec64 t; > > switch (which_clock) { > case CLOCK_REALTIME: > @@ -129,16 +128,15 @@ SYSCALL_DEFINE4(clock_nanosleep, const clockid_t, which_clock, int, flags, > return -EINVAL; > } > > - if (copy_from_user(&t, rqtp, sizeof (struct timespec))) > + if (get_timespec64(&t, rqtp)) > return -EFAULT; > - t64 = timespec_to_timespec64(t); > - if (!timespec64_valid(&t64)) > + if (!timespec64_valid(&t)) > return -EINVAL; > if (flags & TIMER_ABSTIME) > rmtp = NULL; > current->restart_block.nanosleep.type = rmtp ? TT_NATIVE : TT_NONE; > current->restart_block.nanosleep.rmtp = rmtp; > - return hrtimer_nanosleep(&t64, flags & TIMER_ABSTIME ? > + return hrtimer_nanosleep(&t, flags & TIMER_ABSTIME ? > HRTIMER_MODE_ABS : HRTIMER_MODE_REL, > which_clock); > } > @@ -203,8 +201,7 @@ COMPAT_SYSCALL_DEFINE4(clock_nanosleep, clockid_t, which_clock, int, flags, > struct compat_timespec __user *, rqtp, > struct compat_timespec __user *, rmtp) > { > - struct timespec64 t64; > - struct timespec t; > + struct timespec64 t; > > switch (which_clock) { > case CLOCK_REALTIME: > @@ -215,16 +212,15 @@ COMPAT_SYSCALL_DEFINE4(clock_nanosleep, clockid_t, which_clock, int, flags, > return -EINVAL; > } > > - if (compat_get_timespec(&t, rqtp)) > + if (compat_get_timespec64(&t, rqtp)) > return -EFAULT; > - t64 = timespec_to_timespec64(t); > - if (!timespec64_valid(&t64)) > + if (!timespec64_valid(&t)) > return -EINVAL; > if (flags & TIMER_ABSTIME) > rmtp = NULL; > current->restart_block.nanosleep.type = rmtp ? TT_COMPAT : TT_NONE; > current->restart_block.nanosleep.compat_rmtp = rmtp; > - return hrtimer_nanosleep(&t64, flags & TIMER_ABSTIME ? > + return hrtimer_nanosleep(&t, flags & TIMER_ABSTIME ? > HRTIMER_MODE_ABS : HRTIMER_MODE_REL, > which_clock); > } > -- > 2.9.0 > >
diff --git a/kernel/time/posix-stubs.c b/kernel/time/posix-stubs.c index 06f34feb635e..b258bee13b02 100644 --- a/kernel/time/posix-stubs.c +++ b/kernel/time/posix-stubs.c @@ -117,8 +117,7 @@ SYSCALL_DEFINE4(clock_nanosleep, const clockid_t, which_clock, int, flags, const struct timespec __user *, rqtp, struct timespec __user *, rmtp) { - struct timespec64 t64; - struct timespec t; + struct timespec64 t; switch (which_clock) { case CLOCK_REALTIME: @@ -129,16 +128,15 @@ SYSCALL_DEFINE4(clock_nanosleep, const clockid_t, which_clock, int, flags, return -EINVAL; } - if (copy_from_user(&t, rqtp, sizeof (struct timespec))) + if (get_timespec64(&t, rqtp)) return -EFAULT; - t64 = timespec_to_timespec64(t); - if (!timespec64_valid(&t64)) + if (!timespec64_valid(&t)) return -EINVAL; if (flags & TIMER_ABSTIME) rmtp = NULL; current->restart_block.nanosleep.type = rmtp ? TT_NATIVE : TT_NONE; current->restart_block.nanosleep.rmtp = rmtp; - return hrtimer_nanosleep(&t64, flags & TIMER_ABSTIME ? + return hrtimer_nanosleep(&t, flags & TIMER_ABSTIME ? HRTIMER_MODE_ABS : HRTIMER_MODE_REL, which_clock); } @@ -203,8 +201,7 @@ COMPAT_SYSCALL_DEFINE4(clock_nanosleep, clockid_t, which_clock, int, flags, struct compat_timespec __user *, rqtp, struct compat_timespec __user *, rmtp) { - struct timespec64 t64; - struct timespec t; + struct timespec64 t; switch (which_clock) { case CLOCK_REALTIME: @@ -215,16 +212,15 @@ COMPAT_SYSCALL_DEFINE4(clock_nanosleep, clockid_t, which_clock, int, flags, return -EINVAL; } - if (compat_get_timespec(&t, rqtp)) + if (compat_get_timespec64(&t, rqtp)) return -EFAULT; - t64 = timespec_to_timespec64(t); - if (!timespec64_valid(&t64)) + if (!timespec64_valid(&t)) return -EINVAL; if (flags & TIMER_ABSTIME) rmtp = NULL; current->restart_block.nanosleep.type = rmtp ? TT_COMPAT : TT_NONE; current->restart_block.nanosleep.compat_rmtp = rmtp; - return hrtimer_nanosleep(&t64, flags & TIMER_ABSTIME ? + return hrtimer_nanosleep(&t, flags & TIMER_ABSTIME ? HRTIMER_MODE_ABS : HRTIMER_MODE_REL, which_clock); }
This is a follow-up to commit 5c4994102fb5 ("posix-timers: Use get_timespec64() and put_timespec64()"), which left two system call using copy_from_user()/copy_to_user(). We can change them as well for consistency. Signed-off-by: Arnd Bergmann <arnd@arndb.de> --- kernel/time/posix-stubs.c | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) -- 2.9.0