aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/avr32/include/asm/uaccess.h11
-rw-r--r--arch/avr32/kernel/avr32_ksyms.c2
-rw-r--r--arch/avr32/lib/copy_user.S4
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
75extern __kernel_size_t copy_to_user(void __user *to, const void *from, 75extern __kernel_size_t copy_to_user(void __user *to, const void *from,
76 __kernel_size_t n); 76 __kernel_size_t n);
77extern __kernel_size_t copy_from_user(void *to, const void __user *from, 77extern __kernel_size_t ___copy_from_user(void *to, const void __user *from,
78 __kernel_size_t n); 78 __kernel_size_t n);
79 79
80static inline __kernel_size_t __copy_to_user(void __user *to, const void *from, 80static 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}
91static 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 */
39EXPORT_SYMBOL(copy_from_user); 39EXPORT_SYMBOL(___copy_from_user);
40EXPORT_SYMBOL(copy_to_user); 40EXPORT_SYMBOL(copy_to_user);
41EXPORT_SYMBOL(__copy_user); 41EXPORT_SYMBOL(__copy_user);
42EXPORT_SYMBOL(strncpy_from_user); 42EXPORT_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
28copy_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