remove legacy clock_gettime and gettimeofday from public syscall.h
authorRich Felker <dalias@aerifal.cx>
Thu, 30 Jan 2020 16:25:07 +0000 (11:25 -0500)
committerRich Felker <dalias@aerifal.cx>
Thu, 30 Jan 2020 16:25:07 +0000 (11:25 -0500)
some nontrivial number of applications have historically performed
direct syscalls for these operations rather than using the public
functions. such usage is invalid now that time_t is 64-bit and these
syscalls no longer match the types they are used with, and it was
already harmful before (by suppressing use of vdso).

since syscall() has no type safety, incorrect usage of these syscalls
can't be caught at compile-time. so, without manually inspecting or
running additional tools to check sources, the risk of such errors
slipping through is high.

this patch renames the syscalls on 32-bit archs to clock_gettime32 and
gettimeofday_time32, so that applications using the original names
will fail to build without being fixed.

note that there are a number of other syscalls that may also be unsafe
to use directly after the time64 switchover, but (1) these are the
main two that seem to be in widespread use, and (2) most of the others
continue to have valid usage with a null timeval/timespec argument, as
the argument is an optional timeout or similar.

arch/arm/bits/syscall.h.in
arch/i386/bits/syscall.h.in
arch/m68k/bits/syscall.h.in
arch/microblaze/bits/syscall.h.in
arch/mips/bits/syscall.h.in
arch/mipsn32/bits/syscall.h.in
arch/or1k/bits/syscall.h.in
arch/powerpc/bits/syscall.h.in
arch/sh/bits/syscall.h.in
src/internal/syscall.h

index 8ab5df1d051cb9d534b8516136eff2919656894f..4d844e57e0dbab8969e5067fee06c592fa3f83df 100644 (file)
@@ -55,7 +55,7 @@
 #define __NR_sethostname       74
 #define __NR_setrlimit 75
 #define __NR_getrusage 77
-#define __NR_gettimeofday      78
+#define __NR_gettimeofday_time32       78
 #define __NR_settimeofday      79
 #define __NR_getgroups 80
 #define __NR_setgroups 81
 #define __NR_timer_getoverrun  260
 #define __NR_timer_delete      261
 #define __NR_clock_settime     262
-#define __NR_clock_gettime     263
+#define __NR_clock_gettime32   263
 #define __NR_clock_getres      264
 #define __NR_clock_nanosleep   265
 #define __NR_statfs64  266
index bb8416778bc03ed6ed359a691f8d4e6c7793f400..a96317c0dab220c73ac75a761ed9713902919ea8 100644 (file)
@@ -76,7 +76,7 @@
 #define __NR_setrlimit          75
 #define __NR_getrlimit          76   /* Back compatible 2Gig limited rlimit */
 #define __NR_getrusage          77
-#define __NR_gettimeofday       78
+#define __NR_gettimeofday_time32        78
 #define __NR_settimeofday       79
 #define __NR_getgroups          80
 #define __NR_setgroups          81
 #define __NR_timer_getoverrun  (__NR_timer_create+3)
 #define __NR_timer_delete      (__NR_timer_create+4)
 #define __NR_clock_settime     (__NR_timer_create+5)
-#define __NR_clock_gettime     (__NR_timer_create+6)
+#define __NR_clock_gettime32   (__NR_timer_create+6)
 #define __NR_clock_getres      (__NR_timer_create+7)
 #define __NR_clock_nanosleep   (__NR_timer_create+8)
 #define __NR_statfs64          268
index e7f71a5d7c4c65e5b2f6f2513bd7abc73d61c77d..e70d34725ac90382cdb49bf842eeb937e5d82368 100644 (file)
@@ -67,7 +67,7 @@
 #define __NR_setrlimit          75
 #define __NR_getrlimit          76
 #define __NR_getrusage          77
-#define __NR_gettimeofday       78
+#define __NR_gettimeofday_time32        78
 #define __NR_settimeofday       79
 #define __NR_getgroups          80
 #define __NR_setgroups          81
 #define __NR_timer_getoverrun  257
 #define __NR_timer_delete      258
 #define __NR_clock_settime     259
-#define __NR_clock_gettime     260
+#define __NR_clock_gettime32   260
 #define __NR_clock_getres      261
 #define __NR_clock_nanosleep   262
 #define __NR_statfs64          263
index afefb3547699d9811ee6314a62fa0fd993d2fb86..b23fe6ef2bfb7a6007e2962c9ac1ecd4917f2404 100644 (file)
@@ -76,7 +76,7 @@
 #define __NR_setrlimit 75
 #define __NR_getrlimit 76
 #define __NR_getrusage 77
-#define __NR_gettimeofday 78
+#define __NR_gettimeofday_time32 78
 #define __NR_settimeofday 79
 #define __NR_getgroups 80
 #define __NR_setgroups 81
 #define __NR_timer_getoverrun 262
 #define __NR_timer_delete 263
 #define __NR_clock_settime 264
