diff options
-rw-r--r-- | arch/cris/include/asm/uaccess.h | 83 |
1 files changed, 52 insertions, 31 deletions
diff --git a/arch/cris/include/asm/uaccess.h b/arch/cris/include/asm/uaccess.h index a21344ab8616..e3530d0f13ee 100644 --- a/arch/cris/include/asm/uaccess.h +++ b/arch/cris/include/asm/uaccess.h @@ -1,4 +1,4 @@ -/* +/* * Authors: Bjorn Wesen (bjornw@axis.com) * Hans-Peter Nilsson (hp@axis.com) */ @@ -35,7 +35,7 @@ #define MAKE_MM_SEG(s) ((mm_segment_t) { (s) }) /* addr_limit is the maximum accessible address for the task. we misuse - * the KERNEL_DS and USER_DS values to both assign and compare the + * the KERNEL_DS and USER_DS values to both assign and compare the * addr_limit values through the equally misnamed get/set_fs macros. * (see above) */ @@ -51,7 +51,7 @@ #define __kernel_ok (segment_eq(get_fs(), KERNEL_DS)) #define __user_ok(addr, size) \ - (((size) <= TASK_SIZE)&&((addr) <= TASK_SIZE-(size))) + (((size) <= TASK_SIZE) && ((addr) <= TASK_SIZE-(size))) #define __access_ok(addr, size) (__kernel_ok || __user_ok((addr), (size))) #define access_ok(type, addr, size) __access_ok((unsigned long)(addr), (size)) @@ -70,8 +70,7 @@ * on our cache or tlb entries. */ -struct exception_table_entry -{ +struct exception_table_entry { unsigned long insn, fixup; }; @@ -94,14 +93,14 @@ struct exception_table_entry * exception handling means that it's no longer "just"...) */ #define get_user(x, ptr) \ - __get_user_check((x), (ptr), sizeof(*(ptr))) + __get_user_check((x), (ptr), sizeof(*(ptr))) #define put_user(x, ptr) \ - __put_user_check((__typeof__(*(ptr)))(x), (ptr), sizeof(*(ptr))) + __put_user_check((__typeof__(*(ptr)))(x), (ptr), sizeof(*(ptr))) #define __get_user(x, ptr) \ - __get_user_nocheck((x), (ptr), sizeof(*(ptr))) + __get_user_nocheck((x), (ptr), sizeof(*(ptr))) #define __put_user(x, ptr) \ - __put_user_nocheck((__typeof__(*(ptr)))(x), (ptr), sizeof(*(ptr))) + __put_user_nocheck((__typeof__(*(ptr)))(x), (ptr), sizeof(*(ptr))) extern long __put_user_bad(void); @@ -109,11 +108,20 @@ extern long __put_user_bad(void); do { \ retval = 0; \ switch (size) { \ - case 1: __put_user_asm(x, ptr, retval, "move.b"); break; \ - case 2: __put_user_asm(x, ptr, retval, "move.w"); break; \ - case 4: __put_user_asm(x, ptr, retval, "move.d"); break; \ - case 8: __put_user_asm_64(x, ptr, retval); break; \ - default: __put_user_bad(); \ + case 1: \ + __put_user_asm(x, ptr, retval, "move.b"); \ + break; \ + case 2: \ + __put_user_asm(x, ptr, retval, "move.w"); \ + break; \ + case 4: \ + __put_user_asm(x, ptr, retval, "move.d"); \ + break; \ + case 8: \ + __put_user_asm_64(x, ptr, retval); \ + break; \ + default: \ + __put_user_bad(); \ } \ } while (0) @@ -121,11 +129,20 @@ do { \ do { \ retval = 0; \ switch (size) { \ - case 1: __get_user_asm(x, ptr, retval, "move.b"); break; \ - case 2: __get_user_asm(x, ptr, retval, "move.w"); break; \ - case 4: __get_user_asm(x, ptr, retval, "move.d"); break; \ - case 8: __get_user_asm_64(x, ptr, retval); break; \ - default: (x) = __get_user_bad(); \ + case 1: \ + __get_user_asm(x, ptr, retval, "move.b"); \ + break; \ + case 2: \ + __get_user_asm(x, ptr, retval, "move.w"); \ + break; \ + case 4: \ + __get_user_asm(x, ptr, retval, "move.d"); \ + break; \ + case 8: \ + __get_user_asm_64(x, ptr, retval); \ + break; \ + default: \ + (x) = __get_user_bad(); \ } \ } while (0) @@ -211,6 +228,7 @@ static inline long strncpy_from_user(char *dst, const char __user *src, long count) { long res = -EFAULT; + if (access_ok(VERIFY_READ, src, 1)) res = __do_strncpy_from_user(dst, src, count); return res; @@ -224,6 +242,7 @@ static inline unsigned long __constant_copy_from_user(void *to, const void __user *from, unsigned long n) { unsigned long ret = 0; + if (n == 0) ; else if (n == 1) @@ -274,6 +293,7 @@ static inline unsigned long __constant_copy_to_user(void __user *to, const void *from, unsigned long n) { unsigned long ret = 0; + if (n == 0) ; else if (n == 1) @@ -324,6 +344,7 @@ static inline unsigned long __constant_clear_user(void __user *to, unsigned long n) { unsigned long ret = 0; + if (n == 0) ; else if (n == 1) @@ -351,20 +372,20 @@ __constant_clear_user(void __user *to, unsigned long n) } -#define clear_user(to, n) \ -(__builtin_constant_p(n) ? \ - __constant_clear_user(to, n) : \ - __generic_clear_user(to, n)) +#define clear_user(to, n) \ + (__builtin_constant_p(n) ? \ + __constant_clear_user(to, n) : \ + __generic_clear_user(to, n)) -#define copy_from_user(to, from, n) \ -(__builtin_constant_p(n) ? \ - __constant_copy_from_user(to, from, n) : \ - __generic_copy_from_user(to, from, n)) +#define copy_from_user(to, from, n) \ + (__builtin_constant_p(n) ? \ + __constant_copy_from_user(to, from, n) : \ + __generic_copy_from_user(to, from, n)) -#define copy_to_user(to, from, n) \ -(__builtin_constant_p(n) ? \ - __constant_copy_to_user(to, from, n) : \ - __generic_copy_to_user(to, from, n)) +#define copy_to_user(to, from, n) \ + (__builtin_constant_p(n) ? \ + __constant_copy_to_user(to, from, n) : \ + __generic_copy_to_user(to, from, n)) /* We let the __ versions of copy_from/to_user inline, because they're often * used in fast paths and have only a small space overhead. |