Skip to content

Commit 8630c32

Browse files
author
Al Viro
committed
avr32: fix copy_from_user()
really ugly, but apparently avr32 compilers turns access_ok() into something so bad that they want it in assembler. Left that way, zeroing added in inline wrapper. Cc: [email protected] Signed-off-by: Al Viro <[email protected]>
1 parent e98b9e3 commit 8630c32

File tree

3 files changed

+13
-4
lines changed

3 files changed

+13
-4
lines changed

arch/avr32/include/asm/uaccess.h

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ extern __kernel_size_t __copy_user(void *to, const void *from,
7474

7575
extern __kernel_size_t copy_to_user(void __user *to, const void *from,
7676
__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,
7878
__kernel_size_t n);
7979

8080
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,
8888
{
8989
return __copy_user(to, (const void __force *)from, n);
9090
}
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+
}
91100

92101
#define __copy_to_user_inatomic __copy_to_user
93102
#define __copy_from_user_inatomic __copy_from_user

arch/avr32/kernel/avr32_ksyms.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ EXPORT_SYMBOL(copy_page);
3636
/*
3737
* Userspace access stuff.
3838
*/
39-
EXPORT_SYMBOL(copy_from_user);
39+
EXPORT_SYMBOL(___copy_from_user);
4040
EXPORT_SYMBOL(copy_to_user);
4141
EXPORT_SYMBOL(__copy_user);
4242
EXPORT_SYMBOL(strncpy_from_user);

arch/avr32/lib/copy_user.S

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,11 @@
2525
.align 1
2626
.global copy_from_user
2727
.type copy_from_user, @function
28-
copy_from_user:
28+
___copy_from_user:
2929
branch_if_kernel r8, __copy_user
3030
ret_if_privileged r8, r11, r10, r10
3131
rjmp __copy_user
32-
.size copy_from_user, . - copy_from_user
32+
.size ___copy_from_user, . - ___copy_from_user
3333

3434
.global copy_to_user
3535
.type copy_to_user, @function

0 commit comments

Comments
 (0)