-#define __NR_clock_gettime 265
+#define __NR_clock_gettime32 265
 #define __NR_clock_getres 266
 #define __NR_clock_nanosleep 267
 #define __NR_statfs64 268
index 7f9afaab677fe483b07a5001b69d0ced1d094ea1..e3f2de31f0ad167c9c08763b8507d13af140d179 100644 (file)
@@ -76,7 +76,7 @@
 #define __NR_setrlimit               4075
 #define __NR_getrlimit               4076
 #define __NR_getrusage               4077
-#define __NR_gettimeofday            4078
+#define __NR_gettimeofday_time32            4078
 #define __NR_settimeofday            4079
 #define __NR_getgroups               4080
 #define __NR_setgroups               4081
 #define __NR_timer_getoverrun        4260
 #define __NR_timer_delete            4261
 #define __NR_clock_settime           4262
-#define __NR_clock_gettime           4263
+#define __NR_clock_gettime32           4263
 #define __NR_clock_getres            4264
 #define __NR_clock_nanosleep         4265
 #define __NR_tgkill                  4266
index 134a4f811a2fef80da7b59f66c35bcb1a45e60b6..d13fda128deb798f59b855540fe5749b64600f2e 100644 (file)
@@ -92,7 +92,7 @@
 #define __NR_fchown                    6091
 #define __NR_lchown                    6092
 #define __NR_umask                     6093
-#define __NR_gettimeofday              6094
+#define __NR_gettimeofday_time32               6094
 #define __NR_getrlimit                 6095
 #define __NR_getrusage                 6096
 #define __NR_sysinfo                   6097
 #define __NR_timer_getoverrun          6223
 #define __NR_timer_delete              6224
 #define __NR_clock_settime             6225
-#define __NR_clock_gettime             6226
+#define __NR_clock_gettime32           6226
 #define __NR_clock_getres              6227
 #define __NR_clock_nanosleep           6228
 #define __NR_tgkill                    6229
index eaa1a9353c667f1737d5d69ab01dd3b1062461ff..82d94b29dc87df37ccf81ac6ad46a1208f69eff3 100644 (file)
 #define __NR_timer_settime 110
 #define __NR_timer_delete 111
 #define __NR_clock_settime 112
-#define __NR_clock_gettime 113
+#define __NR_clock_gettime32 113
 #define __NR_clock_getres 114
 #define __NR_clock_nanosleep 115
 #define __NR_syslog 116
 #define __NR_umask 166
 #define __NR_prctl 167
 #define __NR_getcpu 168
-#define __NR_gettimeofday 169
+#define __NR_gettimeofday_time32 169
 #define __NR_settimeofday 170
 #define __NR_adjtimex 171
 #define __NR_getpid 172
index d8b6a24706278f1125f5fc77f74f64b72fbac28e..14cf79c64bda3abc1a9bb57fc67ef45ce7bd01de 100644 (file)
@@ -76,7 +76,7 @@
 #define __NR_setrlimit               75
 #define __NR_getrlimit               76
 #define __NR_getrusage               77
-#define __NR_gettimeofday            78
+#define __NR_gettimeofday_time32            78
 #define __NR_settimeofday            79
 #define __NR_getgroups               80
 #define __NR_setgroups               81
 #define __NR_timer_getoverrun       243
 #define __NR_timer_delete           244
 #define __NR_clock_settime          245
-#define __NR_clock_gettime          246
+#define __NR_clock_gettime32          246
 #define __NR_clock_getres           247
 #define __NR_clock_nanosleep        248
 #define __NR_swapcontext            249
index 4e9ae2e074b1a24a8412e3457f24042c85835fe6..5c24f4a6363823d7b52adc1ce16e4a023ef73508 100644 (file)
@@ -67,7 +67,7 @@
 #define __NR_setrlimit              75
 #define __NR_getrlimit              76
 #define __NR_getrusage              77
-#define __NR_gettimeofday           78
+#define __NR_gettimeofday_time32           78
 #define __NR_settimeofday           79
 #define __NR_getgroups              80
 #define __NR_setgroups              81
 #define __NR_timer_getoverrun       262
 #define __NR_timer_delete           263
 #define __NR_clock_settime          264
-#define __NR_clock_gettime          265
+#define __NR_clock_gettime32          265
 #define __NR_clock_getres           266
 #define __NR_clock_nanosleep        267
 #define __NR_statfs64               268
index d768fb642f81afdb197914ab46448159c3bd4157..0b61f34ee773faa0ca9044257b20262389951c8f 100644 (file)
@@ -193,6 +193,13 @@ hidden long __syscall_ret(unsigned long),
 #define SYS_sendfile SYS_sendfile64
 #endif
 
+#ifndef SYS_clock_gettime
+#define SYS_clock_gettime SYS_clock_gettime32
+#endif
+
+#ifndef SYS_gettimeofday
+#define SYS_gettimeofday SYS_gettimeofday_time32
+#endif
 
 /* Ensure that the plain syscall names are defined even for "time64-only"
  * archs. These facilitate callers passing null time arguments, and make