[PATCH] ARM: fix string functions on !MMU
Rabin Vincent
rabin at rab.in
Mon Apr 21 11:10:08 PDT 2014
8c56cc8be5b38e ("ARM: 7449/1: use generic strnlen_user and
strncpy_from_user functions") apparently broken those string operations
for !MMU. USER_DS == KERNEL_DS on !MMU, so user_addr_max() always
restricts the addresses to TASK_SIZE.
TASK_SIZE has anyway no meaning on !MMU, so make user_addr_max() not
restrict anything.
Signed-off-by: Rabin Vincent <rabin at rab.in>
---
arch/arm/include/asm/uaccess.h | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/arch/arm/include/asm/uaccess.h b/arch/arm/include/asm/uaccess.h
index 12c3a5d..c3a65f1 100644
--- a/arch/arm/include/asm/uaccess.h
+++ b/arch/arm/include/asm/uaccess.h
@@ -199,6 +199,9 @@ extern int __put_user_8(void *, unsigned long long);
__put_user_check(x,p); \
})
+#define user_addr_max() \
+ (segment_eq(get_fs(), USER_DS) ? TASK_SIZE : ~0UL)
+
#else /* CONFIG_MMU */
/*
@@ -210,6 +213,7 @@ extern int __put_user_8(void *, unsigned long long);
#define __addr_ok(addr) ((void)(addr),1)
#define __range_ok(addr,size) ((void)(addr),0)
#define get_fs() (KERNEL_DS)
+#define user_addr_max() (~0UL)
static inline void set_fs(mm_segment_t fs)
{
@@ -222,9 +226,6 @@ static inline void set_fs(mm_segment_t fs)
#define access_ok(type,addr,size) (__range_ok(addr,size) == 0)
-#define user_addr_max() \
- (segment_eq(get_fs(), USER_DS) ? TASK_SIZE : ~0UL)
-
/*
* The "__xxx" versions of the user access functions do not verify the
* address space - it must have been done previously with a separate
--
1.9.1
More information about the linux-arm-kernel
mailing list