• Helge Deller's avatar
    fat: use pointer to simple type in put_user() · 2cd50532
    Helge Deller authored
    The put_user(val,ptr) macro wants a pointer to a simple type, but in
    fat_ioctl_filldir() the d_name field references an "array of chars".  Be
    more accurate and explicitly give the pointer to the first character of
    the d_name[] array.
    
    I noticed that issue while trying to optimize the parisc put_user()
    macro and used an intermediate variable to store the pointer.  In that
    case I got this error:
    
      In file included from include/linux/uaccess.h:11,
                       from include/linux/compat.h:17,
                       from fs/fat/dir.c:18:
      fs/fat/dir.c: In function `fat_ioctl_filldir':
      fs/fat/dir.c:725:33: error: invalid initializer
        725 |                 if (put_user(0, d2->d_name)                     ||         \
            |                                 ^~
      include/asm/uaccess.h:152:33: note: in definition of macro `__put_user'
        152 |         __typeof__(ptr) __ptr = ptr;                            \
            |                                 ^~~
      fs/fat/dir.c:759:1: note: in expansion of macro `FAT_IOCTL_FILLDIR_FUNC'
        759 | FAT_IOCTL_FILLDIR_FUNC(fat_ioctl_filldir, __fat_dirent)
    
    Andreas Schwab <schwab@linux-m68k.org> suggested to use
    
       __typeof__(&*(ptr)) __ptr = ptr;
    
    instead.  This works, but nevertheless it's probably reasonable to fix
    the original caller too.
    
    Link: https://lkml.kernel.org/r/Ygo+A9MREmC1H3kr@p100Signed-off-by: default avatarHelge Deller <deller@gmx.de>
    Acked-by: default avatarOGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
    Cc: David Laight <David.Laight@aculab.com>
    Cc: Andreas Schwab <schwab@linux-m68k.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    2cd50532
dir.c 35 KB