[adding back linux-arm-kernel; what happened to it? ] On 5/17/21 2:04 PM, Randy Dunlap wrote: > On 5/17/21 10:13 AM, Steve French wrote: >>> If you fix the issue, kindly add following tag as appropriate >>> Reported-by: kernel test robot <lkp@xxxxxxxxx> >>> >>> All errors (new ones prefixed by >>): >>> >>> arm-linux-gnueabi-ld: fs/cifs/ioctl.o: in function `cifs_dump_full_key': >>>>> ioctl.c:(.text+0x44): undefined reference to `__get_user_bad' >>> >> >> <snip> >> >>> # CONFIG_MMU is not set >>> >>> and arch/arm/include/asm/uaccess.h does not implement get_user(size 8 bytes) >>> for the non-MMU case: >> >> I see another place in fs/cifs/ioctl.c where we already had been doing >> a get_user() into a u64 - any idea what you are supposed to do >> instead? Any example code where people have worked around this. > > Hi Steve, > > This change in cifs_dump_full_key() makes it build OK: > > - if (get_user(suid, (__u64 __user *)arg)) > + if (get_user(suid, (unsigned int __user *)arg)) > > > That is what the other call uses: > > case FS_IOC_SETFLAGS: > cifs_dbg(VFS, "cifs ioctl FS_IOC_SETFLAGS:\n"); > if (pSMBFile == NULL) > break; > tcon = tlink_tcon(pSMBFile->tlink); > caps = le64_to_cpu(tcon->fsUnixInfo.Capability); > > if (get_user(ExtAttrBits, (int __user *)arg)) { > rc = -EFAULT; > break; > } > > However, my reading/understanding is that the one immediately above > is incorrect, as is the -/+ patch above it, since get_user() gets its > data size (1, 2, 4, 8) from the type of the pointer that is passed to it. > For 8 bytes (64 bits), 'int' is not sufficient, so IMO the get_user() > call that builds: > if (get_user(ExtAttrBits, (int __user *)arg)) { > is a bug. It should be: > if (get_user(ExtAttrBits, (__u64 __user *)arg)) { > and if I make that latter change in the source file, the build says: > > arm-linux-gnueabi-ld: fs/cifs/ioctl.o: in function `cifs_dump_full_key': > ioctl.c:(.text+0x14): undefined reference to `__get_user_bad' > arm-linux-gnueabi-ld: fs/cifs/ioctl.o: in function `cifs_ioctl': > ioctl.c:(.text+0x1f2): undefined reference to `__get_user_bad' > > so now both of them fail on the get_user() of 8 bytes. > > Hope that clarifies things. It tells me that arm no-MMU still > needs support for get_user() of size 8 bytes. > -- ~Randy