sparc: Fix user_addr_max() definition.
authorDavid S. Miller <davem@davemloft.net>
Thu, 24 May 2012 20:41:58 +0000 (13:41 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 24 May 2012 20:41:58 +0000 (13:41 -0700)
We need to use TASK_SIZE because for 64-bit tasks the value
of STACK_TOP actually sits in the middle of the address space
so we'll get false-negatives.

Adjust the TASK_SIZE definition on sparc64 to accomodate this,
in the context in which user_addr_max() is used we have the
test_thread_flag() definition available but not the one for
test_tsk_thread_flag().

Signed-off-by: David S. Miller <davem@davemloft.net>
arch/sparc/include/asm/processor_64.h
arch/sparc/include/asm/uaccess.h

index e713db249931fb3895cfcd842176187b8d948f71..6ca7709971d2419c46b327677e137e279f396dd3 100644 (file)
@@ -42,7 +42,9 @@
 #define TASK_SIZE_OF(tsk) \
        (test_tsk_thread_flag(tsk,TIF_32BIT) ? \
         (1UL << 32UL) : ((unsigned long)-VPTE_SIZE))
-#define TASK_SIZE      TASK_SIZE_OF(current)
+#define TASK_SIZE \
+       (test_thread_flag(TIF_32BIT) ? \
+        (1UL << 32UL) : ((unsigned long)-VPTE_SIZE))
 #ifdef __KERNEL__
 
 #define STACK_TOP32    ((1UL << 32UL) - PAGE_SIZE)
index 20c2acb06332f6a9a6f1d188167e2867d5c8b520..0167d26d0d1dacd34cc09430d926d2fbbaaf9ddc 100644 (file)
@@ -7,7 +7,7 @@
 #endif
 
 #define user_addr_max() \
-       (segment_eq(get_fs(), USER_DS) ? STACK_TOP : ~0UL)
+       (segment_eq(get_fs(), USER_DS) ? TASK_SIZE : ~0UL)
 
 extern long strncpy_from_user(char *dest, const char __user *src, long count);