Hi Luc, I love your patch! Perhaps something to improve: [auto build test WARNING on 9123e3a74ec7b934a4a099e98af6a61c2f80bbf5] url: https://github.com/0day-ci/linux/commits/Luc-Van-Oostenryck/sparse-use-static-inline-for-__chk_-user-io-_ptr/20200828-165431 base: 9123e3a74ec7b934a4a099e98af6a61c2f80bbf5 config: sh-randconfig-s031-20200902 (attached as .config) compiler: sh4-linux-gcc (GCC) 9.3.0 reproduce: wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # apt-get install sparse # sparse version: v0.6.2-191-g10164920-dirty # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=sh If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot sparse warnings: (new ones prefixed by >>) drivers/mtd/ubi/cdev.c:467:23: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected signed int const *__gu_addr @@ got signed int [noderef] [usertype] __user * @@ drivers/mtd/ubi/cdev.c:467:23: sparse: expected signed int const *__gu_addr drivers/mtd/ubi/cdev.c:467:23: sparse: got signed int [noderef] [usertype] __user * >> drivers/mtd/ubi/cdev.c:467:23: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __user *ptr @@ got signed int const *__gu_addr @@ >> drivers/mtd/ubi/cdev.c:467:23: sparse: expected void const volatile [noderef] __user *ptr drivers/mtd/ubi/cdev.c:467:23: sparse: got signed int const *__gu_addr drivers/mtd/ubi/cdev.c:512:23: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected signed int const *__gu_addr @@ got signed int [noderef] [usertype] __user * @@ drivers/mtd/ubi/cdev.c:512:23: sparse: expected signed int const *__gu_addr drivers/mtd/ubi/cdev.c:512:23: sparse: got signed int [noderef] [usertype] __user * drivers/mtd/ubi/cdev.c:512:23: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __user *ptr @@ got signed int const *__gu_addr @@ drivers/mtd/ubi/cdev.c:512:23: sparse: expected void const volatile [noderef] __user *ptr drivers/mtd/ubi/cdev.c:512:23: sparse: got signed int const *__gu_addr drivers/mtd/ubi/cdev.c:526:23: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected signed int const *__gu_addr @@ got signed int [noderef] [usertype] __user * @@ drivers/mtd/ubi/cdev.c:526:23: sparse: expected signed int const *__gu_addr drivers/mtd/ubi/cdev.c:526:23: sparse: got signed int [noderef] [usertype] __user * drivers/mtd/ubi/cdev.c:526:23: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __user *ptr @@ got signed int const *__gu_addr @@ drivers/mtd/ubi/cdev.c:526:23: sparse: expected void const volatile [noderef] __user *ptr drivers/mtd/ubi/cdev.c:526:23: sparse: got signed int const *__gu_addr drivers/mtd/ubi/cdev.c:882:23: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected signed int const *__gu_addr @@ got signed int [noderef] [usertype] __user * @@ drivers/mtd/ubi/cdev.c:882:23: sparse: expected signed int const *__gu_addr drivers/mtd/ubi/cdev.c:882:23: sparse: got signed int [noderef] [usertype] __user * drivers/mtd/ubi/cdev.c:882:23: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __user *ptr @@ got signed int const *__gu_addr @@ drivers/mtd/ubi/cdev.c:882:23: sparse: expected void const volatile [noderef] __user *ptr drivers/mtd/ubi/cdev.c:882:23: sparse: got signed int const *__gu_addr drivers/mtd/ubi/cdev.c:969:23: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected signed int const *__gu_addr @@ got signed int [noderef] [usertype] __user * @@ drivers/mtd/ubi/cdev.c:969:23: sparse: expected signed int const *__gu_addr drivers/mtd/ubi/cdev.c:969:23: sparse: got signed int [noderef] [usertype] __user * drivers/mtd/ubi/cdev.c:969:23: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __user *ptr @@ got signed int const *__gu_addr @@ drivers/mtd/ubi/cdev.c:969:23: sparse: expected void const volatile [noderef] __user *ptr drivers/mtd/ubi/cdev.c:969:23: sparse: got signed int const *__gu_addr drivers/mtd/ubi/cdev.c:984:23: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected signed int const *__gu_addr @@ got signed int [noderef] [usertype] __user * @@ drivers/mtd/ubi/cdev.c:984:23: sparse: expected signed int const *__gu_addr drivers/mtd/ubi/cdev.c:984:23: sparse: got signed int [noderef] [usertype] __user * drivers/mtd/ubi/cdev.c:984:23: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __user *ptr @@ got signed int const *__gu_addr @@ drivers/mtd/ubi/cdev.c:984:23: sparse: expected void const volatile [noderef] __user *ptr drivers/mtd/ubi/cdev.c:984:23: sparse: got signed int const *__gu_addr drivers/mtd/ubi/cdev.c:1061:23: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected signed int const *__gu_addr @@ got signed int [noderef] [usertype] __user * @@ drivers/mtd/ubi/cdev.c:1061:23: sparse: expected signed int const *__gu_addr drivers/mtd/ubi/cdev.c:1061:23: sparse: got signed int [noderef] [usertype] __user * drivers/mtd/ubi/cdev.c:1061:23: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __user *ptr @@ got signed int const *__gu_addr @@ drivers/mtd/ubi/cdev.c:1061:23: sparse: expected void const volatile [noderef] __user *ptr drivers/mtd/ubi/cdev.c:1061:23: sparse: got signed int const *__gu_addr -- drivers/auxdisplay/charlcd.c:670:21: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected char const *__gu_addr @@ got char const [noderef] __user *tmp @@ drivers/auxdisplay/charlcd.c:670:21: sparse: expected char const *__gu_addr drivers/auxdisplay/charlcd.c:670:21: sparse: got char const [noderef] __user *tmp >> drivers/auxdisplay/charlcd.c:670:21: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __user *ptr @@ got char const *__gu_addr @@ >> drivers/auxdisplay/charlcd.c:670:21: sparse: expected void const volatile [noderef] __user *ptr drivers/auxdisplay/charlcd.c:670:21: sparse: got char const *__gu_addr -- fs/fuse/dev.c:2231:22: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected unsigned int const *__gu_addr @@ got unsigned int [noderef] [usertype] __user * @@ fs/fuse/dev.c:2231:22: sparse: expected unsigned int const *__gu_addr fs/fuse/dev.c:2231:22: sparse: got unsigned int [noderef] [usertype] __user * >> fs/fuse/dev.c:2231:22: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __user *ptr @@ got unsigned int const *__gu_addr @@ >> fs/fuse/dev.c:2231:22: sparse: expected void const volatile [noderef] __user *ptr fs/fuse/dev.c:2231:22: sparse: got unsigned int const *__gu_addr -- drivers/hwmon/w83793.c:1372:37: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected char const *__gu_addr @@ got char const [noderef] __user * @@ drivers/hwmon/w83793.c:1372:37: sparse: expected char const *__gu_addr drivers/hwmon/w83793.c:1372:37: sparse: got char const [noderef] __user * >> drivers/hwmon/w83793.c:1372:37: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __user *ptr @@ got char const *__gu_addr @@ >> drivers/hwmon/w83793.c:1372:37: sparse: expected void const volatile [noderef] __user *ptr drivers/hwmon/w83793.c:1372:37: sparse: got char const *__gu_addr drivers/hwmon/w83793.c:1425:21: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected int const *__gu_addr @@ got int [noderef] __user * @@ drivers/hwmon/w83793.c:1425:21: sparse: expected int const *__gu_addr drivers/hwmon/w83793.c:1425:21: sparse: got int [noderef] __user * >> drivers/hwmon/w83793.c:1425:21: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __user *ptr @@ got int const *__gu_addr @@ drivers/hwmon/w83793.c:1425:21: sparse: expected void const volatile [noderef] __user *ptr drivers/hwmon/w83793.c:1425:21: sparse: got int const *__gu_addr drivers/hwmon/w83793.c:1435:21: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected int const *__gu_addr @@ got int [noderef] __user * @@ drivers/hwmon/w83793.c:1435:21: sparse: expected int const *__gu_addr drivers/hwmon/w83793.c:1435:21: sparse: got int [noderef] __user * drivers/hwmon/w83793.c:1435:21: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __user *ptr @@ got int const *__gu_addr @@ drivers/hwmon/w83793.c:1435:21: sparse: expected void const volatile [noderef] __user *ptr drivers/hwmon/w83793.c:1435:21: sparse: got int const *__gu_addr -- fs/orangefs/file.c:118:32: sparse: sparse: incorrect type in assignment (different base types) @@ expected int open_for_write @@ got restricted fmode_t @@ fs/orangefs/file.c:118:32: sparse: expected int open_for_write fs/orangefs/file.c:118:32: sparse: got restricted fmode_t fs/orangefs/file.c:119:31: sparse: sparse: incorrect type in assignment (different base types) @@ expected int open_for_read @@ got restricted fmode_t @@ fs/orangefs/file.c:119:31: sparse: expected int open_for_read fs/orangefs/file.c:119:31: sparse: got restricted fmode_t fs/orangefs/file.c:424:21: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected int const *__gu_addr @@ got int [noderef] __user * @@ fs/orangefs/file.c:424:21: sparse: expected int const *__gu_addr fs/orangefs/file.c:424:21: sparse: got int [noderef] __user * >> fs/orangefs/file.c:424:21: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __user *ptr @@ got int const *__gu_addr @@ >> fs/orangefs/file.c:424:21: sparse: expected void const volatile [noderef] __user *ptr fs/orangefs/file.c:424:21: sparse: got int const *__gu_addr -- drivers/vhost/vdpa.c:361:13: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected unsigned int const *__gu_addr @@ got unsigned int [noderef] [usertype] __user * @@ drivers/vhost/vdpa.c:361:13: sparse: expected unsigned int const *__gu_addr drivers/vhost/vdpa.c:361:13: sparse: got unsigned int [noderef] [usertype] __user * >> drivers/vhost/vdpa.c:361:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __user *ptr @@ got unsigned int const *__gu_addr @@ >> drivers/vhost/vdpa.c:361:13: sparse: expected void const volatile [noderef] __user *ptr drivers/vhost/vdpa.c:361:13: sparse: got unsigned int const *__gu_addr -- drivers/vhost/scsi.c:1697:21: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected unsigned int const *__gu_addr @@ got unsigned int [noderef] [usertype] __user *eventsp @@ drivers/vhost/scsi.c:1697:21: sparse: expected unsigned int const *__gu_addr drivers/vhost/scsi.c:1697:21: sparse: got unsigned int [noderef] [usertype] __user *eventsp >> drivers/vhost/scsi.c:1697:21: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __user *ptr @@ got unsigned int const *__gu_addr @@ >> drivers/vhost/scsi.c:1697:21: sparse: expected void const volatile [noderef] __user *ptr drivers/vhost/scsi.c:1697:21: sparse: got unsigned int const *__gu_addr -- kernel/bpf/cgroup.c:1439:21: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected int const *__gu_addr @@ got int [noderef] __user *optlen @@ kernel/bpf/cgroup.c:1439:21: sparse: expected int const *__gu_addr kernel/bpf/cgroup.c:1439:21: sparse: got int [noderef] __user *optlen >> kernel/bpf/cgroup.c:1439:21: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __user *ptr @@ got int const *__gu_addr @@ >> kernel/bpf/cgroup.c:1439:21: sparse: expected void const volatile [noderef] __user *ptr kernel/bpf/cgroup.c:1439:21: sparse: got int const *__gu_addr -- fs/verity/measure.c:42:13: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected unsigned short const *__gu_addr @@ got unsigned short [noderef] __user * @@ fs/verity/measure.c:42:13: sparse: expected unsigned short const *__gu_addr fs/verity/measure.c:42:13: sparse: got unsigned short [noderef] __user * >> fs/verity/measure.c:42:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __user *ptr @@ got unsigned short const *__gu_addr @@ >> fs/verity/measure.c:42:13: sparse: expected void const volatile [noderef] __user *ptr fs/verity/measure.c:42:13: sparse: got unsigned short const *__gu_addr -- fs/hfsplus/ioctl.c:42:50: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int @@ got restricted __be32 [usertype] @@ fs/hfsplus/ioctl.c:42:50: sparse: expected unsigned int fs/hfsplus/ioctl.c:42:50: sparse: got restricted __be32 [usertype] fs/hfsplus/ioctl.c:50:50: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int @@ got restricted __be32 [usertype] @@ fs/hfsplus/ioctl.c:50:50: sparse: expected unsigned int fs/hfsplus/ioctl.c:50:50: sparse: got restricted __be32 [usertype] fs/hfsplus/ioctl.c:53:50: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int @@ got restricted __be32 [usertype] @@ fs/hfsplus/ioctl.c:53:50: sparse: expected unsigned int fs/hfsplus/ioctl.c:53:50: sparse: got restricted __be32 [usertype] fs/hfsplus/ioctl.c:99:13: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected int const *__gu_addr @@ got int [noderef] __user *user_flags @@ fs/hfsplus/ioctl.c:99:13: sparse: expected int const *__gu_addr fs/hfsplus/ioctl.c:99:13: sparse: got int [noderef] __user *user_flags >> fs/hfsplus/ioctl.c:99:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __user *ptr @@ got int const *__gu_addr @@ >> fs/hfsplus/ioctl.c:99:13: sparse: expected void const volatile [noderef] __user *ptr fs/hfsplus/ioctl.c:99:13: sparse: got int const *__gu_addr -- sound/core/seq/oss/seq_oss_timer.c:224:21: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected int const *__gu_addr @@ got int [noderef] __user *arg @@ sound/core/seq/oss/seq_oss_timer.c:224:21: sparse: expected int const *__gu_addr sound/core/seq/oss/seq_oss_timer.c:224:21: sparse: got int [noderef] __user *arg >> sound/core/seq/oss/seq_oss_timer.c:224:21: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __user *ptr @@ got int const *__gu_addr @@ >> sound/core/seq/oss/seq_oss_timer.c:224:21: sparse: expected void const volatile [noderef] __user *ptr sound/core/seq/oss/seq_oss_timer.c:224:21: sparse: got int const *__gu_addr sound/core/seq/oss/seq_oss_timer.c:243:21: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected int const *__gu_addr @@ got int [noderef] __user *arg @@ sound/core/seq/oss/seq_oss_timer.c:243:21: sparse: expected int const *__gu_addr sound/core/seq/oss/seq_oss_timer.c:243:21: sparse: got int [noderef] __user *arg sound/core/seq/oss/seq_oss_timer.c:243:21: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __user *ptr @@ got int const *__gu_addr @@ sound/core/seq/oss/seq_oss_timer.c:243:21: sparse: expected void const volatile [noderef] __user *ptr sound/core/seq/oss/seq_oss_timer.c:243:21: sparse: got int const *__gu_addr sound/core/seq/oss/seq_oss_timer.c:247:21: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected int const *__gu_addr @@ got int [noderef] __user *arg @@ sound/core/seq/oss/seq_oss_timer.c:247:21: sparse: expected int const *__gu_addr sound/core/seq/oss/seq_oss_timer.c:247:21: sparse: got int [noderef] __user *arg sound/core/seq/oss/seq_oss_timer.c:247:21: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __user *ptr @@ got int const *__gu_addr @@ sound/core/seq/oss/seq_oss_timer.c:247:21: sparse: expected void const volatile [noderef] __user *ptr sound/core/seq/oss/seq_oss_timer.c:247:21: sparse: got int const *__gu_addr -- sound/core/seq/oss/seq_oss_ioctl.c:97:21: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected int const *__gu_addr @@ got int [noderef] __user *p @@ sound/core/seq/oss/seq_oss_ioctl.c:97:21: sparse: expected int const *__gu_addr sound/core/seq/oss/seq_oss_ioctl.c:97:21: sparse: got int [noderef] __user *p >> sound/core/seq/oss/seq_oss_ioctl.c:97:21: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __user *ptr @@ got int const *__gu_addr @@ >> sound/core/seq/oss/seq_oss_ioctl.c:97:21: sparse: expected void const volatile [noderef] __user *ptr sound/core/seq/oss/seq_oss_ioctl.c:97:21: sparse: got int const *__gu_addr sound/core/seq/oss/seq_oss_ioctl.c:115:21: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected int const *__gu_addr @@ got int [noderef] __user *p @@ sound/core/seq/oss/seq_oss_ioctl.c:115:21: sparse: expected int const *__gu_addr sound/core/seq/oss/seq_oss_ioctl.c:115:21: sparse: got int [noderef] __user *p sound/core/seq/oss/seq_oss_ioctl.c:115:21: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __user *ptr @@ got int const *__gu_addr @@ sound/core/seq/oss/seq_oss_ioctl.c:115:21: sparse: expected void const volatile [noderef] __user *ptr sound/core/seq/oss/seq_oss_ioctl.c:115:21: sparse: got int const *__gu_addr sound/core/seq/oss/seq_oss_ioctl.c:126:21: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected int const *__gu_addr @@ got int [noderef] __user *p @@ sound/core/seq/oss/seq_oss_ioctl.c:126:21: sparse: expected int const *__gu_addr sound/core/seq/oss/seq_oss_ioctl.c:126:21: sparse: got int [noderef] __user *p sound/core/seq/oss/seq_oss_ioctl.c:126:21: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __user *ptr @@ got int const *__gu_addr @@ sound/core/seq/oss/seq_oss_ioctl.c:126:21: sparse: expected void const volatile [noderef] __user *ptr sound/core/seq/oss/seq_oss_ioctl.c:126:21: sparse: got int const *__gu_addr sound/core/seq/oss/seq_oss_ioctl.c:132:21: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected int const *__gu_addr @@ got int [noderef] __user *p @@ sound/core/seq/oss/seq_oss_ioctl.c:132:21: sparse: expected int const *__gu_addr sound/core/seq/oss/seq_oss_ioctl.c:132:21: sparse: got int [noderef] __user *p sound/core/seq/oss/seq_oss_ioctl.c:132:21: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __user *ptr @@ got int const *__gu_addr @@ sound/core/seq/oss/seq_oss_ioctl.c:132:21: sparse: expected void const volatile [noderef] __user *ptr sound/core/seq/oss/seq_oss_ioctl.c:132:21: sparse: got int const *__gu_addr sound/core/seq/oss/seq_oss_ioctl.c:150:21: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected int const *__gu_addr @@ got int [noderef] __user *p @@ sound/core/seq/oss/seq_oss_ioctl.c:150:21: sparse: expected int const *__gu_addr sound/core/seq/oss/seq_oss_ioctl.c:150:21: sparse: got int [noderef] __user *p sound/core/seq/oss/seq_oss_ioctl.c:150:21: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __user *ptr @@ got int const *__gu_addr @@ sound/core/seq/oss/seq_oss_ioctl.c:150:21: sparse: expected void const volatile [noderef] __user *ptr sound/core/seq/oss/seq_oss_ioctl.c:150:21: sparse: got int const *__gu_addr sound/core/seq/oss/seq_oss_ioctl.c:162:21: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected int const *__gu_addr @@ got int [noderef] __user *p @@ sound/core/seq/oss/seq_oss_ioctl.c:162:21: sparse: expected int const *__gu_addr sound/core/seq/oss/seq_oss_ioctl.c:162:21: sparse: got int [noderef] __user *p sound/core/seq/oss/seq_oss_ioctl.c:162:21: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __user *ptr @@ got int const *__gu_addr @@ sound/core/seq/oss/seq_oss_ioctl.c:162:21: sparse: expected void const volatile [noderef] __user *ptr sound/core/seq/oss/seq_oss_ioctl.c:162:21: sparse: got int const *__gu_addr -- fs/ubifs/ioctl.c:162:21: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected int const *__gu_addr @@ got int [noderef] __user * @@ fs/ubifs/ioctl.c:162:21: sparse: expected int const *__gu_addr fs/ubifs/ioctl.c:162:21: sparse: got int [noderef] __user * >> fs/ubifs/ioctl.c:162:21: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __user *ptr @@ got int const *__gu_addr @@ >> fs/ubifs/ioctl.c:162:21: sparse: expected void const volatile [noderef] __user *ptr fs/ubifs/ioctl.c:162:21: sparse: got int const *__gu_addr -- fs/xfs/xfs_ioctl.c:2257:21: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected unsigned int const *__gu_addr @@ got unsigned int [noderef] [usertype] __user * @@ fs/xfs/xfs_ioctl.c:2257:21: sparse: expected unsigned int const *__gu_addr fs/xfs/xfs_ioctl.c:2257:21: sparse: got unsigned int [noderef] [usertype] __user * >> fs/xfs/xfs_ioctl.c:2257:21: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __user *ptr @@ got unsigned int const *__gu_addr @@ >> fs/xfs/xfs_ioctl.c:2257:21: sparse: expected void const volatile [noderef] __user *ptr fs/xfs/xfs_ioctl.c:2257:21: sparse: got unsigned int const *__gu_addr # https://github.com/0day-ci/linux/commit/7d01c91ac34a64f0177bc6d058cc50e805f59102 git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Luc-Van-Oostenryck/sparse-use-static-inline-for-__chk_-user-io-_ptr/20200828-165431 git checkout 7d01c91ac34a64f0177bc6d058cc50e805f59102 vim +467 drivers/mtd/ubi/cdev.c 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 377 f429b2ea8eadb5a Artem Bityutskiy 2009-01-16 378 static long vol_cdev_ioctl(struct file *file, unsigned int cmd, f429b2ea8eadb5a Artem Bityutskiy 2009-01-16 379 unsigned long arg) 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 380 { 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 381 int err = 0; 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 382 struct ubi_volume_desc *desc = file->private_data; 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 383 struct ubi_volume *vol = desc->vol; 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 384 struct ubi_device *ubi = vol->ubi; 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 385 void __user *argp = (void __user *)arg; 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 386 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 387 switch (cmd) { 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 388 /* Volume update command */ 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 389 case UBI_IOCVOLUP: 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 390 { 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 391 int64_t bytes, rsvd_bytes; 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 392 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 393 if (!capable(CAP_SYS_RESOURCE)) { 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 394 err = -EPERM; 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 395 break; 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 396 } 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 397 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 398 err = copy_from_user(&bytes, argp, sizeof(int64_t)); 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 399 if (err) { 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 400 err = -EFAULT; 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 401 break; 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 402 } 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 403 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 404 if (desc->mode == UBI_READONLY) { 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 405 err = -EROFS; 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 406 break; 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 407 } 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 408 73789a3d9fd8e50 Bruce Leonard 2008-07-03 409 rsvd_bytes = (long long)vol->reserved_pebs * 5f09aaa9b30c91e Boris Brezillon 2016-09-16 410 vol->usable_leb_size; 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 411 if (bytes < 0 || bytes > rsvd_bytes) { 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 412 err = -EINVAL; 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 413 break; 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 414 } 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 415 45fc5c81d03601d Tanya Brokhman 2014-11-09 416 err = get_exclusive(desc); 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 417 if (err < 0) 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 418 break; 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 419 1b68d0eea5daddc Artem Bityutskiy 2008-01-24 420 err = ubi_start_update(ubi, vol, bytes); fda322a1b3b9e8e Ezequiel Garcia 2014-08-29 421 if (bytes == 0) { fda322a1b3b9e8e Ezequiel Garcia 2014-08-29 422 ubi_volume_notify(ubi, vol, UBI_VOLUME_UPDATED); 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 423 revoke_exclusive(desc, UBI_READWRITE); fda322a1b3b9e8e Ezequiel Garcia 2014-08-29 424 } 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 425 break; 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 426 } 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 427 e653879c269735c Artem Bityutskiy 2008-01-24 428 /* Atomic logical eraseblock change command */ e653879c269735c Artem Bityutskiy 2008-01-24 429 case UBI_IOCEBCH: e653879c269735c Artem Bityutskiy 2008-01-24 430 { e653879c269735c Artem Bityutskiy 2008-01-24 431 struct ubi_leb_change_req req; e653879c269735c Artem Bityutskiy 2008-01-24 432 e653879c269735c Artem Bityutskiy 2008-01-24 433 err = copy_from_user(&req, argp, e653879c269735c Artem Bityutskiy 2008-01-24 434 sizeof(struct ubi_leb_change_req)); e653879c269735c Artem Bityutskiy 2008-01-24 435 if (err) { e653879c269735c Artem Bityutskiy 2008-01-24 436 err = -EFAULT; e653879c269735c Artem Bityutskiy 2008-01-24 437 break; e653879c269735c Artem Bityutskiy 2008-01-24 438 } e653879c269735c Artem Bityutskiy 2008-01-24 439 e653879c269735c Artem Bityutskiy 2008-01-24 440 if (desc->mode == UBI_READONLY || e653879c269735c Artem Bityutskiy 2008-01-24 441 vol->vol_type == UBI_STATIC_VOLUME) { e653879c269735c Artem Bityutskiy 2008-01-24 442 err = -EROFS; e653879c269735c Artem Bityutskiy 2008-01-24 443 break; e653879c269735c Artem Bityutskiy 2008-01-24 444 } e653879c269735c Artem Bityutskiy 2008-01-24 445 e653879c269735c Artem Bityutskiy 2008-01-24 446 /* Validate the request */ e653879c269735c Artem Bityutskiy 2008-01-24 447 err = -EINVAL; 9a5f09ac0ab83e4 Boris Brezillon 2016-09-16 448 if (!ubi_leb_valid(vol, req.lnum) || 299d0c5b27346a7 Brian Norris 2015-02-28 449 req.bytes < 0 || req.bytes > vol->usable_leb_size) e653879c269735c Artem Bityutskiy 2008-01-24 450 break; e653879c269735c Artem Bityutskiy 2008-01-24 451 45fc5c81d03601d Tanya Brokhman 2014-11-09 452 err = get_exclusive(desc); e653879c269735c Artem Bityutskiy 2008-01-24 453 if (err < 0) e653879c269735c Artem Bityutskiy 2008-01-24 454 break; e653879c269735c Artem Bityutskiy 2008-01-24 455 e653879c269735c Artem Bityutskiy 2008-01-24 456 err = ubi_start_leb_change(ubi, vol, &req); e653879c269735c Artem Bityutskiy 2008-01-24 457 if (req.bytes == 0) e653879c269735c Artem Bityutskiy 2008-01-24 458 revoke_exclusive(desc, UBI_READWRITE); e653879c269735c Artem Bityutskiy 2008-01-24 459 break; e653879c269735c Artem Bityutskiy 2008-01-24 460 } e653879c269735c Artem Bityutskiy 2008-01-24 461 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 462 /* Logical eraseblock erasure command */ 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 463 case UBI_IOCEBER: 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 464 { 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 465 int32_t lnum; 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 466 bf07803a6827ef8 Christoph Hellwig 2007-05-17 @467 err = get_user(lnum, (__user int32_t *)argp); 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 468 if (err) { 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 469 err = -EFAULT; 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 470 break; 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 471 } 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 472 e653879c269735c Artem Bityutskiy 2008-01-24 473 if (desc->mode == UBI_READONLY || e653879c269735c Artem Bityutskiy 2008-01-24 474 vol->vol_type == UBI_STATIC_VOLUME) { 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 475 err = -EROFS; 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 476 break; 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 477 } 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 478 9a5f09ac0ab83e4 Boris Brezillon 2016-09-16 479 if (!ubi_leb_valid(vol, lnum)) { 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 480 err = -EINVAL; 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 481 break; 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 482 } 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 483 c8566350a3229ca Artem Bityutskiy 2008-07-16 484 dbg_gen("erase LEB %d:%d", vol->vol_id, lnum); 89b96b692906683 Artem Bityutskiy 2007-12-16 485 err = ubi_eba_unmap_leb(ubi, vol, lnum); 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 486 if (err) 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 487 break; 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 488 62f384552b6756c Joel Reardon 2012-05-20 489 err = ubi_wl_flush(ubi, UBI_ALL, UBI_ALL); 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 490 break; 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 491 } 141e6ebd1b1759b Corentin Chary 2009-01-05 492 141e6ebd1b1759b Corentin Chary 2009-01-05 493 /* Logical eraseblock map command */ 141e6ebd1b1759b Corentin Chary 2009-01-05 494 case UBI_IOCEBMAP: 141e6ebd1b1759b Corentin Chary 2009-01-05 495 { 141e6ebd1b1759b Corentin Chary 2009-01-05 496 struct ubi_map_req req; 141e6ebd1b1759b Corentin Chary 2009-01-05 497 141e6ebd1b1759b Corentin Chary 2009-01-05 498 err = copy_from_user(&req, argp, sizeof(struct ubi_map_req)); 141e6ebd1b1759b Corentin Chary 2009-01-05 499 if (err) { 141e6ebd1b1759b Corentin Chary 2009-01-05 500 err = -EFAULT; 141e6ebd1b1759b Corentin Chary 2009-01-05 501 break; 141e6ebd1b1759b Corentin Chary 2009-01-05 502 } b36a261e8c0ab32 Richard Weinberger 2012-05-14 503 err = ubi_leb_map(desc, req.lnum); 141e6ebd1b1759b Corentin Chary 2009-01-05 504 break; 141e6ebd1b1759b Corentin Chary 2009-01-05 505 } c3da23be1673be4 Corentin Chary 2009-01-05 506 c3da23be1673be4 Corentin Chary 2009-01-05 507 /* Logical eraseblock un-map command */ c3da23be1673be4 Corentin Chary 2009-01-05 508 case UBI_IOCEBUNMAP: c3da23be1673be4 Corentin Chary 2009-01-05 509 { c3da23be1673be4 Corentin Chary 2009-01-05 510 int32_t lnum; c3da23be1673be4 Corentin Chary 2009-01-05 511 c3da23be1673be4 Corentin Chary 2009-01-05 512 err = get_user(lnum, (__user int32_t *)argp); c3da23be1673be4 Corentin Chary 2009-01-05 513 if (err) { c3da23be1673be4 Corentin Chary 2009-01-05 514 err = -EFAULT; c3da23be1673be4 Corentin Chary 2009-01-05 515 break; c3da23be1673be4 Corentin Chary 2009-01-05 516 } c3da23be1673be4 Corentin Chary 2009-01-05 517 err = ubi_leb_unmap(desc, lnum); c3da23be1673be4 Corentin Chary 2009-01-05 518 break; c3da23be1673be4 Corentin Chary 2009-01-05 519 } a27ce8f55dd5fdd Corentin Chary 2009-01-05 520 a27ce8f55dd5fdd Corentin Chary 2009-01-05 521 /* Check if logical eraseblock is mapped command */ a27ce8f55dd5fdd Corentin Chary 2009-01-05 522 case UBI_IOCEBISMAP: a27ce8f55dd5fdd Corentin Chary 2009-01-05 523 { a27ce8f55dd5fdd Corentin Chary 2009-01-05 524 int32_t lnum; a27ce8f55dd5fdd Corentin Chary 2009-01-05 525 a27ce8f55dd5fdd Corentin Chary 2009-01-05 526 err = get_user(lnum, (__user int32_t *)argp); a27ce8f55dd5fdd Corentin Chary 2009-01-05 527 if (err) { a27ce8f55dd5fdd Corentin Chary 2009-01-05 528 err = -EFAULT; a27ce8f55dd5fdd Corentin Chary 2009-01-05 529 break; a27ce8f55dd5fdd Corentin Chary 2009-01-05 530 } a27ce8f55dd5fdd Corentin Chary 2009-01-05 531 err = ubi_is_mapped(desc, lnum); a27ce8f55dd5fdd Corentin Chary 2009-01-05 532 break; a27ce8f55dd5fdd Corentin Chary 2009-01-05 533 } 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 534 766fb95ba06e1bb Sidney Amani 2009-01-27 535 /* Set volume property command */ 6748482f4153fc0 Artem Bityutskiy 2011-03-15 536 case UBI_IOCSETVOLPROP: 766fb95ba06e1bb Sidney Amani 2009-01-27 537 { 6748482f4153fc0 Artem Bityutskiy 2011-03-15 538 struct ubi_set_vol_prop_req req; 766fb95ba06e1bb Sidney Amani 2009-01-27 539 766fb95ba06e1bb Sidney Amani 2009-01-27 540 err = copy_from_user(&req, argp, 6748482f4153fc0 Artem Bityutskiy 2011-03-15 541 sizeof(struct ubi_set_vol_prop_req)); 766fb95ba06e1bb Sidney Amani 2009-01-27 542 if (err) { 766fb95ba06e1bb Sidney Amani 2009-01-27 543 err = -EFAULT; 766fb95ba06e1bb Sidney Amani 2009-01-27 544 break; 766fb95ba06e1bb Sidney Amani 2009-01-27 545 } 766fb95ba06e1bb Sidney Amani 2009-01-27 546 switch (req.property) { 6748482f4153fc0 Artem Bityutskiy 2011-03-15 547 case UBI_VOL_PROP_DIRECT_WRITE: f089c0b28cdba10 Artem Bityutskiy 2009-05-07 548 mutex_lock(&ubi->device_mutex); 766fb95ba06e1bb Sidney Amani 2009-01-27 549 desc->vol->direct_writes = !!req.value; f089c0b28cdba10 Artem Bityutskiy 2009-05-07 550 mutex_unlock(&ubi->device_mutex); 766fb95ba06e1bb Sidney Amani 2009-01-27 551 break; 766fb95ba06e1bb Sidney Amani 2009-01-27 552 default: 766fb95ba06e1bb Sidney Amani 2009-01-27 553 err = -EINVAL; 766fb95ba06e1bb Sidney Amani 2009-01-27 554 break; 766fb95ba06e1bb Sidney Amani 2009-01-27 555 } 766fb95ba06e1bb Sidney Amani 2009-01-27 556 break; 766fb95ba06e1bb Sidney Amani 2009-01-27 557 } 766fb95ba06e1bb Sidney Amani 2009-01-27 558 8af871887fcba47 Artem Bityutskiy 2014-03-05 559 /* Create a R/O block device on top of the UBI volume */ 8af871887fcba47 Artem Bityutskiy 2014-03-05 560 case UBI_IOCVOLCRBLK: 9d54c8a33eec782 Ezequiel Garcia 2014-02-25 561 { 9d54c8a33eec782 Ezequiel Garcia 2014-02-25 562 struct ubi_volume_info vi; 9d54c8a33eec782 Ezequiel Garcia 2014-02-25 563 9d54c8a33eec782 Ezequiel Garcia 2014-02-25 564 ubi_get_volume_info(desc, &vi); 4d283ee2517303a Artem Bityutskiy 2014-03-04 565 err = ubiblock_create(&vi); 9d54c8a33eec782 Ezequiel Garcia 2014-02-25 566 break; 9d54c8a33eec782 Ezequiel Garcia 2014-02-25 567 } 9d54c8a33eec782 Ezequiel Garcia 2014-02-25 568 8af871887fcba47 Artem Bityutskiy 2014-03-05 569 /* Remove the R/O block device */ 8af871887fcba47 Artem Bityutskiy 2014-03-05 570 case UBI_IOCVOLRMBLK: 9d54c8a33eec782 Ezequiel Garcia 2014-02-25 571 { 9d54c8a33eec782 Ezequiel Garcia 2014-02-25 572 struct ubi_volume_info vi; 9d54c8a33eec782 Ezequiel Garcia 2014-02-25 573 9d54c8a33eec782 Ezequiel Garcia 2014-02-25 574 ubi_get_volume_info(desc, &vi); 4d283ee2517303a Artem Bityutskiy 2014-03-04 575 err = ubiblock_remove(&vi); 9d54c8a33eec782 Ezequiel Garcia 2014-02-25 576 break; 9d54c8a33eec782 Ezequiel Garcia 2014-02-25 577 } 9d54c8a33eec782 Ezequiel Garcia 2014-02-25 578 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 579 default: 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 580 err = -ENOTTY; 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 581 break; 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 582 } 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 583 return err; 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 584 } 801c135ce73d5df Artem B. Bityutskiy 2006-06-27 585 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org