ipc: shm: Make shmid_kernel timestamps y2038 safe

time_t is not y2038 safe. Replace all uses of
time_t by y2038 safe time64_t.

Similarly, replace the calls to get_seconds() with
y2038 safe ktime_get_real_seconds().
Note that this preserves fast access on 64 bit systems,
but 32 bit systems need sequence counters.

The syscall interfaces themselves are not changed as part of
the patch. They will be part of a different series.

Signed-off-by: Deepa Dinamani <deepa.kernel@gmail.com>
Reviewed-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>

authored by

Deepa Dinamani and committed by
Al Viro
7ff2819e e54d02b2

+8 -8
+3 -3
include/linux/shm.h
··· 12 12 struct file *shm_file; 13 13 unsigned long shm_nattch; 14 14 unsigned long shm_segsz; 15 - time_t shm_atim; 16 - time_t shm_dtim; 17 - time_t shm_ctim; 15 + time64_t shm_atim; 16 + time64_t shm_dtim; 17 + time64_t shm_ctim; 18 18 pid_t shm_cprid; 19 19 pid_t shm_lprid; 20 20 struct user_struct *mlock_user;
+5 -5
ipc/shm.c
··· 200 200 if (IS_ERR(shp)) 201 201 return PTR_ERR(shp); 202 202 203 - shp->shm_atim = get_seconds(); 203 + shp->shm_atim = ktime_get_real_seconds(); 204 204 shp->shm_lprid = task_tgid_vnr(current); 205 205 shp->shm_nattch++; 206 206 shm_unlock(shp); ··· 287 287 goto done; /* no-op */ 288 288 289 289 shp->shm_lprid = task_tgid_vnr(current); 290 - shp->shm_dtim = get_seconds(); 290 + shp->shm_dtim = ktime_get_real_seconds(); 291 291 shp->shm_nattch--; 292 292 if (shm_may_destroy(ns, shp)) 293 293 shm_destroy(ns, shp); ··· 592 592 shp->shm_cprid = task_tgid_vnr(current); 593 593 shp->shm_lprid = 0; 594 594 shp->shm_atim = shp->shm_dtim = 0; 595 - shp->shm_ctim = get_seconds(); 595 + shp->shm_ctim = ktime_get_real_seconds(); 596 596 shp->shm_segsz = size; 597 597 shp->shm_nattch = 0; 598 598 shp->shm_file = file; ··· 846 846 err = ipc_update_perm(&shmid64->shm_perm, ipcp); 847 847 if (err) 848 848 goto out_unlock0; 849 - shp->shm_ctim = get_seconds(); 849 + shp->shm_ctim = ktime_get_real_seconds(); 850 850 break; 851 851 default: 852 852 err = -EINVAL; ··· 1586 1586 1587 1587 seq_printf(s, 1588 1588 "%10d %10d %4o " SIZE_SPEC " %5u %5u " 1589 - "%5lu %5u %5u %5u %5u %10lu %10lu %10lu " 1589 + "%5lu %5u %5u %5u %5u %10llu %10llu %10llu " 1590 1590 SIZE_SPEC " " SIZE_SPEC "\n", 1591 1591 shp->shm_perm.key, 1592 1592 shp->shm_perm.id,