diff options
-rw-r--r-- | arch/ia64/ia32/sys_ia32.c | 15 | ||||
-rw-r--r-- | arch/mips/kernel/linux32.c | 15 | ||||
-rw-r--r-- | arch/parisc/kernel/sys_parisc32.c | 37 | ||||
-rw-r--r-- | arch/powerpc/kernel/sys_ppc32.c | 15 | ||||
-rw-r--r-- | arch/s390/kernel/compat_linux.c | 15 | ||||
-rw-r--r-- | arch/sparc64/kernel/sys_sparc32.c | 15 | ||||
-rw-r--r-- | arch/x86_64/ia32/sys_ia32.c | 19 | ||||
-rw-r--r-- | include/linux/compat.h | 26 |
8 files changed, 38 insertions, 119 deletions
diff --git a/arch/ia64/ia32/sys_ia32.c b/arch/ia64/ia32/sys_ia32.c index 13e739e4c84d..1e1a2353aefd 100644 --- a/arch/ia64/ia32/sys_ia32.c +++ b/arch/ia64/ia32/sys_ia32.c | |||
@@ -2594,23 +2594,10 @@ sys32_setresgid(compat_gid_t rgid, compat_gid_t egid, | |||
2594 | 2594 | ||
2595 | /* Handle adjtimex compatibility. */ | 2595 | /* Handle adjtimex compatibility. */ |
2596 | 2596 | ||
2597 | struct timex32 { | ||
2598 | u32 modes; | ||
2599 | s32 offset, freq, maxerror, esterror; | ||
2600 | s32 status, constant, precision, tolerance; | ||
2601 | struct compat_timeval time; | ||
2602 | s32 tick; | ||
2603 | s32 ppsfreq, jitter, shift, stabil; | ||
2604 | s32 jitcnt, calcnt, errcnt, stbcnt; | ||
2605 | s32 :32; s32 :32; s32 :32; s32 :32; | ||
2606 | s32 :32; s32 :32; s32 :32; s32 :32; | ||
2607 | s32 :32; s32 :32; s32 :32; s32 :32; | ||
2608 | }; | ||
2609 | |||
2610 | extern int do_adjtimex(struct timex *); | 2597 | extern int do_adjtimex(struct timex *); |
2611 | 2598 | ||
2612 | asmlinkage long | 2599 | asmlinkage long |
2613 | sys32_adjtimex(struct timex32 *utp) | 2600 | sys32_adjtimex(struct compat_timex *utp) |
2614 | { | 2601 | { |
2615 | struct timex txc; | 2602 | struct timex txc; |
2616 | int ret; | 2603 | int ret; |
diff --git a/arch/mips/kernel/linux32.c b/arch/mips/kernel/linux32.c index 013bc93688e8..f33e779796f0 100644 --- a/arch/mips/kernel/linux32.c +++ b/arch/mips/kernel/linux32.c | |||
@@ -1159,22 +1159,9 @@ out: | |||
1159 | 1159 | ||
1160 | /* Handle adjtimex compatibility. */ | 1160 | /* Handle adjtimex compatibility. */ |
1161 | 1161 | ||
1162 | struct timex32 { | ||
1163 | u32 modes; | ||
1164 | s32 offset, freq, maxerror, esterror; | ||
1165 | s32 status, constant, precision, tolerance; | ||
1166 | struct compat_timeval time; | ||
1167 | s32 tick; | ||
1168 | s32 ppsfreq, jitter, shift, stabil; | ||
1169 | s32 jitcnt, calcnt, errcnt, stbcnt; | ||
1170 | s32 :32; s32 :32; s32 :32; s32 :32; | ||
1171 | s32 :32; s32 :32; s32 :32; s32 :32; | ||
1172 | s32 :32; s32 :32; s32 :32; s32 :32; | ||
1173 | }; | ||
1174 | |||
1175 | extern int do_adjtimex(struct timex *); | 1162 | extern int do_adjtimex(struct timex *); |
1176 | 1163 | ||
1177 | asmlinkage int sys32_adjtimex(struct timex32 __user *utp) | 1164 | asmlinkage int sys32_adjtimex(struct compat_timex __user *utp) |
1178 | { | 1165 | { |
1179 | struct timex txc; | 1166 | struct timex txc; |
1180 | int ret; | 1167 | int ret; |
diff --git a/arch/parisc/kernel/sys_parisc32.c b/arch/parisc/kernel/sys_parisc32.c index 613569018410..ca1d8dbbadf3 100644 --- a/arch/parisc/kernel/sys_parisc32.c +++ b/arch/parisc/kernel/sys_parisc32.c | |||
@@ -567,43 +567,14 @@ asmlinkage int sys32_sendfile64(int out_fd, int in_fd, compat_loff_t __user *off | |||
567 | } | 567 | } |
568 | 568 | ||
569 | 569 | ||
570 | struct timex32 { | 570 | asmlinkage long sys32_adjtimex(struct compat_timex __user *txc_p32) |
571 | unsigned int modes; /* mode selector */ | ||
572 | int offset; /* time offset (usec) */ | ||
573 | int freq; /* frequency offset (scaled ppm) */ | ||
574 | int maxerror; /* maximum error (usec) */ | ||
575 | int esterror; /* estimated error (usec) */ | ||
576 | int status; /* clock command/status */ | ||
577 | int constant; /* pll time constant */ | ||
578 | int precision; /* clock precision (usec) (read only) */ | ||
579 | int tolerance; /* clock frequency tolerance (ppm) | ||
580 | * (read only) | ||
581 | */ | ||
582 | struct compat_timeval time; /* (read only) */ | ||
583 | int tick; /* (modified) usecs between clock ticks */ | ||
584 | |||
585 | int ppsfreq; /* pps frequency (scaled ppm) (ro) */ | ||
586 | int jitter; /* pps jitter (us) (ro) */ | ||
587 | int shift; /* interval duration (s) (shift) (ro) */ | ||
588 | int stabil; /* pps stability (scaled ppm) (ro) */ | ||
589 | int jitcnt; /* jitter limit exceeded (ro) */ | ||
590 | int calcnt; /* calibration intervals (ro) */ | ||
591 | int errcnt; /* calibration errors (ro) */ | ||
592 | int stbcnt; /* stability limit exceeded (ro) */ | ||
593 | |||
594 | int :32; int :32; int :32; int :32; | ||
595 | int :32; int :32; int :32; int :32; | ||
596 | int :32; int :32; int :32; int :32; | ||
597 | }; | ||
598 | |||
599 | asmlinkage long sys32_adjtimex(struct timex32 __user *txc_p32) | ||
600 | { | 571 | { |
601 | struct timex txc; | 572 | struct timex txc; |
602 | struct timex32 t32; | 573 | struct compat_timex t32; |
603 | int ret; | 574 | int ret; |
604 | extern int do_adjtimex(struct timex *txc); | 575 | extern int do_adjtimex(struct timex *txc); |
605 | 576 | ||
606 | if(copy_from_user(&t32, txc_p32, sizeof(struct timex32))) | 577 | if(copy_from_user(&t32, txc_p32, sizeof(struct compat_timex))) |
607 | return -EFAULT; | 578 | return -EFAULT; |
608 | #undef CP | 579 | #undef CP |
609 | #define CP(x) txc.x = t32.x | 580 | #define CP(x) txc.x = t32.x |
@@ -620,7 +591,7 @@ asmlinkage long sys32_adjtimex(struct timex32 __user *txc_p32) | |||
620 | CP(time.tv_sec); CP(time.tv_usec); CP(tick); CP(ppsfreq); CP(jitter); | 591 | CP(time.tv_sec); CP(time.tv_usec); CP(tick); CP(ppsfreq); CP(jitter); |
621 | CP(shift); CP(stabil); CP(jitcnt); CP(calcnt); CP(errcnt); | 592 | CP(shift); CP(stabil); CP(jitcnt); CP(calcnt); CP(errcnt); |
622 | CP(stbcnt); | 593 | CP(stbcnt); |
623 | return copy_to_user(txc_p32, &t32, sizeof(struct timex32)) ? -EFAULT : ret; | 594 | return copy_to_user(txc_p32, &t32, sizeof(struct compat_timex)) ? -EFAULT : ret; |
624 | } | 595 | } |
625 | 596 | ||
626 | 597 | ||
diff --git a/arch/powerpc/kernel/sys_ppc32.c b/arch/powerpc/kernel/sys_ppc32.c index cd75ab2908fa..d9867f583c68 100644 --- a/arch/powerpc/kernel/sys_ppc32.c +++ b/arch/powerpc/kernel/sys_ppc32.c | |||
@@ -162,22 +162,9 @@ asmlinkage long compat_sys_sysfs(u32 option, u32 arg1, u32 arg2) | |||
162 | } | 162 | } |
163 | 163 | ||
164 | /* Handle adjtimex compatibility. */ | 164 | /* Handle adjtimex compatibility. */ |
165 | struct timex32 { | ||
166 | u32 modes; | ||
167 | s32 offset, freq, maxerror, esterror; | ||
168 | s32 status, constant, precision, tolerance; | ||
169 | struct compat_timeval time; | ||
170 | s32 tick; | ||
171 | s32 ppsfreq, jitter, shift, stabil; | ||
172 | s32 jitcnt, calcnt, errcnt, stbcnt; | ||
173 | s32 :32; s32 :32; s32 :32; s32 :32; | ||
174 | s32 :32; s32 :32; s32 :32; s32 :32; | ||
175 | s32 :32; s32 :32; s32 :32; s32 :32; | ||
176 | }; | ||
177 | |||
178 | extern int do_adjtimex(struct timex *); | 165 | extern int do_adjtimex(struct timex *); |
179 | 166 | ||
180 | asmlinkage long compat_sys_adjtimex(struct timex32 __user *utp) | 167 | asmlinkage long compat_sys_adjtimex(struct compat_timex __user *utp) |
181 | { | 168 | { |
182 | struct timex txc; | 169 | struct timex txc; |
183 | int ret; | 170 | int ret; |
diff --git a/arch/s390/kernel/compat_linux.c b/arch/s390/kernel/compat_linux.c index cc058dc3bc8b..9809264f2f4d 100644 --- a/arch/s390/kernel/compat_linux.c +++ b/arch/s390/kernel/compat_linux.c | |||
@@ -707,22 +707,9 @@ asmlinkage long sys32_sendfile64(int out_fd, int in_fd, | |||
707 | 707 | ||
708 | /* Handle adjtimex compatibility. */ | 708 | /* Handle adjtimex compatibility. */ |
709 | 709 | ||
710 | struct timex32 { | ||
711 | u32 modes; | ||
712 | s32 offset, freq, maxerror, esterror; | ||
713 | s32 status, constant, precision, tolerance; | ||
714 | struct compat_timeval time; | ||
715 | s32 tick; | ||
716 | s32 ppsfreq, jitter, shift, stabil; | ||
717 | s32 jitcnt, calcnt, errcnt, stbcnt; | ||
718 | s32 :32; s32 :32; s32 :32; s32 :32; | ||
719 | s32 :32; s32 :32; s32 :32; s32 :32; | ||
720 | s32 :32; s32 :32; s32 :32; s32 :32; | ||
721 | }; | ||
722 | |||
723 | extern int do_adjtimex(struct timex *); | 710 | extern int do_adjtimex(struct timex *); |
724 | 711 | ||
725 | asmlinkage long sys32_adjtimex(struct timex32 __user *utp) | 712 | asmlinkage long sys32_adjtimex(struct compat_timex __user *utp) |
726 | { | 713 | { |
727 | struct timex txc; | 714 | struct timex txc; |
728 | int ret; | 715 | int ret; |
diff --git a/arch/sparc64/kernel/sys_sparc32.c b/arch/sparc64/kernel/sys_sparc32.c index 0e41df024489..48f02f201918 100644 --- a/arch/sparc64/kernel/sys_sparc32.c +++ b/arch/sparc64/kernel/sys_sparc32.c | |||
@@ -947,22 +947,9 @@ asmlinkage long compat_sys_sendfile64(int out_fd, int in_fd, | |||
947 | 947 | ||
948 | /* Handle adjtimex compatibility. */ | 948 | /* Handle adjtimex compatibility. */ |
949 | 949 | ||
950 | struct timex32 { | ||
951 | u32 modes; | ||
952 | s32 offset, freq, maxerror, esterror; | ||
953 | s32 status, constant, precision, tolerance; | ||
954 | struct compat_timeval time; | ||
955 | s32 tick; | ||
956 | s32 ppsfreq, jitter, shift, stabil; | ||
957 | s32 jitcnt, calcnt, errcnt, stbcnt; | ||
958 | s32 :32; s32 :32; s32 :32; s32 :32; | ||
959 | s32 :32; s32 :32; s32 :32; s32 :32; | ||
960 | s32 :32; s32 :32; s32 :32; s32 :32; | ||
961 | }; | ||
962 | |||
963 | extern int do_adjtimex(struct timex *); | 950 | extern int do_adjtimex(struct timex *); |
964 | 951 | ||
965 | asmlinkage long sys32_adjtimex(struct timex32 __user *utp) | 952 | asmlinkage long sys32_adjtimex(struct compat_timex __user *utp) |
966 | { | 953 | { |
967 | struct timex txc; | 954 | struct timex txc; |
968 | int ret; | 955 | int ret; |
diff --git a/arch/x86_64/ia32/sys_ia32.c b/arch/x86_64/ia32/sys_ia32.c index 2b2d029f477c..b13121e451a8 100644 --- a/arch/x86_64/ia32/sys_ia32.c +++ b/arch/x86_64/ia32/sys_ia32.c | |||
@@ -769,30 +769,17 @@ sys32_sendfile(int out_fd, int in_fd, compat_off_t __user *offset, s32 count) | |||
769 | 769 | ||
770 | /* Handle adjtimex compatibility. */ | 770 | /* Handle adjtimex compatibility. */ |
771 | 771 | ||
772 | struct timex32 { | ||
773 | u32 modes; | ||
774 | s32 offset, freq, maxerror, esterror; | ||
775 | s32 status, constant, precision, tolerance; | ||
776 | struct compat_timeval time; | ||
777 | s32 tick; | ||
778 | s32 ppsfreq, jitter, shift, stabil; | ||
779 | s32 jitcnt, calcnt, errcnt, stbcnt; | ||
780 | s32 :32; s32 :32; s32 :32; s32 :32; | ||
781 | s32 :32; s32 :32; s32 :32; s32 :32; | ||
782 | s32 :32; s32 :32; s32 :32; s32 :32; | ||
783 | }; | ||
784 | |||
785 | extern int do_adjtimex(struct timex *); | 772 | extern int do_adjtimex(struct timex *); |
786 | 773 | ||
787 | asmlinkage long | 774 | asmlinkage long |
788 | sys32_adjtimex(struct timex32 __user *utp) | 775 | sys32_adjtimex(struct compat_timex __user *utp) |
789 | { | 776 | { |
790 | struct timex txc; | 777 | struct timex txc; |
791 | int ret; | 778 | int ret; |
792 | 779 | ||
793 | memset(&txc, 0, sizeof(struct timex)); | 780 | memset(&txc, 0, sizeof(struct timex)); |
794 | 781 | ||
795 | if (!access_ok(VERIFY_READ, utp, sizeof(struct timex32)) || | 782 | if (!access_ok(VERIFY_READ, utp, sizeof(struct compat_timex)) || |
796 | __get_user(txc.modes, &utp->modes) || | 783 | __get_user(txc.modes, &utp->modes) || |
797 | __get_user(txc.offset, &utp->offset) || | 784 | __get_user(txc.offset, &utp->offset) || |
798 | __get_user(txc.freq, &utp->freq) || | 785 | __get_user(txc.freq, &utp->freq) || |
@@ -817,7 +804,7 @@ sys32_adjtimex(struct timex32 __user *utp) | |||
817 | 804 | ||
818 | ret = do_adjtimex(&txc); | 805 | ret = do_adjtimex(&txc); |
819 | 806 | ||
820 | if (!access_ok(VERIFY_WRITE, utp, sizeof(struct timex32)) || | 807 | if (!access_ok(VERIFY_WRITE, utp, sizeof(struct compat_timex)) || |
821 | __put_user(txc.modes, &utp->modes) || | 808 | __put_user(txc.modes, &utp->modes) || |
822 | __put_user(txc.offset, &utp->offset) || | 809 | __put_user(txc.offset, &utp->offset) || |
823 | __put_user(txc.freq, &utp->freq) || | 810 | __put_user(txc.freq, &utp->freq) || |
diff --git a/include/linux/compat.h b/include/linux/compat.h index c9ab2a26348c..859f95700d36 100644 --- a/include/linux/compat.h +++ b/include/linux/compat.h | |||
@@ -45,6 +45,32 @@ struct compat_tms { | |||
45 | compat_clock_t tms_cstime; | 45 | compat_clock_t tms_cstime; |
46 | }; | 46 | }; |
47 | 47 | ||
48 | struct compat_timex { | ||
49 | compat_uint_t modes; | ||
50 | compat_long_t offset; | ||
51 | compat_long_t freq; | ||
52 | compat_long_t maxerror; | ||
53 | compat_long_t esterror; | ||
54 | compat_int_t status; | ||
55 | compat_long_t constant; | ||
56 | compat_long_t precision; | ||
57 | compat_long_t tolerance; | ||
58 | struct compat_timeval time; | ||
59 | compat_long_t tick; | ||
60 | compat_long_t ppsfreq; | ||
61 | compat_long_t jitter; | ||
62 | compat_int_t shift; | ||
63 | compat_long_t stabil; | ||
64 | compat_long_t jitcnt; | ||
65 | compat_long_t calcnt; | ||
66 | compat_long_t errcnt; | ||
67 | compat_long_t stbcnt; | ||
68 | |||
69 | compat_int_t :32; compat_int_t :32; compat_int_t :32; compat_int_t :32; | ||
70 | compat_int_t :32; compat_int_t :32; compat_int_t :32; compat_int_t :32; | ||
71 | compat_int_t :32; compat_int_t :32; compat_int_t :32; compat_int_t :32; | ||
72 | }; | ||
73 | |||
48 | #define _COMPAT_NSIG_WORDS (_COMPAT_NSIG / _COMPAT_NSIG_BPW) | 74 | #define _COMPAT_NSIG_WORDS (_COMPAT_NSIG / _COMPAT_NSIG_BPW) |
49 | 75 | ||
50 | typedef struct { | 76 | typedef struct { |