From: NIIBE Y. <gn...@m1...> - 2002-08-28 16:51:50
|
Another long standing bug. 2002-08-29 NIIBE Yutaka <gn...@m1...> Bug fix. * include/asm-sh/uaccess.h (__get_user_check, __put_user_check): Return -EFAULT if not __access_ok. Index: include/asm-sh/uaccess.h =================================================================== RCS file: /cvsroot/linuxsh/linux/include/asm-sh/uaccess.h,v retrieving revision 1.1.1.1.2.3 diff -u -3 -p -r1.1.1.1.2.3 uaccess.h --- include/asm-sh/uaccess.h 17 Apr 2002 03:58:27 -0000 1.1.1.1.2.3 +++ include/asm-sh/uaccess.h 28 Aug 2002 16:47:10 -0000 @@ -102,12 +102,11 @@ default: __get_user_unknown(); break; \ } x = (__typeof__(*(ptr))) __gu_val; __gu_err; }) #define __get_user_check(x,ptr,size) ({ \ -long __gu_err; \ +long __gu_err = -EFAULT; \ __typeof__(*(ptr)) __gu_val; \ long __gu_addr; \ __asm__("":"=r" (__gu_val)); \ __gu_addr = (long) (ptr); \ -__asm__("":"=r" (__gu_err)); \ if (__access_ok(__gu_addr,size)) { \ switch (size) { \ case 1: __get_user_asm("b"); break; \ @@ -155,12 +154,11 @@ default: __put_user_unknown(); break; \ } __pu_err; }) #define __put_user_check(x,ptr,size) ({ \ -long __pu_err; \ +long __pu_err = -EFAULT; \ __typeof__(*(ptr)) __pu_val; \ long __pu_addr; \ __pu_val = (x); \ __pu_addr = (long) (ptr); \ -__asm__("":"=r" (__pu_err)); \ if (__access_ok(__pu_addr,size)) { \ switch (size) { \ case 1: __put_user_asm("b"); break; \ |