aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/alpha/include/asm/uaccess.h8
-rw-r--r--arch/sh/include/asm/uaccess.h7
2 files changed, 10 insertions, 5 deletions
diff --git a/arch/alpha/include/asm/uaccess.h b/arch/alpha/include/asm/uaccess.h
index e69c4e13c328..cf4ac791a592 100644
--- a/arch/alpha/include/asm/uaccess.h
+++ b/arch/alpha/include/asm/uaccess.h
@@ -30,11 +30,13 @@
30 * Address valid if: 30 * Address valid if:
31 * - "addr" doesn't have any high-bits set 31 * - "addr" doesn't have any high-bits set
32 * - AND "size" doesn't have any high-bits set 32 * - AND "size" doesn't have any high-bits set
33 * - AND "addr+size" doesn't have any high-bits set 33 * - AND "addr+size-(size != 0)" doesn't have any high-bits set
34 * - OR we are in kernel mode. 34 * - OR we are in kernel mode.
35 */ 35 */
36#define __access_ok(addr, size) \ 36#define __access_ok(addr, size) ({ \
37 ((get_fs().seg & (addr | size | (addr+size))) == 0) 37 unsigned long __ao_a = (addr), __ao_b = (size); \
38 unsigned long __ao_end = __ao_a + __ao_b - !!__ao_b; \
39 (get_fs().seg & (__ao_a | __ao_b | __ao_end)) == 0; })
38 40
39#define access_ok(addr, size) \ 41#define access_ok(addr, size) \
40({ \ 42({ \
diff --git a/arch/sh/include/asm/uaccess.h b/arch/sh/include/asm/uaccess.h
index deebbfab5342..5fe751ad7582 100644
--- a/arch/sh/include/asm/uaccess.h
+++ b/arch/sh/include/asm/uaccess.h
@@ -16,8 +16,11 @@
16 * sum := addr + size; carry? --> flag = true; 16 * sum := addr + size; carry? --> flag = true;
17 * if (sum >= addr_limit) flag = true; 17 * if (sum >= addr_limit) flag = true;
18 */ 18 */
19#define __access_ok(addr, size) \ 19#define __access_ok(addr, size) ({ \
20 (__addr_ok((addr) + (size))) 20 unsigned long __ao_a = (addr), __ao_b = (size); \
21 unsigned long __ao_end = __ao_a + __ao_b - !!__ao_b; \
22 __ao_end >= __ao_a && __addr_ok(__ao_end); })
23
21#define access_ok(addr, size) \ 24#define access_ok(addr, size) \
22 (__chk_user_ptr(addr), \ 25 (__chk_user_ptr(addr), \
23 __access_ok((unsigned long __force)(addr), (size))) 26 __access_ok((unsigned long __force)(addr), (size)))