lkml.org 
[lkml]   [2019]   [Nov]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRe: [PATCH 12/23] y2038: syscalls: change remaining timeval to __kernel_old_timeval
    Date
    On Friday, November 8, 2019 10:12:11 PM CET Arnd Bergmann wrote:
    > All of the remaining syscalls that pass a timeval (gettimeofday, utime,
    > futimesat) can trivially be changed to pass a __kernel_old_timeval
    > instead, which has a compatible layout, but avoids ambiguity with
    > the timeval type in user space.
    >
    > Signed-off-by: Arnd Bergmann <arnd@arndb.de>

    For the change in power/power.h

    Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

    > ---
    > arch/powerpc/include/asm/asm-prototypes.h | 3 ++-
    > arch/powerpc/kernel/syscalls.c | 4 ++--
    > fs/select.c | 10 +++++-----
    > fs/utimes.c | 8 ++++----
    > include/linux/syscalls.h | 10 +++++-----
    > kernel/power/power.h | 2 +-
    > kernel/time/time.c | 2 +-
    > 7 files changed, 20 insertions(+), 19 deletions(-)
    >
    > diff --git a/arch/powerpc/include/asm/asm-prototypes.h b/arch/powerpc/include/asm/asm-prototypes.h
    > index 8561498e653c..2c25dc079cb9 100644
    > --- a/arch/powerpc/include/asm/asm-prototypes.h
    > +++ b/arch/powerpc/include/asm/asm-prototypes.h
    > @@ -92,7 +92,8 @@ long sys_swapcontext(struct ucontext __user *old_ctx,
    > long sys_debug_setcontext(struct ucontext __user *ctx,
    > int ndbg, struct sig_dbg_op __user *dbg);
    > int
    > -ppc_select(int n, fd_set __user *inp, fd_set __user *outp, fd_set __user *exp, struct timeval __user *tvp);
    > +ppc_select(int n, fd_set __user *inp, fd_set __user *outp, fd_set __user *exp,
    > + struct __kernel_old_timeval __user *tvp);
    > unsigned long __init early_init(unsigned long dt_ptr);
    > void __init machine_init(u64 dt_ptr);
    > #endif
    > diff --git a/arch/powerpc/kernel/syscalls.c b/arch/powerpc/kernel/syscalls.c
    > index 3bfb3888e897..078608ec2e92 100644
    > --- a/arch/powerpc/kernel/syscalls.c
    > +++ b/arch/powerpc/kernel/syscalls.c
    > @@ -79,7 +79,7 @@ SYSCALL_DEFINE6(mmap, unsigned long, addr, size_t, len,
    > * sys_select() with the appropriate args. -- Cort
    > */
    > int
    > -ppc_select(int n, fd_set __user *inp, fd_set __user *outp, fd_set __user *exp, struct timeval __user *tvp)
    > +ppc_select(int n, fd_set __user *inp, fd_set __user *outp, fd_set __user *exp, struct __kernel_old_timeval __user *tvp)
    > {
    > if ( (unsigned long)n >= 4096 )
    > {
    > @@ -89,7 +89,7 @@ ppc_select(int n, fd_set __user *inp, fd_set __user *outp, fd_set __user *exp, s
    > || __get_user(inp, ((fd_set __user * __user *)(buffer+1)))
    > || __get_user(outp, ((fd_set __user * __user *)(buffer+2)))
    > || __get_user(exp, ((fd_set __user * __user *)(buffer+3)))
    > - || __get_user(tvp, ((struct timeval __user * __user *)(buffer+4))))
    > + || __get_user(tvp, ((struct __kernel_old_timeval __user * __user *)(buffer+4))))
    > return -EFAULT;
    > }
    > return sys_select(n, inp, outp, exp, tvp);
    > diff --git a/fs/select.c b/fs/select.c
    > index 53a0c149f528..11d0285d46b7 100644
    > --- a/fs/select.c
    > +++ b/fs/select.c
    > @@ -321,7 +321,7 @@ static int poll_select_finish(struct timespec64 *end_time,
    > switch (pt_type) {
    > case PT_TIMEVAL:
    > {
    > - struct timeval rtv;
    > + struct __kernel_old_timeval rtv;
    >
    > if (sizeof(rtv) > sizeof(rtv.tv_sec) + sizeof(rtv.tv_usec))
    > memset(&rtv, 0, sizeof(rtv));
    > @@ -698,10 +698,10 @@ int core_sys_select(int n, fd_set __user *inp, fd_set __user *outp,
    > }
    >
    > static int kern_select(int n, fd_set __user *inp, fd_set __user *outp,
    > - fd_set __user *exp, struct timeval __user *tvp)
    > + fd_set __user *exp, struct __kernel_old_timeval __user *tvp)
    > {
    > struct timespec64 end_time, *to = NULL;
    > - struct timeval tv;
    > + struct __kernel_old_timeval tv;
    > int ret;
    >
    > if (tvp) {
    > @@ -720,7 +720,7 @@ static int kern_select(int n, fd_set __user *inp, fd_set __user *outp,
    > }
    >
    > SYSCALL_DEFINE5(select, int, n, fd_set __user *, inp, fd_set __user *, outp,
    > - fd_set __user *, exp, struct timeval __user *, tvp)
    > + fd_set __user *, exp, struct __kernel_old_timeval __user *, tvp)
    > {
    > return kern_select(n, inp, outp, exp, tvp);
    > }
    > @@ -810,7 +810,7 @@ SYSCALL_DEFINE6(pselect6_time32, int, n, fd_set __user *, inp, fd_set __user *,
    > struct sel_arg_struct {
    > unsigned long n;
    > fd_set __user *inp, *outp, *exp;
    > - struct timeval __user *tvp;
    > + struct __kernel_old_timeval __user *tvp;
    > };
    >
    > SYSCALL_DEFINE1(old_select, struct sel_arg_struct __user *, arg)
    > diff --git a/fs/utimes.c b/fs/utimes.c
    > index 1ba3f7883870..c952b6b3d8a0 100644
    > --- a/fs/utimes.c
    > +++ b/fs/utimes.c
    > @@ -161,9 +161,9 @@ SYSCALL_DEFINE4(utimensat, int, dfd, const char __user *, filename,
    > * utimensat() instead.
    > */
    > static long do_futimesat(int dfd, const char __user *filename,
    > - struct timeval __user *utimes)
    > + struct __kernel_old_timeval __user *utimes)
    > {
    > - struct timeval times[2];
    > + struct __kernel_old_timeval times[2];
    > struct timespec64 tstimes[2];
    >
    > if (utimes) {
    > @@ -190,13 +190,13 @@ static long do_futimesat(int dfd, const char __user *filename,
    >
    >
    > SYSCALL_DEFINE3(futimesat, int, dfd, const char __user *, filename,
    > - struct timeval __user *, utimes)
    > + struct __kernel_old_timeval __user *, utimes)
    > {
    > return do_futimesat(dfd, filename, utimes);
    > }
    >
    > SYSCALL_DEFINE2(utimes, char __user *, filename,
    > - struct timeval __user *, utimes)
    > + struct __kernel_old_timeval __user *, utimes)
    > {
    > return do_futimesat(AT_FDCWD, filename, utimes);
    > }
    > diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h
    > index 2f27bc9d5ef0..e665920fa359 100644
    > --- a/include/linux/syscalls.h
    > +++ b/include/linux/syscalls.h
    > @@ -51,7 +51,7 @@ struct statx;
    > struct __sysctl_args;
    > struct sysinfo;
    > struct timespec;
    > -struct timeval;
    > +struct __kernel_old_timeval;
    > struct __kernel_timex;
    > struct timezone;
    > struct tms;
    > @@ -732,7 +732,7 @@ asmlinkage long sys_prctl(int option, unsigned long arg2, unsigned long arg3,
    > asmlinkage long sys_getcpu(unsigned __user *cpu, unsigned __user *node, struct getcpu_cache __user *cache);
    >
    > /* kernel/time.c */
    > -asmlinkage long sys_gettimeofday(struct timeval __user *tv,
    > +asmlinkage long sys_gettimeofday(struct __kernel_old_timeval __user *tv,
    > struct timezone __user *tz);
    > asmlinkage long sys_settimeofday(struct timeval __user *tv,
    > struct timezone __user *tz);
    > @@ -1082,9 +1082,9 @@ asmlinkage long sys_time32(old_time32_t __user *tloc);
    > asmlinkage long sys_utime(char __user *filename,
    > struct utimbuf __user *times);
    > asmlinkage long sys_utimes(char __user *filename,
    > - struct timeval __user *utimes);
    > + struct __kernel_old_timeval __user *utimes);
    > asmlinkage long sys_futimesat(int dfd, const char __user *filename,
    > - struct timeval __user *utimes);
    > + struct __kernel_old_timeval __user *utimes);
    > #endif
    > asmlinkage long sys_futimesat_time32(unsigned int dfd,
    > const char __user *filename,
    > @@ -1098,7 +1098,7 @@ asmlinkage long sys_getdents(unsigned int fd,
    > struct linux_dirent __user *dirent,
    > unsigned int count);
    > asmlinkage long sys_select(int n, fd_set __user *inp, fd_set __user *outp,
    > - fd_set __user *exp, struct timeval __user *tvp);
    > + fd_set __user *exp, struct __kernel_old_timeval __user *tvp);
    > asmlinkage long sys_poll(struct pollfd __user *ufds, unsigned int nfds,
    > int timeout);
    > asmlinkage long sys_epoll_wait(int epfd, struct epoll_event __user *events,
    > diff --git a/kernel/power/power.h b/kernel/power/power.h
    > index 44bee462ff57..7cdc64dc2373 100644
    > --- a/kernel/power/power.h
    > +++ b/kernel/power/power.h
    > @@ -179,7 +179,7 @@ extern void swsusp_close(fmode_t);
    > extern int swsusp_unmark(void);
    > #endif
    >
    > -struct timeval;
    > +struct __kernel_old_timeval;
    > /* kernel/power/swsusp.c */
    > extern void swsusp_show_speed(ktime_t, ktime_t, unsigned int, char *);
    >
    > diff --git a/kernel/time/time.c b/kernel/time/time.c
    > index 7eba7c9a7e3e..bc114f0be8f1 100644
    > --- a/kernel/time/time.c
    > +++ b/kernel/time/time.c
    > @@ -137,7 +137,7 @@ SYSCALL_DEFINE1(stime32, old_time32_t __user *, tptr)
    > #endif /* __ARCH_WANT_SYS_TIME32 */
    > #endif
    >
    > -SYSCALL_DEFINE2(gettimeofday, struct timeval __user *, tv,
    > +SYSCALL_DEFINE2(gettimeofday, struct __kernel_old_timeval __user *, tv,
    > struct timezone __user *, tz)
    > {
    > if (likely(tv != NULL)) {
    >




    \
     
     \ /
      Last update: 2019-11-13 23:40    [W:4.338 / U:0.072 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site