mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 03:01:39 -04:00
h8300: fix recent uaccess breakage
Al Viro wrote:
>
> After that commit in asm-h8300/uaccess.h we have
>
> #define get_user(x, ptr) \
> ({ \
> int __gu_err = 0; \
> uint32_t __gu_val = 0; \
> ^^^^^^^^^^^^^^^^^
> switch (sizeof(*(ptr))) { \
> case 1: \
> case 2: \
> case 4: \
> __gu_val = *(ptr); \
> break; \
> case 8: \
> memcpy(&__gu_val, ptr, sizeof (*(ptr))); \
> ^^^^^^^^^^^^^^^^
>
> which, of course, is FUBAR whenever we actually hit that case - memcpy of
> 8 bytes into uint32_t is obviously wrong. Why don't we simply do
Cc: Al Viro <[email protected]>
Signed-off-by: Yoshinori Sato <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
This commit is contained in:
parent
fb39380b8d
commit
12d48739d0
1 changed files with 4 additions and 7 deletions
|
|
@ -91,22 +91,19 @@ extern int __put_user_bad(void);
|
|||
#define get_user(x, ptr) \
|
||||
({ \
|
||||
int __gu_err = 0; \
|
||||
uint32_t __gu_val = 0; \
|
||||
typeof(*(ptr)) __gu_val = *ptr; \
|
||||
switch (sizeof(*(ptr))) { \
|
||||
case 1: \
|
||||
case 2: \
|
||||
case 4: \
|
||||
__gu_val = *(ptr); \
|
||||
break; \
|
||||
case 8: \
|
||||
memcpy(&__gu_val, ptr, sizeof (*(ptr))); \
|
||||
case 8: \
|
||||
break; \
|
||||
default: \
|
||||
__gu_val = 0; \
|
||||
__gu_err = __get_user_bad(); \
|
||||
__gu_val = 0; \
|
||||
break; \
|
||||
} \
|
||||
(x) = (typeof(*(ptr)))__gu_val; \
|
||||
(x) = __gu_val; \
|
||||
__gu_err; \
|
||||
})
|
||||
#define __get_user(x, ptr) get_user(x, ptr)
|
||||
|
|
|
|||
Loading…
Reference in a new issue