Messages in this thread | | | Date | Mon, 28 Jul 2008 14:58:16 -0400 | From | Yoshinori Sato <> | Subject | Re: [PATCH] filldir write data missing size |
| |
At Tue, 22 Jul 2008 06:31:12 +0900, OGAWA Hirofumi wrote: > > Yoshinori Sato <ysato@users.sourceforge.jp> writes: > > > This problem is sh-linux-gcc v4.1.2 and target sh2(a)-bigendian. > > > > "__put_user(s64, u32_ptr)" compiled. > > > > Correct code. > > *u32_ptr = s64 & 0xffffffff; > > > > Bad code. > > *u32_ptr = s64 >> 32; > > > > I'm add cast put_user 4byte case. > > I see. How about the following patch? I guess the problems of this type > should be fixed. > > diff -puN include/asm-sh/uaccess_32.h~sh-fix include/asm-sh/uaccess_32.h > --- linux-2.6/include/asm-sh/uaccess_32.h~sh-fix 2008-07-22 06:20:15.000000000 +0900 > +++ linux-2.6-hirofumi/include/asm-sh/uaccess_32.h 2008-07-22 06:25:26.000000000 +0900 > @@ -211,8 +211,9 @@ do { \ > ({ \ > long __pu_err; \ > __typeof__(*(ptr)) __user *__pu_addr = (ptr); \ > + __typeof__(*(ptr)) __pu_val = x; \ > __chk_user_ptr(ptr); \ > - __put_user_size((x), __pu_addr, (size), __pu_err); \ > + __put_user_size(__pu_val, __pu_addr, (size), __pu_err); \ > __pu_err; \ > }) > > @@ -220,8 +221,9 @@ do { \ > ({ \ > long __pu_err = -EFAULT; \ > __typeof__(*(ptr)) __user *__pu_addr = (ptr); \ > + __typeof__(*(ptr)) __pu_val = x; \ > if (likely(access_ok(VERIFY_WRITE, __pu_addr, size))) \ > - __put_user_size((x), __pu_addr, (size), \ > + __put_user_size(__pu_val, __pu_addr, (size), \ > __pu_err); \ > __pu_err; \ > }) > _ > -- > OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
Sorry too late reply.
This fix is good. But I send other workaround fix.
Thanks.
-- Yoshinori Sato <ysato@users.sourceforge.jp>
| |