diff options
Diffstat (limited to 'arch')
-rw-r--r-- | arch/alpha/kernel/osf_sys.c | 14 | ||||
-rw-r--r-- | arch/i386/kernel/syscall_table.S | 1 | ||||
-rw-r--r-- | arch/sparc64/kernel/sys_sparc32.c | 14 | ||||
-rw-r--r-- | arch/x86_64/ia32/ia32entry.S | 3 |
4 files changed, 27 insertions, 5 deletions
diff --git a/arch/alpha/kernel/osf_sys.c b/arch/alpha/kernel/osf_sys.c index ea405f5713ce..ce857158c1ea 100644 --- a/arch/alpha/kernel/osf_sys.c +++ b/arch/alpha/kernel/osf_sys.c | |||
@@ -953,15 +953,25 @@ osf_setitimer(int which, struct itimerval32 __user *in, struct itimerval32 __use | |||
953 | asmlinkage int | 953 | asmlinkage int |
954 | osf_utimes(char __user *filename, struct timeval32 __user *tvs) | 954 | osf_utimes(char __user *filename, struct timeval32 __user *tvs) |
955 | { | 955 | { |
956 | struct timeval ktvs[2]; | 956 | struct timespec tv[2]; |
957 | 957 | ||
958 | if (tvs) { | 958 | if (tvs) { |
959 | struct timeval ktvs[2]; | ||
959 | if (get_tv32(&ktvs[0], &tvs[0]) || | 960 | if (get_tv32(&ktvs[0], &tvs[0]) || |
960 | get_tv32(&ktvs[1], &tvs[1])) | 961 | get_tv32(&ktvs[1], &tvs[1])) |
961 | return -EFAULT; | 962 | return -EFAULT; |
963 | |||
964 | if (ktvs[0].tv_usec < 0 || ktvs[0].tv_usec >= 1000000 || | ||
965 | ktvs[1].tv_usec < 0 || ktvs[1].tv_usec >= 1000000) | ||
966 | return -EINVAL; | ||
967 | |||
968 | tv[0].tv_sec = ktvs[0].tv_sec; | ||
969 | tv[0].tv_nsec = 1000 * ktvs[0].tv_usec; | ||
970 | tv[1].tv_sec = ktvs[1].tv_sec; | ||
971 | tv[1].tv_nsec = 1000 * ktvs[1].tv_usec; | ||
962 | } | 972 | } |
963 | 973 | ||
964 | return do_utimes(AT_FDCWD, filename, tvs ? ktvs : NULL); | 974 | return do_utimes(AT_FDCWD, filename, tvs ? tv : NULL, 0); |
965 | } | 975 | } |
966 | 976 | ||
967 | #define MAX_SELECT_SECONDS \ | 977 | #define MAX_SELECT_SECONDS \ |
diff --git a/arch/i386/kernel/syscall_table.S b/arch/i386/kernel/syscall_table.S index 2697e9210e92..0772678ceecf 100644 --- a/arch/i386/kernel/syscall_table.S +++ b/arch/i386/kernel/syscall_table.S | |||
@@ -319,3 +319,4 @@ ENTRY(sys_call_table) | |||
319 | .long sys_move_pages | 319 | .long sys_move_pages |
320 | .long sys_getcpu | 320 | .long sys_getcpu |
321 | .long sys_epoll_pwait | 321 | .long sys_epoll_pwait |
322 | .long sys_utimensat /* 320 */ | ||
diff --git a/arch/sparc64/kernel/sys_sparc32.c b/arch/sparc64/kernel/sys_sparc32.c index 7876a0226285..692e46a6b8da 100644 --- a/arch/sparc64/kernel/sys_sparc32.c +++ b/arch/sparc64/kernel/sys_sparc32.c | |||
@@ -775,15 +775,25 @@ asmlinkage long sys32_settimeofday(struct compat_timeval __user *tv, | |||
775 | asmlinkage long sys32_utimes(char __user *filename, | 775 | asmlinkage long sys32_utimes(char __user *filename, |
776 | struct compat_timeval __user *tvs) | 776 | struct compat_timeval __user *tvs) |
777 | { | 777 | { |
778 | struct timeval ktvs[2]; | 778 | struct timespec tv[2]; |
779 | 779 | ||
780 | if (tvs) { | 780 | if (tvs) { |
781 | struct timeval ktvs[2]; | ||
781 | if (get_tv32(&ktvs[0], tvs) || | 782 | if (get_tv32(&ktvs[0], tvs) || |
782 | get_tv32(&ktvs[1], 1+tvs)) | 783 | get_tv32(&ktvs[1], 1+tvs)) |
783 | return -EFAULT; | 784 | return -EFAULT; |
785 | |||
786 | if (ktvs[0].tv_usec < 0 || ktvs[0].tv_usec >= 1000000 || | ||
787 | ktvs[1].tv_usec < 0 || ktvs[1].tv_usec >= 1000000) | ||
788 | return -EINVAL; | ||
789 | |||
790 | tv[0].tv_sec = ktvs[0].tv_sec; | ||
791 | tv[0].tv_nsec = 1000 * ktvs[0].tv_usec; | ||
792 | tv[1].tv_sec = ktvs[1].tv_sec; | ||
793 | tv[1].tv_nsec = 1000 * ktvs[1].tv_usec; | ||
784 | } | 794 | } |
785 | 795 | ||
786 | return do_utimes(AT_FDCWD, filename, (tvs ? &ktvs[0] : NULL)); | 796 | return do_utimes(AT_FDCWD, filename, tvs ? tv : NULL); |
787 | } | 797 | } |
788 | 798 | ||
789 | /* These are here just in case some old sparc32 binary calls it. */ | 799 | /* These are here just in case some old sparc32 binary calls it. */ |
diff --git a/arch/x86_64/ia32/ia32entry.S b/arch/x86_64/ia32/ia32entry.S index c48087db6f75..f21068378272 100644 --- a/arch/x86_64/ia32/ia32entry.S +++ b/arch/x86_64/ia32/ia32entry.S | |||
@@ -710,9 +710,10 @@ ia32_sys_call_table: | |||
710 | .quad compat_sys_get_robust_list | 710 | .quad compat_sys_get_robust_list |
711 | .quad sys_splice | 711 | .quad sys_splice |
712 | .quad sys_sync_file_range | 712 | .quad sys_sync_file_range |
713 | .quad sys_tee | 713 | .quad sys_tee /* 315 */ |
714 | .quad compat_sys_vmsplice | 714 | .quad compat_sys_vmsplice |
715 | .quad compat_sys_move_pages | 715 | .quad compat_sys_move_pages |
716 | .quad sys_getcpu | 716 | .quad sys_getcpu |
717 | .quad sys_epoll_pwait | 717 | .quad sys_epoll_pwait |
718 | .quad compat_sys_utimensat /* 320 */ | ||
718 | ia32_syscall_end: | 719 | ia32_syscall_end: |