Skip to content

Commit 4f9fbd8

Browse files
committed
y2038: rename itimerval to __kernel_old_itimerval
Take the renaming of timeval and timespec one level further, also renaming itimerval to __kernel_old_itimerval, to avoid namespace conflicts with the user-space structure that may use 64-bit time_t members. Signed-off-by: Arnd Bergmann <[email protected]>
1 parent 751adda commit 4f9fbd8

File tree

3 files changed

+18
-14
lines changed

3 files changed

+18
-14
lines changed

include/linux/syscalls.h

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,7 @@ struct inode;
1616
struct iocb;
1717
struct io_event;
1818
struct iovec;
19-
struct itimerspec;
20-
struct itimerval;
19+
struct __kernel_old_itimerval;
2120
struct kexec_segment;
2221
struct linux_dirent;
2322
struct linux_dirent64;
@@ -591,10 +590,10 @@ asmlinkage long sys_nanosleep_time32(struct old_timespec32 __user *rqtp,
591590
struct old_timespec32 __user *rmtp);
592591

593592
/* kernel/itimer.c */
594-
asmlinkage long sys_getitimer(int which, struct itimerval __user *value);
593+
asmlinkage long sys_getitimer(int which, struct __kernel_old_itimerval __user *value);
595594
asmlinkage long sys_setitimer(int which,
596-
struct itimerval __user *value,
597-
struct itimerval __user *ovalue);
595+
struct __kernel_old_itimerval __user *value,
596+
struct __kernel_old_itimerval __user *ovalue);
598597

599598
/* kernel/kexec.c */
600599
asmlinkage long sys_kexec_load(unsigned long entry, unsigned long nr_segments,

include/uapi/linux/time_types.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,11 @@ struct __kernel_old_timespec {
3333
long tv_nsec; /* nanoseconds */
3434
};
3535

36+
struct __kernel_old_itimerval {
37+
struct __kernel_old_timeval it_interval;/* timer interval */
38+
struct __kernel_old_timeval it_value; /* current value */
39+
};
40+
3641
struct __kernel_sock_timeval {
3742
__s64 tv_sec;
3843
__s64 tv_usec;

kernel/time/itimer.c

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -97,20 +97,20 @@ static int do_getitimer(int which, struct itimerspec64 *value)
9797
return 0;
9898
}
9999

100-
static int put_itimerval(struct itimerval __user *o,
100+
static int put_itimerval(struct __kernel_old_itimerval __user *o,
101101
const struct itimerspec64 *i)
102102
{
103-
struct itimerval v;
103+
struct __kernel_old_itimerval v;
104104

105105
v.it_interval.tv_sec = i->it_interval.tv_sec;
106106
v.it_interval.tv_usec = i->it_interval.tv_nsec / NSEC_PER_USEC;
107107
v.it_value.tv_sec = i->it_value.tv_sec;
108108
v.it_value.tv_usec = i->it_value.tv_nsec / NSEC_PER_USEC;
109-
return copy_to_user(o, &v, sizeof(struct itimerval)) ? -EFAULT : 0;
109+
return copy_to_user(o, &v, sizeof(struct __kernel_old_itimerval)) ? -EFAULT : 0;
110110
}
111111

112112

113-
SYSCALL_DEFINE2(getitimer, int, which, struct itimerval __user *, value)
113+
SYSCALL_DEFINE2(getitimer, int, which, struct __kernel_old_itimerval __user *, value)
114114
{
115115
struct itimerspec64 get_buffer;
116116
int error = do_getitimer(which, &get_buffer);
@@ -314,11 +314,11 @@ SYSCALL_DEFINE1(alarm, unsigned int, seconds)
314314

315315
#endif
316316

317-
static int get_itimerval(struct itimerspec64 *o, const struct itimerval __user *i)
317+
static int get_itimerval(struct itimerspec64 *o, const struct __kernel_old_itimerval __user *i)
318318
{
319-
struct itimerval v;
319+
struct __kernel_old_itimerval v;
320320

321-
if (copy_from_user(&v, i, sizeof(struct itimerval)))
321+
if (copy_from_user(&v, i, sizeof(struct __kernel_old_itimerval)))
322322
return -EFAULT;
323323

324324
/* Validate the timevals in value. */
@@ -333,8 +333,8 @@ static int get_itimerval(struct itimerspec64 *o, const struct itimerval __user *
333333
return 0;
334334
}
335335

336-
SYSCALL_DEFINE3(setitimer, int, which, struct itimerval __user *, value,
337-
struct itimerval __user *, ovalue)
336+
SYSCALL_DEFINE3(setitimer, int, which, struct __kernel_old_itimerval __user *, value,
337+
struct __kernel_old_itimerval __user *, ovalue)
338338
{
339339
struct itimerspec64 set_buffer, get_buffer;
340340
int error;

0 commit comments

Comments
 (0)