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