mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-25 22:20:55 +07:00
[MIPS] Fixes for uaccess.h with gcc >= 4.0.1
It seems current get_user() incorrectly sign-extend an unsigned int value on 64bit kernel. I think this is because '(__typeof__(val))' cast in final assignment. I suppose the cast should be '(__typeof__(*(addr))'. Signed-off-by: Atsushi Nemoto <anemo@mba.ocn.ne.jp> Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
parent
36ccf1c0e3
commit
8ecbbcaf08
@ -233,7 +233,7 @@ do { \
|
||||
#define __get_user_check(x,ptr,size) \
|
||||
({ \
|
||||
long __gu_err = -EFAULT; \
|
||||
const void __user * __gu_ptr = (ptr); \
|
||||
const __typeof__(*(ptr)) __user * __gu_ptr = (ptr); \
|
||||
\
|
||||
if (likely(access_ok(VERIFY_READ, __gu_ptr, size))) \
|
||||
__get_user_common((x), size, __gu_ptr); \
|
||||
@ -258,7 +258,7 @@ do { \
|
||||
: "=r" (__gu_err), "=r" (__gu_tmp) \
|
||||
: "0" (0), "o" (__m(addr)), "i" (-EFAULT)); \
|
||||
\
|
||||
(val) = (__typeof__(val)) __gu_tmp; \
|
||||
(val) = (__typeof__(*(addr))) __gu_tmp; \
|
||||
}
|
||||
|
||||
/*
|
||||
@ -284,7 +284,7 @@ do { \
|
||||
" .previous \n" \
|
||||
: "=r" (__gu_err), "=&r" (__gu_tmp) \
|
||||
: "0" (0), "r" (addr), "i" (-EFAULT)); \
|
||||
(val) = __gu_tmp; \
|
||||
(val) = (__typeof__(*(addr))) __gu_tmp; \
|
||||
}
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user