Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8ecbbcaf authored by Atsushi Nemoto's avatar Atsushi Nemoto Committed by Ralf Baechle
Browse files

[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: default avatarAtsushi Nemoto <anemo@mba.ocn.ne.jp>
Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent 36ccf1c0
Loading
Loading
Loading
Loading
+3 −3
Original line number Original line Diff line number Diff line
@@ -233,7 +233,7 @@ do { \
#define __get_user_check(x,ptr,size)					\
#define __get_user_check(x,ptr,size)					\
({									\
({									\
	long __gu_err = -EFAULT;					\
	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)))		\
	if (likely(access_ok(VERIFY_READ,  __gu_ptr, size)))		\
		__get_user_common((x), size, __gu_ptr);			\
		__get_user_common((x), size, __gu_ptr);			\
@@ -258,7 +258,7 @@ do { \
	: "=r" (__gu_err), "=r" (__gu_tmp)				\
	: "=r" (__gu_err), "=r" (__gu_tmp)				\
	: "0" (0), "o" (__m(addr)), "i" (-EFAULT));			\
	: "0" (0), "o" (__m(addr)), "i" (-EFAULT));			\
									\
									\
	(val) = (__typeof__(val)) __gu_tmp;				\
	(val) = (__typeof__(*(addr))) __gu_tmp;				\
}
}


/*
/*
@@ -284,7 +284,7 @@ do { \
	"	.previous					\n"	\
	"	.previous					\n"	\
	: "=r" (__gu_err), "=&r" (__gu_tmp)				\
	: "=r" (__gu_err), "=&r" (__gu_tmp)				\
	: "0" (0), "r" (addr), "i" (-EFAULT));				\
	: "0" (0), "r" (addr), "i" (-EFAULT));				\
	(val) = __gu_tmp;						\
	(val) = (__typeof__(*(addr))) __gu_tmp;				\
}
}


/*
/*