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

Commit d2c5b690 authored by Russell King's avatar Russell King Committed by Russell King
Browse files

[ARM] Fix get_user when passed a const pointer



Unfortunately, later gcc versions error out when our get_user is passed
a const pointer, since we write to a temporary variable declared as
typeof(*(p)) which propagates the const-ness.

Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent 02b30839
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -120,7 +120,6 @@ EXPORT_SYMBOL(__arch_strncpy_from_user);
EXPORT_SYMBOL(__get_user_1);
EXPORT_SYMBOL(__get_user_2);
EXPORT_SYMBOL(__get_user_4);
EXPORT_SYMBOL(__get_user_8);

EXPORT_SYMBOL(__put_user_1);
EXPORT_SYMBOL(__put_user_2);
+0 −11
Original line number Diff line number Diff line
@@ -54,15 +54,6 @@ __get_user_4:
	mov	r0, #0
	mov	pc, lr

	.global	__get_user_8
__get_user_8:
5:	ldrt	r2, [r0], #4
6:	ldrt	r3, [r0]
	mov	r0, #0
	mov	pc, lr

__get_user_bad_8:
	mov	r3, #0
__get_user_bad:
	mov	r2, #0
	mov	r0, #-EFAULT
@@ -73,6 +64,4 @@ __get_user_bad:
	.long	2b, __get_user_bad
	.long	3b, __get_user_bad
	.long	4b, __get_user_bad
	.long	5b, __get_user_bad_8
	.long	6b, __get_user_bad_8
.previous
+2 −6
Original line number Diff line number Diff line
@@ -100,7 +100,6 @@ static inline void set_fs (mm_segment_t fs)
extern int __get_user_1(void *);
extern int __get_user_2(void *);
extern int __get_user_4(void *);
extern int __get_user_8(void *);
extern int __get_user_bad(void);

#define __get_user_x(__r2,__p,__e,__s,__i...)				\
@@ -114,7 +113,7 @@ extern int __get_user_bad(void);
#define get_user(x,p)							\
	({								\
		const register typeof(*(p)) __user *__p asm("r0") = (p);\
		register typeof(*(p)) __r2 asm("r2");			\
		register unsigned int __r2 asm("r2");			\
		register int __e asm("r0");				\
		switch (sizeof(*(__p))) {				\
		case 1:							\
@@ -126,12 +125,9 @@ extern int __get_user_bad(void);
		case 4:							\
	       		__get_user_x(__r2, __p, __e, 4, "lr");		\
			break;						\
		case 8:							\
			__get_user_x(__r2, __p, __e, 8, "lr");		\
	       		break;						\
		default: __e = __get_user_bad(); break;			\
		}							\
		x = __r2;						\
		x = (typeof(*(p))) __r2;				\
		__e;							\
	})