Skip to content

Commit

Permalink
avr32: fix copy_from_user()
Browse files Browse the repository at this point in the history
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]>
  • Loading branch information
Al Viro committed Sep 13, 2016
1 parent e98b9e3 commit 8630c32
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 4 deletions.
11 changes: 10 additions & 1 deletion arch/avr32/include/asm/uaccess.h
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ extern __kernel_size_t __copy_user(void *to, const void *from,

extern __kernel_size_t copy_to_user(void __user *to, const void *from,
__kernel_size_t n);
extern __kernel_size_t copy_from_user(void *to, const void __user *from,
extern __kernel_size_t ___copy_from_user(void *to, const void __user *from,
__kernel_size_t n);

static inline __kernel_size_t __copy_to_user(void __user *to, const void *from,
Expand All @@ -88,6 +88,15 @@ static inline __kernel_size_t __copy_from_user(void *to,
{
return __copy_user(to, (const void __force *)from, n);
}
static inline __kernel_size_t copy_from_user(void *to,
const void __user *from,
__kernel_size_t n)
{
size_t res = ___copy_from_user(to, from, n);
if (unlikely(res))
memset(to + (n - res), 0, res);
return res;
}

#define __copy_to_user_inatomic __copy_to_user
#define __copy_from_user_inatomic __copy_from_user
Expand Down
2 changes: 1 addition & 1 deletion arch/avr32/kernel/avr32_ksyms.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ EXPORT_SYMBOL(copy_page);
/*
* Userspace access stuff.
*/
EXPORT_SYMBOL(copy_from_user);
EXPORT_SYMBOL(___copy_from_user);
EXPORT_SYMBOL(copy_to_user);
EXPORT_SYMBOL(__copy_user);
EXPORT_SYMBOL(strncpy_from_user);
Expand Down
4 changes: 2 additions & 2 deletions arch/avr32/lib/copy_user.S
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,11 @@
.align 1
.global copy_from_user
.type copy_from_user, @function
copy_from_user:
___copy_from_user:
branch_if_kernel r8, __copy_user
ret_if_privileged r8, r11, r10, r10
rjmp __copy_user
.size copy_from_user, . - copy_from_user
.size ___copy_from_user, . - ___copy_from_user

.global copy_to_user
.type copy_to_user, @function
Expand Down

0 comments on commit 8630c32

Please sign in to comment.