aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2012-05-24 16:41:58 -0400
committerDavid S. Miller <davem@davemloft.net>2012-05-24 16:41:58 -0400
commitc5389831cda3b38a56606a348a537a1332f2d729 (patch)
tree1df9f89d287af436be4bd405e50dd3c1d48d354e
parent2922585b93294d47172a765115e0dbc1bfe1be19 (diff)
sparc: Fix user_addr_max() definition.
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>
-rw-r--r--arch/sparc/include/asm/processor_64.h4
-rw-r--r--arch/sparc/include/asm/uaccess.h2
2 files changed, 4 insertions, 2 deletions
diff --git a/arch/sparc/include/asm/processor_64.h b/arch/sparc/include/asm/processor_64.h
index e713db249931..6ca7709971d2 100644
--- a/arch/sparc/include/asm/processor_64.h
+++ b/arch/sparc/include/asm/processor_64.h
@@ -42,7 +42,9 @@
42#define TASK_SIZE_OF(tsk) \ 42#define TASK_SIZE_OF(tsk) \
43 (test_tsk_thread_flag(tsk,TIF_32BIT) ? \ 43 (test_tsk_thread_flag(tsk,TIF_32BIT) ? \
44 (1UL << 32UL) : ((unsigned long)-VPTE_SIZE)) 44 (1UL << 32UL) : ((unsigned long)-VPTE_SIZE))
45#define TASK_SIZE TASK_SIZE_OF(current) 45#define TASK_SIZE \
46 (test_thread_flag(TIF_32BIT) ? \
47 (1UL << 32UL) : ((unsigned long)-VPTE_SIZE))
46#ifdef __KERNEL__ 48#ifdef __KERNEL__
47 49
48#define STACK_TOP32 ((1UL << 32UL) - PAGE_SIZE) 50#define STACK_TOP32 ((1UL << 32UL) - PAGE_SIZE)
diff --git a/arch/sparc/include/asm/uaccess.h b/arch/sparc/include/asm/uaccess.h
index 20c2acb06332..0167d26d0d1d 100644
--- a/arch/sparc/include/asm/uaccess.h
+++ b/arch/sparc/include/asm/uaccess.h
@@ -7,7 +7,7 @@
7#endif 7#endif
8 8
9#define user_addr_max() \ 9#define user_addr_max() \
10 (segment_eq(get_fs(), USER_DS) ? STACK_TOP : ~0UL) 10 (segment_eq(get_fs(), USER_DS) ? TASK_SIZE : ~0UL)
11 11
12extern long strncpy_from_user(char *dest, const char __user *src, long count); 12extern long strncpy_from_user(char *dest, const char __user *src, long count);
13 13