y2038: uapi: change __kernel_time_t to __kernel_old_time_t
authorArnd Bergmann <arnd@arndb.de>
Tue, 5 Nov 2019 10:10:01 +0000 (11:10 +0100)
committerArnd Bergmann <arnd@arndb.de>
Fri, 15 Nov 2019 13:38:29 +0000 (14:38 +0100)
This is mainly a patch for clarification, and to let us remove
the time_t definition from the kernel to prevent new users from
creeping in that might not be y2038-safe.

All remaining uses of 'time_t' or '__kernel_time_t' are part of
the user API that cannot be changed by that either have a
replacement or that do not suffer from the y2038 overflow.

Acked-by: Deepa Dinamani <deepa.kernel@gmail.com>
Acked-by: Christian Brauner <christian.brauner@ubuntu.com>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
12 files changed:
include/linux/syscalls.h
include/linux/time32.h
include/linux/types.h
include/uapi/linux/cyclades.h
include/uapi/linux/msg.h
include/uapi/linux/ppp_defs.h
include/uapi/linux/sem.h
include/uapi/linux/shm.h
include/uapi/linux/time.h
include/uapi/linux/time_types.h
include/uapi/linux/utime.h
kernel/time/time.c

index f7c561c4dcdd5fa5d1376ac0d75fad959729c48e..2f27bc9d5ef06949177ee6ac6552a1ac56ed08c9 100644 (file)
@@ -1076,7 +1076,7 @@ asmlinkage long sys_fadvise64(int fd, loff_t offset, size_t len, int advice);
 asmlinkage long sys_alarm(unsigned int seconds);
 asmlinkage long sys_getpgrp(void);
 asmlinkage long sys_pause(void);
