aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorArnd Bergmann <arnd@arndb.de>2019-01-06 18:33:08 -0500
committerArnd Bergmann <arnd@arndb.de>2019-02-06 18:13:27 -0500
commit8dabe7245bbc134f2cfcc12cde75c019dab924cc (patch)
treeb08c1d41803f1586bc32a22334fa2b183b0eb0ba /kernel
parent7948450d455658601fedbf3b3e9890b4b36a214a (diff)
y2038: syscalls: rename y2038 compat syscalls
A lot of system calls that pass a time_t somewhere have an implementation using a COMPAT_SYSCALL_DEFINEx() on 64-bit architectures, and have been reworked so that this implementation can now be used on 32-bit architectures as well. The missing step is to redefine them using the regular SYSCALL_DEFINEx() to get them out of the compat namespace and make it possible to build them on 32-bit architectures. Any system call that ends in 'time' gets a '32' suffix on its name for that version, while the others get a '_time32' suffix, to distinguish them from the normal version, which takes a 64-bit time argument in the future. In this step, only 64-bit architectures are changed, doing this rename first lets us avoid touching the 32-bit architectures twice. Acked-by: Catalin Marinas <catalin.marinas@arm.com> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Diffstat (limited to 'kernel')
-rw-r--r--kernel/futex.c2
-rw-r--r--kernel/sched/core.c5
-rw-r--r--kernel/signal.c2
-rw-r--r--kernel/sys_ni.c18
-rw-r--r--kernel/time/hrtimer.c2
-rw-r--r--kernel/time/posix-stubs.c25
-rw-r--r--kernel/time/posix-timers.c32
-rw-r--r--kernel/time/time.c8
8 files changed, 48 insertions, 46 deletions
diff --git a/kernel/futex.c b/kernel/futex.c
index be3bff2315ff..caead6c113d4 100644
--- a/kernel/futex.c
+++ b/kernel/futex.c
@@ -3812,7 +3812,7 @@ err_unlock:
3812#endif /* CONFIG_COMPAT */ 3812#endif /* CONFIG_COMPAT */
3813 3813
3814#ifdef CONFIG_COMPAT_32BIT_TIME 3814#ifdef CONFIG_COMPAT_32BIT_TIME
3815COMPAT_SYSCALL_DEFINE6(futex, u32 __user *, uaddr, int, op, u32, val, 3815SYSCALL_DEFINE6(futex_time32, u32 __user *, uaddr, int, op, u32, val,
3816 struct old_timespec32 __user *, utime, u32 __user *, uaddr2, 3816 struct old_timespec32 __user *, utime, u32 __user *, uaddr2,
3817 u32, val3) 3817 u32, val3)
3818{ 3818{
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index a674c7db2f29..62862419cd05 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -5252,9 +5252,8 @@ SYSCALL_DEFINE2(sched_rr_get_interval, pid_t, pid,
5252} 5252}
5253 5253
5254#ifdef CONFIG_COMPAT_32BIT_TIME 5254#ifdef CONFIG_COMPAT_32BIT_TIME
5255COMPAT_SYSCALL_DEFINE2(sched_rr_get_interval, 5255SYSCALL_DEFINE2(sched_rr_get_interval_time32, pid_t, pid,
5256 compat_pid_t, pid, 5256 struct old_timespec32 __user *, interval)
5257 struct old_timespec32 __user *, interval)
5258{ 5257{
5259 struct timespec64 t; 5258 struct timespec64 t;
5260 int retval = sched_rr_get_interval(pid, &t); 5259 int retval = sched_rr_get_interval(pid, &t);
diff --git a/kernel/signal.c b/kernel/signal.c
index e1d7ad8e6ab1..af27629918cf 100644
--- a/kernel/signal.c
+++ b/kernel/signal.c
@@ -3397,7 +3397,7 @@ COMPAT_SYSCALL_DEFINE4(rt_sigtimedwait_time64, compat_sigset_t __user *, uthese,
3397} 3397}
3398 3398
3399#ifdef CONFIG_COMPAT_32BIT_TIME 3399#ifdef CONFIG_COMPAT_32BIT_TIME
3400COMPAT_SYSCALL_DEFINE4(rt_sigtimedwait, compat_sigset_t __user *, uthese, 3400COMPAT_SYSCALL_DEFINE4(rt_sigtimedwait_time32, compat_sigset_t __user *, uthese,
3401 struct compat_siginfo __user *, uinfo, 3401 struct compat_siginfo __user *, uinfo,
3402 struct old_timespec32 __user *, uts, compat_size_t, sigsetsize) 3402 struct old_timespec32 __user *, uts, compat_size_t, sigsetsize)
3403{ 3403{
diff --git a/kernel/sys_ni.c b/kernel/sys_ni.c
index ce04431a40d1..85e5ccec0955 100644
--- a/kernel/sys_ni.c
+++ b/kernel/sys_ni.c
@@ -42,9 +42,11 @@ COND_SYSCALL(io_destroy);
42COND_SYSCALL(io_submit); 42COND_SYSCALL(io_submit);
43COND_SYSCALL_COMPAT(io_submit); 43COND_SYSCALL_COMPAT(io_submit);
44COND_SYSCALL(io_cancel); 44COND_SYSCALL(io_cancel);
45COND_SYSCALL(io_getevents_time32);
45COND_SYSCALL(io_getevents); 46COND_SYSCALL(io_getevents);
47COND_SYSCALL(io_pgetevents_time32);
46COND_SYSCALL(io_pgetevents); 48COND_SYSCALL(io_pgetevents);
47COND_SYSCALL_COMPAT(io_getevents); 49COND_SYSCALL_COMPAT(io_pgetevents_time32);
48COND_SYSCALL_COMPAT(io_pgetevents); 50COND_SYSCALL_COMPAT(io_pgetevents);
49 51
50/* fs/xattr.c */ 52/* fs/xattr.c */
@@ -114,9 +116,9 @@ COND_SYSCALL_COMPAT(signalfd4);
114/* fs/timerfd.c */ 116/* fs/timerfd.c */
115COND_SYSCALL(timerfd_create); 117COND_SYSCALL(timerfd_create);
116COND_SYSCALL(timerfd_settime); 118COND_SYSCALL(timerfd_settime);
117COND_SYSCALL_COMPAT(timerfd_settime); 119COND_SYSCALL(timerfd_settime32);
118COND_SYSCALL(timerfd_gettime); 120COND_SYSCALL(timerfd_gettime);
119COND_SYSCALL_COMPAT(timerfd_gettime); 121COND_SYSCALL(timerfd_gettime32);
120 122
121/* fs/utimes.c */ 123/* fs/utimes.c */
122 124
@@ -135,7 +137,7 @@ COND_SYSCALL(capset);
135 137
136/* kernel/futex.c */ 138/* kernel/futex.c */
137COND_SYSCALL(futex); 139COND_SYSCALL(futex);
138COND_SYSCALL_COMPAT(futex); 140COND_SYSCALL(futex_time32);
139COND_SYSCALL(set_robust_list); 141COND_SYSCALL(set_robust_list);
140COND_SYSCALL_COMPAT(set_robust_list); 142COND_SYSCALL_COMPAT(set_robust_list);
141COND_SYSCALL(get_robust_list); 143COND_SYSCALL(get_robust_list);
@@ -187,9 +189,9 @@ COND_SYSCALL(mq_open);
187COND_SYSCALL_COMPAT(mq_open); 189COND_SYSCALL_COMPAT(mq_open);
188COND_SYSCALL(mq_unlink); 190COND_SYSCALL(mq_unlink);
189COND_SYSCALL(mq_timedsend); 191COND_SYSCALL(mq_timedsend);
190COND_SYSCALL_COMPAT(mq_timedsend); 192COND_SYSCALL(mq_timedsend_time32);
191COND_SYSCALL(mq_timedreceive); 193COND_SYSCALL(mq_timedreceive);
192COND_SYSCALL_COMPAT(mq_timedreceive); 194COND_SYSCALL(mq_timedreceive_time32);
193COND_SYSCALL(mq_notify); 195COND_SYSCALL(mq_notify);
194COND_SYSCALL_COMPAT(mq_notify); 196COND_SYSCALL_COMPAT(mq_notify);
195COND_SYSCALL(mq_getsetattr); 197COND_SYSCALL(mq_getsetattr);
@@ -211,7 +213,7 @@ COND_SYSCALL(old_semctl);
211COND_SYSCALL(semctl); 213COND_SYSCALL(semctl);
212COND_SYSCALL_COMPAT(semctl); 214COND_SYSCALL_COMPAT(semctl);
213COND_SYSCALL(semtimedop); 215COND_SYSCALL(semtimedop);
214COND_SYSCALL_COMPAT(semtimedop); 216COND_SYSCALL(semtimedop_time32);
215COND_SYSCALL(semop); 217COND_SYSCALL(semop);
216 218
217/* ipc/shm.c */ 219/* ipc/shm.c */
@@ -288,7 +290,7 @@ COND_SYSCALL(perf_event_open);
288COND_SYSCALL(accept4); 290COND_SYSCALL(accept4);
289COND_SYSCALL(recvmmsg); 291COND_SYSCALL(recvmmsg);
290COND_SYSCALL(recvmmsg_time32); 292COND_SYSCALL(recvmmsg_time32);
291COND_SYSCALL_COMPAT(recvmmsg); 293COND_SYSCALL_COMPAT(recvmmsg_time32);
292COND_SYSCALL_COMPAT(recvmmsg_time64); 294COND_SYSCALL_COMPAT(recvmmsg_time64);
293 295
294/* 296/*
diff --git a/kernel/time/hrtimer.c b/kernel/time/hrtimer.c
index f5cfa1b73d6f..0f5f96075110 100644
--- a/kernel/time/hrtimer.c
+++ b/kernel/time/hrtimer.c
@@ -1771,7 +1771,7 @@ SYSCALL_DEFINE2(nanosleep, struct __kernel_timespec __user *, rqtp,
1771 1771
1772#ifdef CONFIG_COMPAT_32BIT_TIME 1772#ifdef CONFIG_COMPAT_32BIT_TIME
1773 1773
1774COMPAT_SYSCALL_DEFINE2(nanosleep, struct old_timespec32 __user *, rqtp, 1774SYSCALL_DEFINE2(nanosleep_time32, struct old_timespec32 __user *, rqtp,
1775 struct old_timespec32 __user *, rmtp) 1775 struct old_timespec32 __user *, rmtp)
1776{ 1776{
1777 struct timespec64 tu; 1777 struct timespec64 tu;
diff --git a/kernel/time/posix-stubs.c b/kernel/time/posix-stubs.c
index a51895486e5e..67df65f887ac 100644
--- a/kernel/time/posix-stubs.c
+++ b/kernel/time/posix-stubs.c
@@ -45,6 +45,7 @@ SYS_NI(timer_delete);
45SYS_NI(clock_adjtime); 45SYS_NI(clock_adjtime);
46SYS_NI(getitimer); 46SYS_NI(getitimer);
47SYS_NI(setitimer); 47SYS_NI(setitimer);
48SYS_NI(clock_adjtime32);
48#ifdef __ARCH_WANT_SYS_ALARM 49#ifdef __ARCH_WANT_SYS_ALARM
49SYS_NI(alarm); 50SYS_NI(alarm);
50#endif 51#endif
@@ -150,16 +151,16 @@ SYSCALL_DEFINE4(clock_nanosleep, const clockid_t, which_clock, int, flags,
150 151
151#ifdef CONFIG_COMPAT 152#ifdef CONFIG_COMPAT
152COMPAT_SYS_NI(timer_create); 153COMPAT_SYS_NI(timer_create);
153COMPAT_SYS_NI(clock_adjtime);
154COMPAT_SYS_NI(timer_settime);
155COMPAT_SYS_NI(timer_gettime);
156COMPAT_SYS_NI(getitimer); 154COMPAT_SYS_NI(getitimer);
157COMPAT_SYS_NI(setitimer); 155COMPAT_SYS_NI(setitimer);
158#endif 156#endif
159 157
160#ifdef CONFIG_COMPAT_32BIT_TIME 158#ifdef CONFIG_COMPAT_32BIT_TIME
161COMPAT_SYSCALL_DEFINE2(clock_settime, const clockid_t, which_clock, 159SYS_NI(timer_settime32);
162 struct old_timespec32 __user *, tp) 160SYS_NI(timer_gettime32);
161
162SYSCALL_DEFINE2(clock_settime32, const clockid_t, which_clock,
163 struct old_timespec32 __user *, tp)
163{ 164{
164 struct timespec64 new_tp; 165 struct timespec64 new_tp;
165 166
@@ -171,8 +172,8 @@ COMPAT_SYSCALL_DEFINE2(clock_settime, const clockid_t, which_clock,
171 return do_sys_settimeofday64(&new_tp, NULL); 172 return do_sys_settimeofday64(&new_tp, NULL);
172} 173}
173 174
174COMPAT_SYSCALL_DEFINE2(clock_gettime, clockid_t, which_clock, 175SYSCALL_DEFINE2(clock_gettime32, clockid_t, which_clock,
175 struct old_timespec32 __user *, tp) 176 struct old_timespec32 __user *, tp)
176{ 177{
177 int ret; 178 int ret;
178 struct timespec64 kernel_tp; 179 struct timespec64 kernel_tp;
@@ -186,8 +187,8 @@ COMPAT_SYSCALL_DEFINE2(clock_gettime, clockid_t, which_clock,
186 return 0; 187 return 0;
187} 188}
188 189
189COMPAT_SYSCALL_DEFINE2(clock_getres, clockid_t, which_clock, 190SYSCALL_DEFINE2(clock_getres_time32, clockid_t, which_clock,
190 struct old_timespec32 __user *, tp) 191 struct old_timespec32 __user *, tp)
191{ 192{
192 struct timespec64 rtn_tp = { 193 struct timespec64 rtn_tp = {
193 .tv_sec = 0, 194 .tv_sec = 0,
@@ -206,9 +207,9 @@ COMPAT_SYSCALL_DEFINE2(clock_getres, clockid_t, which_clock,
206 } 207 }
207} 208}
208 209
209COMPAT_SYSCALL_DEFINE4(clock_nanosleep, clockid_t, which_clock, int, flags, 210SYSCALL_DEFINE4(clock_nanosleep_time32, clockid_t, which_clock, int, flags,
210 struct old_timespec32 __user *, rqtp, 211 struct old_timespec32 __user *, rqtp,
211 struct old_timespec32 __user *, rmtp) 212 struct old_timespec32 __user *, rmtp)
212{ 213{
213 struct timespec64 t; 214 struct timespec64 t;
214 215
diff --git a/kernel/time/posix-timers.c b/kernel/time/posix-timers.c
index de79f85ae14f..29176635991f 100644
--- a/kernel/time/posix-timers.c
+++ b/kernel/time/posix-timers.c
@@ -730,8 +730,8 @@ SYSCALL_DEFINE2(timer_gettime, timer_t, timer_id,
730 730
731#ifdef CONFIG_COMPAT_32BIT_TIME 731#ifdef CONFIG_COMPAT_32BIT_TIME
732 732
733COMPAT_SYSCALL_DEFINE2(timer_gettime, timer_t, timer_id, 733SYSCALL_DEFINE2(timer_gettime32, timer_t, timer_id,
734 struct old_itimerspec32 __user *, setting) 734 struct old_itimerspec32 __user *, setting)
735{ 735{
736 struct itimerspec64 cur_setting; 736 struct itimerspec64 cur_setting;
737 737
@@ -903,9 +903,9 @@ SYSCALL_DEFINE4(timer_settime, timer_t, timer_id, int, flags,
903} 903}
904 904
905#ifdef CONFIG_COMPAT_32BIT_TIME 905#ifdef CONFIG_COMPAT_32BIT_TIME
906COMPAT_SYSCALL_DEFINE4(timer_settime, timer_t, timer_id, int, flags, 906SYSCALL_DEFINE4(timer_settime32, timer_t, timer_id, int, flags,
907 struct old_itimerspec32 __user *, new, 907 struct old_itimerspec32 __user *, new,
908 struct old_itimerspec32 __user *, old) 908 struct old_itimerspec32 __user *, old)
909{ 909{
910 struct itimerspec64 new_spec, old_spec; 910 struct itimerspec64 new_spec, old_spec;
911 struct itimerspec64 *rtn = old ? &old_spec : NULL; 911 struct itimerspec64 *rtn = old ? &old_spec : NULL;
@@ -1096,8 +1096,8 @@ SYSCALL_DEFINE2(clock_getres, const clockid_t, which_clock,
1096 1096
1097#ifdef CONFIG_COMPAT_32BIT_TIME 1097#ifdef CONFIG_COMPAT_32BIT_TIME
1098 1098
1099COMPAT_SYSCALL_DEFINE2(clock_settime, clockid_t, which_clock, 1099SYSCALL_DEFINE2(clock_settime32, clockid_t, which_clock,
1100 struct old_timespec32 __user *, tp) 1100 struct old_timespec32 __user *, tp)
1101{ 1101{
1102 const struct k_clock *kc = clockid_to_kclock(which_clock); 1102 const struct k_clock *kc = clockid_to_kclock(which_clock);
1103 struct timespec64 ts; 1103 struct timespec64 ts;
@@ -1111,8 +1111,8 @@ COMPAT_SYSCALL_DEFINE2(clock_settime, clockid_t, which_clock,
1111 return kc->clock_set(which_clock, &ts); 1111 return kc->clock_set(which_clock, &ts);
1112} 1112}
1113 1113
1114COMPAT_SYSCALL_DEFINE2(clock_gettime, clockid_t, which_clock, 1114SYSCALL_DEFINE2(clock_gettime32, clockid_t, which_clock,
1115 struct old_timespec32 __user *, tp) 1115 struct old_timespec32 __user *, tp)
1116{ 1116{
1117 const struct k_clock *kc = clockid_to_kclock(which_clock); 1117 const struct k_clock *kc = clockid_to_kclock(which_clock);
1118 struct timespec64 ts; 1118 struct timespec64 ts;
@@ -1129,8 +1129,8 @@ COMPAT_SYSCALL_DEFINE2(clock_gettime, clockid_t, which_clock,
1129 return err; 1129 return err;
1130} 1130}
1131 1131
1132COMPAT_SYSCALL_DEFINE2(clock_adjtime, clockid_t, which_clock, 1132SYSCALL_DEFINE2(clock_adjtime32, clockid_t, which_clock,
1133 struct old_timex32 __user *, utp) 1133 struct old_timex32 __user *, utp)
1134{ 1134{
1135 struct __kernel_timex ktx; 1135 struct __kernel_timex ktx;
1136 int err; 1136 int err;
@@ -1147,8 +1147,8 @@ COMPAT_SYSCALL_DEFINE2(clock_adjtime, clockid_t, which_clock,
1147 return err; 1147 return err;
1148} 1148}
1149 1149
1150COMPAT_SYSCALL_DEFINE2(clock_getres, clockid_t, which_clock, 1150SYSCALL_DEFINE2(clock_getres_time32, clockid_t, which_clock,
1151 struct old_timespec32 __user *, tp) 1151 struct old_timespec32 __user *, tp)
1152{ 1152{
1153 const struct k_clock *kc = clockid_to_kclock(which_clock); 1153 const struct k_clock *kc = clockid_to_kclock(which_clock);
1154 struct timespec64 ts; 1154 struct timespec64 ts;
@@ -1204,9 +1204,9 @@ SYSCALL_DEFINE4(clock_nanosleep, const clockid_t, which_clock, int, flags,
1204 1204
1205#ifdef CONFIG_COMPAT_32BIT_TIME 1205#ifdef CONFIG_COMPAT_32BIT_TIME
1206 1206
1207COMPAT_SYSCALL_DEFINE4(clock_nanosleep, clockid_t, which_clock, int, flags, 1207SYSCALL_DEFINE4(clock_nanosleep_time32, clockid_t, which_clock, int, flags,
1208 struct old_timespec32 __user *, rqtp, 1208 struct old_timespec32 __user *, rqtp,
1209 struct old_timespec32 __user *, rmtp) 1209 struct old_timespec32 __user *, rmtp)
1210{ 1210{
1211 const struct k_clock *kc = clockid_to_kclock(which_clock); 1211 const struct k_clock *kc = clockid_to_kclock(which_clock);
1212 struct timespec64 t; 1212 struct timespec64 t;
diff --git a/kernel/time/time.c b/kernel/time/time.c
index 78b5c8f1495a..6261f969dcb7 100644
--- a/kernel/time/time.c
+++ b/kernel/time/time.c
@@ -98,11 +98,11 @@ SYSCALL_DEFINE1(stime, time_t __user *, tptr)
98 98
99#endif /* __ARCH_WANT_SYS_TIME */ 99#endif /* __ARCH_WANT_SYS_TIME */
100 100
101#ifdef CONFIG_COMPAT 101#ifdef CONFIG_COMPAT_32BIT_TIME
102#ifdef __ARCH_WANT_COMPAT_SYS_TIME 102#ifdef __ARCH_WANT_COMPAT_SYS_TIME
103 103
104/* old_time32_t is a 32 bit "long" and needs to get converted. */ 104/* old_time32_t is a 32 bit "long" and needs to get converted. */
105COMPAT_SYSCALL_DEFINE1(time, old_time32_t __user *, tloc) 105SYSCALL_DEFINE1(time32, old_time32_t __user *, tloc)
106{ 106{
107 old_time32_t i; 107 old_time32_t i;
108 108
@@ -116,7 +116,7 @@ COMPAT_SYSCALL_DEFINE1(time, old_time32_t __user *, tloc)
116 return i; 116 return i;
117} 117}
118 118
119COMPAT_SYSCALL_DEFINE1(stime, old_time32_t __user *, tptr) 119SYSCALL_DEFINE1(stime32, old_time32_t __user *, tptr)
120{ 120{
121 struct timespec64 tv; 121 struct timespec64 tv;
122 int err; 122 int err;
@@ -344,7 +344,7 @@ int put_old_timex32(struct old_timex32 __user *utp, const struct __kernel_timex
344 return 0; 344 return 0;
345} 345}
346 346
347COMPAT_SYSCALL_DEFINE1(adjtimex, struct old_timex32 __user *, utp) 347SYSCALL_DEFINE1(adjtimex_time32, struct old_timex32 __user *, utp)
348{ 348{
349 struct __kernel_timex txc; 349 struct __kernel_timex txc;
350 int err, ret; 350 int err, ret;