Messages in this thread | | | From | Arnd Bergmann <> | Date | Wed, 28 Apr 2021 11:25:29 +0200 | Subject | Re: [PATCH] csky: uaccess.h: Coding convention with asm generic |
| |
On Wed, Apr 28, 2021 at 10:30 AM Guo Ren <guoren@kernel.org> wrote: > On Wed, Apr 28, 2021 at 11:18 AM Guenter Roeck <linux@roeck-us.net> wrote: > > > > On Wed, Apr 21, 2021 at 08:54:15AM +0000, guoren@kernel.org wrote: > > > From: Guo Ren <guoren@linux.alibaba.com> > > > > > > Using asm-generic/uaccess.h to prevent duplicated code: > > > - Add user_addr_max which mentioned in generic uaccess.h > > > - Remove custom definitions of KERNEL/USER_DS, get/set_fs, > > > uaccess_kerenl > > > - Using generic extable.h instead of custom definitions in > > > uaccess.h > > > > > > Signed-off-by: Guo Ren <guoren@linux.alibaba.com> > > > Cc: Arnd Bergmann <arnd@arndb.de> > > > > Building csky:tinyconfig ... failed > > -------------- > > Error log: > > csky-linux-ld: fs/readdir.o: in function `__put_user_fn': > > readdir.c:(.text+0x7c): undefined reference to `__put_user_bad' > > csky-linux-ld: fs/readdir.o: in function `$d': > > readdir.c:(.text+0x1bc): undefined reference to `__put_user_bad' > > make[1]: *** [Makefile:1277: vmlinux] Error 1 > > make: *** [Makefile:222: __sub-make] Error 2 > It's a bug, I can't put __put_user_bad in __put_user_fn, and > __put_user has done that: > > /* > * These are the main single-value transfer routines. They automatically > * use the right size if we just have the right pointer type. > * This version just falls back to copy_{from,to}_user, which should > * provide a fast-path for small values. > */ > #define __put_user(x, ptr) \ > ({ \ > __typeof__(*(ptr)) __x = (x); \ > int __pu_err = -EFAULT; \ > __chk_user_ptr(ptr); \ > switch (sizeof (*(ptr))) { \ > case 1: \ > case 2: \ > case 4: \ > case 8: \ > __pu_err = __put_user_fn(sizeof (*(ptr)), \ > ptr, &__x); \ > break; \ > default: \ > __put_user_bad(); \ > break; \ > } \ > __pu_err; \ > })
Actually, please don't use the asm-generic __put_user version based on copy_to_user, we probably have killed it off long ago.
We might want to come up with a new version of asm-generic/uaccess.h that actually makes it easier to have a sane per-architecture implementation of the low-level accessors without set_fs().
I've added Christoph to Cc here, he probably has some ideas on where we should be heading.
One noteworthy aspect is that almost nothing users the low-level __get_user()/__put_user() helpers any more outside of architecture specific code, so we may not need to have separate versions for much longer.
Arnd
| |