-asmlinkage long sys_time(time_t __user *tloc);
+asmlinkage long sys_time(__kernel_old_time_t __user *tloc);
 asmlinkage long sys_time32(old_time32_t __user *tloc);
 #ifdef __ARCH_WANT_SYS_UTIME
 asmlinkage long sys_utime(char __user *filename,
@@ -1116,7 +1116,7 @@ asmlinkage long sys_sysfs(int option,
 asmlinkage long sys_fork(void);
 
 /* obsolete: kernel/time/time.c */
-asmlinkage long sys_stime(time_t __user *tptr);
+asmlinkage long sys_stime(__kernel_old_time_t __user *tptr);
 asmlinkage long sys_stime32(old_time32_t __user *tptr);
 
 /* obsolete: kernel/signal.c */
index 0a1f302a1753038ee32e0632009d2420d40e3509..cad4c318600213430212947cbec7a63859654f3c 100644 (file)
@@ -12,7 +12,7 @@
 #include <linux/time64.h>
 #include <linux/timex.h>
 
-#define TIME_T_MAX     (time_t)((1UL << ((sizeof(time_t) << 3) - 1)) - 1)
+#define TIME_T_MAX     (__kernel_old_time_t)((1UL << ((sizeof(__kernel_old_time_t) << 3) - 1)) - 1)
 
 typedef s32            old_time32_t;
 
index 05030f608be32224779a399360d407a84d396201..e32c1180b7427db48bd0f6609bee4bec357e7bd4 100644 (file)
@@ -67,7 +67,7 @@ typedef __kernel_ptrdiff_t    ptrdiff_t;
 
 #ifndef _TIME_T
 #define _TIME_T
-typedef __kernel_time_t                time_t;
+typedef __kernel_old_time_t    time_t;
 #endif
 
 #ifndef _CLOCK_T
index 8279bc3d60ca05161e993be64bd55c9bd9661e18..fc0add2194a98549d69786d5612f2627e4379c0f 100644 (file)
@@ -83,9 +83,9 @@ struct cyclades_monitor {
  * open)
  */
 struct cyclades_idle_stats {
-    __kernel_time_t in_use;    /* Time device has been in use (secs) */
-    __kernel_time_t recv_idle; /* Time since last char received (secs) */
-    __kernel_time_t xmit_idle; /* Time since last char transmitted (secs) */
+    __kernel_old_time_t in_use;        /* Time device has been in use (secs) */
+    __kernel_old_time_t recv_idle; /* Time since last char received (secs) */
+    __kernel_old_time_t xmit_idle; /* Time since last char transmitted (secs) */
     unsigned long  recv_bytes; /* Bytes received */
     unsigned long  xmit_bytes; /* Bytes transmitted */
     unsigned long  overruns;   /* Input overruns */
index e4a0d9a9a9e80c8ade302d4a93c373e3a3f0423c..01ee8d54c1c8a8de4609631cef715ad6c74411a2 100644 (file)
@@ -19,9 +19,9 @@ struct msqid_ds {
        struct ipc_perm msg_perm;
        struct msg *msg_first;          /* first message on queue,unused  */
        struct msg *msg_last;           /* last message in queue,unused */
-       __kernel_time_t msg_stime;      /* last msgsnd time */
-       __kernel_time_t msg_rtime;      /* last msgrcv time */
-       __kernel_time_t msg_ctime;      /* last change time */
+       __kernel_old_time_t msg_stime;  /* last msgsnd time */
+       __kernel_old_time_t msg_rtime;  /* last msgrcv time */
+       __kernel_old_time_t msg_ctime;  /* last change time */
        unsigned long  msg_lcbytes;     /* Reuse junk fields for 32 bit */
        unsigned long  msg_lqbytes;     /* ditto */
        unsigned short msg_cbytes;      /* current number of bytes on queue */
index fff51b91b409034a75c5073b753eddc1d7e63ec7..9277a33d08a263ac8f8329206fb9bde9d39ef0d2 100644 (file)
@@ -144,8 +144,8 @@ struct ppp_comp_stats {
  * the last NP packet was sent or received.
  */
 struct ppp_idle {
-    __kernel_time_t xmit_idle; /* time since last NP packet sent */
-    __kernel_time_t recv_idle; /* time since last NP packet received */
+    __kernel_old_time_t xmit_idle;     /* time since last NP packet sent */
+    __kernel_old_time_t recv_idle;     /* time since last NP packet received */
 };
 
 #endif /* _UAPI_PPP_DEFS_H_ */
index 39a1876f039e1d46552278c09993ca61aebd7b63..75aa3b273cd9952a4ccdb1e8df6014425536e65a 100644 (file)
@@ -24,8 +24,8 @@
 /* Obsolete, used only for backwards compatibility and libc5 compiles */
 struct semid_ds {
        struct ipc_perm sem_perm;               /* permissions .. see ipc.h */
-       __kernel_time_t sem_otime;              /* last semop time */
-       __kernel_time_t sem_ctime;              /* create/last semctl() time */
+       __kernel_old_time_t sem_otime;          /* last semop time */
+       __kernel_old_time_t sem_ctime;          /* create/last semctl() time */
        struct sem      *sem_base;              /* ptr to first semaphore in array */
        struct sem_queue *sem_pending;          /* pending operations to be processed */
        struct sem_queue **sem_pending_last;    /* last pending operation */
index 6507ad0afc81d93713abee6f5790451dd4499d29..8d1f17a4e08eca15d1c61fc3dc2b7bf459d1161d 100644 (file)
@@ -28,9 +28,9 @@
 struct shmid_ds {
        struct ipc_perm         shm_perm;       /* operation perms */
        int                     shm_segsz;      /* size of segment (bytes) */
-       __kernel_time_t         shm_atime;      /* last attach time */
-       __kernel_time_t         shm_dtime;      /* last detach time */
-       __kernel_time_t         shm_ctime;      /* last change time */
+       __kernel_old_time_t     shm_atime;      /* last attach time */
+       __kernel_old_time_t     shm_dtime;      /* last detach time */
+       __kernel_old_time_t     shm_ctime;      /* last change time */
        __kernel_ipc_pid_t      shm_cpid;       /* pid of creator */
        __kernel_ipc_pid_t      shm_lpid;       /* pid of last operator */
        unsigned short          shm_nattch;     /* no. of current attaches */
index 958932effc5e87f4ac14d17a66de32aec550d087..a655aa28dc6efcbf0da9a845bc1cbd09e47545e3 100644 (file)
@@ -8,13 +8,13 @@
 #ifndef _STRUCT_TIMESPEC
 #define _STRUCT_TIMESPEC
 struct timespec {
-       __kernel_time_t tv_sec;                 /* seconds */
-       long            tv_nsec;                /* nanoseconds */
+       __kernel_old_time_t     tv_sec;         /* seconds */
+       long                    tv_nsec;        /* nanoseconds */
 };
 #endif
 
 struct timeval {
-       __kernel_time_t         tv_sec;         /* seconds */
+       __kernel_old_time_t     tv_sec;         /* seconds */
        __kernel_suseconds_t    tv_usec;        /* microseconds */
 };
 
index 60b37f29842d1c30868a96dabd508cfff3b86dcb..074e391d73a150f3e705183d68381fffeb90b8dd 100644 (file)
@@ -29,8 +29,8 @@ struct __kernel_old_timeval {
 #endif
 
 struct __kernel_old_timespec {
-       __kernel_time_t tv_sec;                 /* seconds */
-       long            tv_nsec;                /* nanoseconds */
+       __kernel_old_time_t     tv_sec;         /* seconds */
+       long                    tv_nsec;        /* nanoseconds */
 };
 
 struct __kernel_sock_timeval {
index fd9aa26b68602db3196e0334191d4d66bf8493bf..bc8f13e81d6ed482de7d3d0676c35c0036f27b3b 100644 (file)
@@ -5,8 +5,8 @@
 #include <linux/types.h>
 
 struct utimbuf {
-       __kernel_time_t actime;
-       __kernel_time_t modtime;
+       __kernel_old_time_t actime;
+       __kernel_old_time_t modtime;
 };
 
 #endif
index 96b8c02657ed7f8da7d0a1d7bbcdcc5de0543135..833abae3364f4b8230a123322553a710536c0736 100644 (file)
@@ -59,9 +59,9 @@ EXPORT_SYMBOL(sys_tz);
  * why not move it into the appropriate arch directory (for those
  * architectures that need it).
  */
-SYSCALL_DEFINE1(time, time_t __user *, tloc)
+SYSCALL_DEFINE1(time, __kernel_old_time_t __user *, tloc)
 {
-       time_t i = (time_t)ktime_get_real_seconds();
+       __kernel_old_time_t i = (__kernel_old_time_t)ktime_get_real_seconds();
 
        if (tloc) {
                if (put_user(i,tloc))
@@ -78,7 +78,7 @@ SYSCALL_DEFINE1(time, time_t __user *, tloc)
  * architectures that need it).
  */
 
-SYSCALL_DEFINE1(stime, time_t __user *, tptr)
+SYSCALL_DEFINE1(stime, __kernel_old_time_t __user *, tptr)
 {
        struct timespec64 tv;
        int err;