diff options
-rw-r--r-- | arch/avr32/include/asm/uaccess.h | 11 | ||||
-rw-r--r-- | arch/avr32/kernel/avr32_ksyms.c | 2 | ||||
-rw-r--r-- | arch/avr32/lib/copy_user.S | 4 |
3 files changed, 13 insertions, 4 deletions
diff --git a/arch/avr32/include/asm/uaccess.h b/arch/avr32/include/asm/uaccess.h index 68cf638faf48..b1ec1fa06463 100644 --- a/arch/avr32/include/asm/uaccess.h +++ b/arch/avr32/include/asm/uaccess.h | |||
@@ -74,7 +74,7 @@ extern __kernel_size_t __copy_user(void *to, const void *from, | |||
74 | 74 | ||
75 | extern __kernel_size_t copy_to_user(void __user *to, const void *from, | 75 | extern __kernel_size_t copy_to_user(void __user *to, const void *from, |
76 | __kernel_size_t n); | 76 | __kernel_size_t n); |
77 | extern __kernel_size_t copy_from_user(void *to, const void __user *from, | 77 | extern __kernel_size_t ___copy_from_user(void *to, const void __user *from, |
78 | __kernel_size_t n); | 78 | __kernel_size_t n); |
79 | 79 | ||
80 | static inline __kernel_size_t __copy_to_user(void __user *to, const void *from, | 80 | static inline __kernel_size_t __copy_to_user(void __user *to, const void *from, |
@@ -88,6 +88,15 @@ static inline __kernel_size_t __copy_from_user(void *to, | |||
88 | { | 88 | { |
89 | return __copy_user(to, (const void __force *)from, n); | 89 | return __copy_user(to, (const void __force *)from, n); |
90 | } | 90 | } |
91 | static inline __kernel_size_t copy_from_user(void *to, | ||
92 | const void __user *from, | ||
93 | __kernel_size_t n) | ||
94 | { | ||
95 | size_t res = ___copy_from_user(to, from, n); | ||
96 | if (unlikely(res)) | ||
97 | memset(to + (n - res), 0, res); | ||
98 | return res; | ||
99 | } | ||
91 | 100 | ||
92 | #define __copy_to_user_inatomic __copy_to_user | 101 | #define __copy_to_user_inatomic __copy_to_user |
93 | #define __copy_from_user_inatomic __copy_from_user | 102 | #define __copy_from_user_inatomic __copy_from_user |
diff --git a/arch/avr32/kernel/avr32_ksyms.c b/arch/avr32/kernel/avr32_ksyms.c index d93ead02daed..7c6cf14f0985 100644 --- a/arch/avr32/kernel/avr32_ksyms.c +++ b/arch/avr32/kernel/avr32_ksyms.c | |||
@@ -36,7 +36,7 @@ EXPORT_SYMBOL(copy_page); | |||
36 | /* | 36 | /* |
37 | * Userspace access stuff. | 37 | * Userspace access stuff. |
38 | */ | 38 | */ |
39 | EXPORT_SYMBOL(copy_from_user); | 39 | EXPORT_SYMBOL(___copy_from_user); |
40 | EXPORT_SYMBOL(copy_to_user); | 40 | EXPORT_SYMBOL(copy_to_user); |
41 | EXPORT_SYMBOL(__copy_user); | 41 | EXPORT_SYMBOL(__copy_user); |
42 | EXPORT_SYMBOL(strncpy_from_user); | 42 | EXPORT_SYMBOL(strncpy_from_user); |
diff --git a/arch/avr32/lib/copy_user.S b/arch/avr32/lib/copy_user.S index ea59c04b07de..96a6de9d578f 100644 --- a/arch/avr32/lib/copy_user.S +++ b/arch/avr32/lib/copy_user.S | |||
@@ -25,11 +25,11 @@ | |||
25 | .align 1 | 25 | .align 1 |
26 | .global copy_from_user | 26 | .global copy_from_user |
27 | .type copy_from_user, @function | 27 | .type copy_from_user, @function |
28 | copy_from_user: | 28 | ___copy_from_user: |
29 | branch_if_kernel r8, __copy_user | 29 | branch_if_kernel r8, __copy_user |
30 | ret_if_privileged r8, r11, r10, r10 | 30 | ret_if_privileged r8, r11, r10, r10 |
31 | rjmp __copy_user | 31 | rjmp __copy_user |
32 | .size copy_from_user, . - copy_from_user | 32 | .size ___copy_from_user, . - ___copy_from_user |
33 | 33 | ||
34 | .global copy_to_user | 34 | .global copy_to_user |
35 | .type copy_to_user, @function | 35 | .type copy_to_user, @function |