aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
Diffstat (limited to 'arch')
-rw-r--r--arch/alpha/kernel/osf_sys.c14
-rw-r--r--arch/i386/kernel/syscall_table.S1
-rw-r--r--arch/sparc64/kernel/sys_sparc32.c14
-rw-r--r--arch/x86_64/ia32/ia32entry.S3
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
953asmlinkage int 953asmlinkage int
954osf_utimes(char __user *filename, struct timeval32 __user *tvs) 954osf_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,
775asmlinkage long sys32_utimes(char __user *filename, 775asmlinkage 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 */
718ia32_syscall_end: 719ia32_syscall_end: