Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

y2038: uapi: change __kernel_time_t to __kernel_old_time_t

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>

+27 -27
+2 -2
include/linux/syscalls.h
··· 1076 1076 asmlinkage long sys_alarm(unsigned int seconds); 1077 1077 asmlinkage long sys_getpgrp(void); 1078 1078 asmlinkage long sys_pause(void); 1079 - asmlinkage long sys_time(time_t __user *tloc); 1079 + asmlinkage long sys_time(__kernel_old_time_t __user *tloc); 1080 1080 asmlinkage long sys_time32(old_time32_t __user *tloc); 1081 1081 #ifdef __ARCH_WANT_SYS_UTIME 1082 1082 asmlinkage long sys_utime(char __user *filename, ··· 1116 1116 asmlinkage long sys_fork(void); 1117 1117 1118 1118 /* obsolete: kernel/time/time.c */ 1119 - asmlinkage long sys_stime(time_t __user *tptr); 1119 + asmlinkage long sys_stime(__kernel_old_time_t __user *tptr); 1120 1120 asmlinkage long sys_stime32(old_time32_t __user *tptr); 1121 1121 1122 1122 /* obsolete: kernel/signal.c */
+1 -1
include/linux/time32.h
··· 12 12 #include <linux/time64.h> 13 13 #include <linux/timex.h> 14 14 15 - #define TIME_T_MAX (time_t)((1UL << ((sizeof(time_t) << 3) - 1)) - 1) 15 + #define TIME_T_MAX (__kernel_old_time_t)((1UL << ((sizeof(__kernel_old_time_t) << 3) - 1)) - 1) 16 16 17 17 typedef s32 old_time32_t; 18 18
+1 -1
include/linux/types.h
··· 67 67 68 68 #ifndef _TIME_T 69 69 #define _TIME_T 70 - typedef __kernel_time_t time_t; 70 + typedef __kernel_old_time_t time_t; 71 71 #endif 72 72 73 73 #ifndef _CLOCK_T
+3 -3
include/uapi/linux/cyclades.h
··· 83 83 * open) 84 84 */ 85 85 struct cyclades_idle_stats { 86 - __kernel_time_t in_use; /* Time device has been in use (secs) */ 87 - __kernel_time_t recv_idle; /* Time since last char received (secs) */ 88 - __kernel_time_t xmit_idle; /* Time since last char transmitted (secs) */ 86 + __kernel_old_time_t in_use; /* Time device has been in use (secs) */ 87 + __kernel_old_time_t recv_idle; /* Time since last char received (secs) */ 88 + __kernel_old_time_t xmit_idle; /* Time since last char transmitted (secs) */ 89 89 unsigned long recv_bytes; /* Bytes received */ 90 90 unsigned long xmit_bytes; /* Bytes transmitted */ 91 91 unsigned long overruns; /* Input overruns */
+3 -3
include/uapi/linux/msg.h
··· 19 19 struct ipc_perm msg_perm; 20 20 struct msg *msg_first; /* first message on queue,unused */ 21 21 struct msg *msg_last; /* last message in queue,unused */ 22 - __kernel_time_t msg_stime; /* last msgsnd time */ 23 - __kernel_time_t msg_rtime; /* last msgrcv time */ 24 - __kernel_time_t msg_ctime; /* last change time */ 22 + __kernel_old_time_t msg_stime; /* last msgsnd time */ 23 + __kernel_old_time_t msg_rtime; /* last msgrcv time */ 24 + __kernel_old_time_t msg_ctime; /* last change time */ 25 25 unsigned long msg_lcbytes; /* Reuse junk fields for 32 bit */ 26 26 unsigned long msg_lqbytes; /* ditto */ 27 27 unsigned short msg_cbytes; /* current number of bytes on queue */
+2 -2
include/uapi/linux/ppp_defs.h
··· 144 144 * the last NP packet was sent or received. 145 145 */ 146 146 struct ppp_idle { 147 - __kernel_time_t xmit_idle; /* time since last NP packet sent */ 148 - __kernel_time_t recv_idle; /* time since last NP packet received */ 147 + __kernel_old_time_t xmit_idle; /* time since last NP packet sent */ 148 + __kernel_old_time_t recv_idle; /* time since last NP packet received */ 149 149 }; 150 150 151 151 #endif /* _UAPI_PPP_DEFS_H_ */
+2 -2
include/uapi/linux/sem.h
··· 24 24 /* Obsolete, used only for backwards compatibility and libc5 compiles */ 25 25 struct semid_ds { 26 26 struct ipc_perm sem_perm; /* permissions .. see ipc.h */ 27 - __kernel_time_t sem_otime; /* last semop time */ 28 - __kernel_time_t sem_ctime; /* create/last semctl() time */ 27 + __kernel_old_time_t sem_otime; /* last semop time */ 28 + __kernel_old_time_t sem_ctime; /* create/last semctl() time */ 29 29 struct sem *sem_base; /* ptr to first semaphore in array */ 30 30 struct sem_queue *sem_pending; /* pending operations to be processed */ 31 31 struct sem_queue **sem_pending_last; /* last pending operation */
+3 -3
include/uapi/linux/shm.h
··· 28 28 struct shmid_ds { 29 29 struct ipc_perm shm_perm; /* operation perms */ 30 30 int shm_segsz; /* size of segment (bytes) */ 31 - __kernel_time_t shm_atime; /* last attach time */ 32 - __kernel_time_t shm_dtime; /* last detach time */ 33 - __kernel_time_t shm_ctime; /* last change time */ 31 + __kernel_old_time_t shm_atime; /* last attach time */ 32 + __kernel_old_time_t shm_dtime; /* last detach time */ 33 + __kernel_old_time_t shm_ctime; /* last change time */ 34 34 __kernel_ipc_pid_t shm_cpid; /* pid of creator */ 35 35 __kernel_ipc_pid_t shm_lpid; /* pid of last operator */ 36 36 unsigned short shm_nattch; /* no. of current attaches */
+3 -3
include/uapi/linux/time.h
··· 8 8 #ifndef _STRUCT_TIMESPEC 9 9 #define _STRUCT_TIMESPEC 10 10 struct timespec { 11 - __kernel_time_t tv_sec; /* seconds */ 12 - long tv_nsec; /* nanoseconds */ 11 + __kernel_old_time_t tv_sec; /* seconds */ 12 + long tv_nsec; /* nanoseconds */ 13 13 }; 14 14 #endif 15 15 16 16 struct timeval { 17 - __kernel_time_t tv_sec; /* seconds */ 17 + __kernel_old_time_t tv_sec; /* seconds */ 18 18 __kernel_suseconds_t tv_usec; /* microseconds */ 19 19 }; 20 20
+2 -2
include/uapi/linux/time_types.h
··· 29 29 #endif 30 30 31 31 struct __kernel_old_timespec { 32 - __kernel_time_t tv_sec; /* seconds */ 33 - long tv_nsec; /* nanoseconds */ 32 + __kernel_old_time_t tv_sec; /* seconds */ 33 + long tv_nsec; /* nanoseconds */ 34 34 }; 35 35 36 36 struct __kernel_sock_timeval {
+2 -2
include/uapi/linux/utime.h
··· 5 5 #include <linux/types.h> 6 6 7 7 struct utimbuf { 8 - __kernel_time_t actime; 9 - __kernel_time_t modtime; 8 + __kernel_old_time_t actime; 9 + __kernel_old_time_t modtime; 10 10 }; 11 11 12 12 #endif
+3 -3
kernel/time/time.c
··· 59 59 * why not move it into the appropriate arch directory (for those 60 60 * architectures that need it). 61 61 */ 62 - SYSCALL_DEFINE1(time, time_t __user *, tloc) 62 + SYSCALL_DEFINE1(time, __kernel_old_time_t __user *, tloc) 63 63 { 64 - time_t i = (time_t)ktime_get_real_seconds(); 64 + __kernel_old_time_t i = (__kernel_old_time_t)ktime_get_real_seconds(); 65 65 66 66 if (tloc) { 67 67 if (put_user(i,tloc)) ··· 78 78 * architectures that need it). 79 79 */ 80 80 81 - SYSCALL_DEFINE1(stime, time_t __user *, tptr) 81 + SYSCALL_DEFINE1(stime, __kernel_old_time_t __user *, tptr) 82 82 { 83 83 struct timespec64 tv; 84 84 int err;