Skip to content

Commit 6ff8473

Browse files
deepa-hubKAGA-KOKO
authored andcommitted
time: Change types to new y2038 safe __kernel_itimerspec
timer_set/gettime and timerfd_set/get apis use struct itimerspec at the user interface layer. struct itimerspec is not y2038-safe. Change these interfaces to use y2038-safe struct __kernel_itimerspec instead. This will help define new syscalls when 32bit architectures select CONFIG_64BIT_TIME. Signed-off-by: Deepa Dinamani <[email protected]> Signed-off-by: Thomas Gleixner <[email protected]> Cc: [email protected] Cc: [email protected] Cc: [email protected] Cc: [email protected] Cc: [email protected] Link: https://lkml.kernel.org/r/[email protected]
1 parent afef05c commit 6ff8473

File tree

3 files changed

+16
-14
lines changed

3 files changed

+16
-14
lines changed

fs/timerfd.c

+4-4
Original file line numberDiff line numberDiff line change
@@ -533,8 +533,8 @@ static int do_timerfd_gettime(int ufd, struct itimerspec64 *t)
533533
}
534534

535535
SYSCALL_DEFINE4(timerfd_settime, int, ufd, int, flags,
536-
const struct itimerspec __user *, utmr,
537-
struct itimerspec __user *, otmr)
536+
const struct __kernel_itimerspec __user *, utmr,
537+
struct __kernel_itimerspec __user *, otmr)
538538
{
539539
struct itimerspec64 new, old;
540540
int ret;
@@ -550,7 +550,7 @@ SYSCALL_DEFINE4(timerfd_settime, int, ufd, int, flags,
550550
return ret;
551551
}
552552

553-
SYSCALL_DEFINE2(timerfd_gettime, int, ufd, struct itimerspec __user *, otmr)
553+
SYSCALL_DEFINE2(timerfd_gettime, int, ufd, struct __kernel_itimerspec __user *, otmr)
554554
{
555555
struct itimerspec64 kotmr;
556556
int ret = do_timerfd_gettime(ufd, &kotmr);
@@ -559,7 +559,7 @@ SYSCALL_DEFINE2(timerfd_gettime, int, ufd, struct itimerspec __user *, otmr)
559559
return put_itimerspec64(&kotmr, otmr) ? -EFAULT : 0;
560560
}
561561

562-
#ifdef CONFIG_COMPAT
562+
#ifdef CONFIG_COMPAT_32BIT_TIME
563563
COMPAT_SYSCALL_DEFINE4(timerfd_settime, int, ufd, int, flags,
564564
const struct compat_itimerspec __user *, utmr,
565565
struct compat_itimerspec __user *, otmr)

include/linux/syscalls.h

+5-5
Original file line numberDiff line numberDiff line change
@@ -501,9 +501,9 @@ asmlinkage long sys_sync_file_range(int fd, loff_t offset, loff_t nbytes,
501501
/* fs/timerfd.c */
502502
asmlinkage long sys_timerfd_create(int clockid, int flags);
503503
asmlinkage long sys_timerfd_settime(int ufd, int flags,
504-
const struct itimerspec __user *utmr,
505-
struct itimerspec __user *otmr);
506-
asmlinkage long sys_timerfd_gettime(int ufd, struct itimerspec __user *otmr);
504+
const struct __kernel_itimerspec __user *utmr,
505+
struct __kernel_itimerspec __user *otmr);
506+
asmlinkage long sys_timerfd_gettime(int ufd, struct __kernel_itimerspec __user *otmr);
507507

508508
/* fs/utimes.c */
509509
asmlinkage long sys_utimensat(int dfd, const char __user *filename,
@@ -568,10 +568,10 @@ asmlinkage long sys_timer_create(clockid_t which_clock,
568568
struct sigevent __user *timer_event_spec,
569569
timer_t __user * created_timer_id);
570570
asmlinkage long sys_timer_gettime(timer_t timer_id,
571-
struct itimerspec __user *setting);
571+
struct __kernel_itimerspec __user *setting);
572572
asmlinkage long sys_timer_getoverrun(timer_t timer_id);
573573
asmlinkage long sys_timer_settime(timer_t timer_id, int flags,
574-
const struct itimerspec __user *new_setting,
574+
const struct __kernel_itimerspec __user *new_setting,
575575
struct itimerspec __user *old_setting);
576576
asmlinkage long sys_timer_delete(timer_t timer_id);
577577
asmlinkage long sys_clock_settime(clockid_t which_clock,

kernel/time/posix-timers.c

+7-5
Original file line numberDiff line numberDiff line change
@@ -743,7 +743,7 @@ static int do_timer_gettime(timer_t timer_id, struct itimerspec64 *setting)
743743

744744
/* Get the time remaining on a POSIX.1b interval timer. */
745745
SYSCALL_DEFINE2(timer_gettime, timer_t, timer_id,
746-
struct itimerspec __user *, setting)
746+
struct __kernel_itimerspec __user *, setting)
747747
{
748748
struct itimerspec64 cur_setting;
749749

@@ -755,7 +755,8 @@ SYSCALL_DEFINE2(timer_gettime, timer_t, timer_id,
755755
return ret;
756756
}
757757

758-
#ifdef CONFIG_COMPAT
758+
#ifdef CONFIG_COMPAT_32BIT_TIME
759+
759760
COMPAT_SYSCALL_DEFINE2(timer_gettime, timer_t, timer_id,
760761
struct compat_itimerspec __user *, setting)
761762
{
@@ -768,6 +769,7 @@ COMPAT_SYSCALL_DEFINE2(timer_gettime, timer_t, timer_id,
768769
}
769770
return ret;
770771
}
772+
771773
#endif
772774

773775
/*
@@ -906,8 +908,8 @@ static int do_timer_settime(timer_t timer_id, int flags,
906908

907909
/* Set a POSIX.1b interval timer */
908910
SYSCALL_DEFINE4(timer_settime, timer_t, timer_id, int, flags,
909-
const struct itimerspec __user *, new_setting,
910-
struct itimerspec __user *, old_setting)
911+
const struct __kernel_itimerspec __user *, new_setting,
912+
struct __kernel_itimerspec __user *, old_setting)
911913
{
912914
struct itimerspec64 new_spec, old_spec;
913915
struct itimerspec64 *rtn = old_setting ? &old_spec : NULL;
@@ -927,7 +929,7 @@ SYSCALL_DEFINE4(timer_settime, timer_t, timer_id, int, flags,
927929
return error;
928930
}
929931

930-
#ifdef CONFIG_COMPAT
932+
#ifdef CONFIG_COMPAT_32BIT_TIME
931933
COMPAT_SYSCALL_DEFINE4(timer_settime, timer_t, timer_id, int, flags,
932934
struct compat_itimerspec __user *, new,
933935
struct compat_itimerspec __user *, old)

0 commit comments

Comments
 (0)