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 |
