diff options
Diffstat (limited to 'kernel/compat.c')
-rw-r--r-- | kernel/compat.c | 30 |
1 files changed, 23 insertions, 7 deletions
diff --git a/kernel/compat.c b/kernel/compat.c index c1601a84f8d8..126dee9530aa 100644 --- a/kernel/compat.c +++ b/kernel/compat.c | |||
@@ -21,6 +21,7 @@ | |||
21 | #include <linux/unistd.h> | 21 | #include <linux/unistd.h> |
22 | #include <linux/security.h> | 22 | #include <linux/security.h> |
23 | #include <linux/timex.h> | 23 | #include <linux/timex.h> |
24 | #include <linux/migrate.h> | ||
24 | 25 | ||
25 | #include <asm/uaccess.h> | 26 | #include <asm/uaccess.h> |
26 | 27 | ||
@@ -729,17 +730,10 @@ void | |||
729 | sigset_from_compat (sigset_t *set, compat_sigset_t *compat) | 730 | sigset_from_compat (sigset_t *set, compat_sigset_t *compat) |
730 | { | 731 | { |
731 | switch (_NSIG_WORDS) { | 732 | switch (_NSIG_WORDS) { |
732 | #if defined (__COMPAT_ENDIAN_SWAP__) | ||
733 | case 4: set->sig[3] = compat->sig[7] | (((long)compat->sig[6]) << 32 ); | ||
734 | case 3: set->sig[2] = compat->sig[5] | (((long)compat->sig[4]) << 32 ); | ||
735 | case 2: set->sig[1] = compat->sig[3] | (((long)compat->sig[2]) << 32 ); | ||
736 | case 1: set->sig[0] = compat->sig[1] | (((long)compat->sig[0]) << 32 ); | ||
737 | #else | ||
738 | case 4: set->sig[3] = compat->sig[6] | (((long)compat->sig[7]) << 32 ); | 733 | case 4: set->sig[3] = compat->sig[6] | (((long)compat->sig[7]) << 32 ); |
739 | case 3: set->sig[2] = compat->sig[4] | (((long)compat->sig[5]) << 32 ); | 734 | case 3: set->sig[2] = compat->sig[4] | (((long)compat->sig[5]) << 32 ); |
740 | case 2: set->sig[1] = compat->sig[2] | (((long)compat->sig[3]) << 32 ); | 735 | case 2: set->sig[1] = compat->sig[2] | (((long)compat->sig[3]) << 32 ); |
741 | case 1: set->sig[0] = compat->sig[0] | (((long)compat->sig[1]) << 32 ); | 736 | case 1: set->sig[0] = compat->sig[0] | (((long)compat->sig[1]) << 32 ); |
742 | #endif | ||
743 | } | 737 | } |
744 | } | 738 | } |
745 | 739 | ||
@@ -934,3 +928,25 @@ asmlinkage long compat_sys_adjtimex(struct compat_timex __user *utp) | |||
934 | 928 | ||
935 | return ret; | 929 | return ret; |
936 | } | 930 | } |
931 | |||
932 | #ifdef CONFIG_NUMA | ||
933 | asmlinkage long compat_sys_move_pages(pid_t pid, unsigned long nr_pages, | ||
934 | compat_uptr_t __user *pages32, | ||
935 | const int __user *nodes, | ||
936 | int __user *status, | ||
937 | int flags) | ||
938 | { | ||
939 | const void __user * __user *pages; | ||
940 | int i; | ||
941 | |||
942 | pages = compat_alloc_user_space(nr_pages * sizeof(void *)); | ||
943 | for (i = 0; i < nr_pages; i++) { | ||
944 | compat_uptr_t p; | ||
945 | |||
946 | if (get_user(p, pages32 + i) || | ||
947 | put_user(compat_ptr(p), pages + i)) | ||
948 | return -EFAULT; | ||
949 | } | ||
950 | return sys_move_pages(pid, nr_pages, pages, nodes, status, flags); | ||
951 | } | ||
952 | #endif | ||