[openeuler:OLK-5.10 2894/2894] drivers/ub/urma/ubcore/ubcore_main.c:257:36: sparse: sparse: incorrect type in assignment (different base types)

tree: https://gitee.com/openeuler/kernel.git OLK-5.10 head: 731227d05f54b13300b28332fabd3f3aaf0950eb commit: 95c713224477ac3433652331dd715e9bbcbc793a [2894/2894] ub: init ubcore module config: x86_64-randconfig-r121-20250514 compiler: gcc-12 (Debian 12.2.0-14) 12.2.0 reproduce (this is a W=1 build): If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202505141607.i1GpuEfA-lkp@intel.com/ sparse warnings: (new ones prefixed by >>) drivers/ub/urma/ubcore/ubcore_main.c:118:44: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void const *args_addr @@ got void [noderef] __user * @@ drivers/ub/urma/ubcore/ubcore_main.c:118:44: sparse: expected void const *args_addr drivers/ub/urma/ubcore/ubcore_main.c:118:44: sparse: got void [noderef] __user * drivers/ub/urma/ubcore/ubcore_main.c:130:36: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *args_addr @@ got void [noderef] __user * @@ drivers/ub/urma/ubcore/ubcore_main.c:130:36: sparse: expected void *args_addr drivers/ub/urma/ubcore/ubcore_main.c:130:36: sparse: got void [noderef] __user * drivers/ub/urma/ubcore/ubcore_main.c:143:44: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void const *args_addr @@ got void [noderef] __user * @@ drivers/ub/urma/ubcore/ubcore_main.c:143:44: sparse: expected void const *args_addr drivers/ub/urma/ubcore/ubcore_main.c:143:44: sparse: got void [noderef] __user * drivers/ub/urma/ubcore/ubcore_main.c:256:37: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] resv2 @@ got restricted __be32 [usertype] @@ drivers/ub/urma/ubcore/ubcore_main.c:256:37: sparse: expected unsigned int [usertype] resv2 drivers/ub/urma/ubcore/ubcore_main.c:256:37: sparse: got restricted __be32 [usertype]
drivers/ub/urma/ubcore/ubcore_main.c:257:36: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] addr @@ got restricted __be32 [usertype] ipv4 @@ drivers/ub/urma/ubcore/ubcore_main.c:257:36: sparse: expected unsigned int [usertype] addr drivers/ub/urma/ubcore/ubcore_main.c:257:36: sparse: got restricted __be32 [usertype] ipv4 drivers/ub/urma/ubcore/ubcore_main.c:86:17: sparse: sparse: context imbalance in 'ubcore_uasid_alloc' - unexpected unlock drivers/ub/urma/ubcore/ubcore_main.c: note: in included file: drivers/ub/urma/ubcore/ubcore_cmd.h:65:45: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void const [noderef] __user *from @@ got void const *args_addr @@ drivers/ub/urma/ubcore/ubcore_cmd.h:65:45: sparse: expected void const [noderef] __user *from drivers/ub/urma/ubcore/ubcore_cmd.h:65:45: sparse: got void const *args_addr drivers/ub/urma/ubcore/ubcore_cmd.h:75:37: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void [noderef] __user *to @@ got void *args_addr @@ drivers/ub/urma/ubcore/ubcore_cmd.h:75:37: sparse: expected void [noderef] __user *to drivers/ub/urma/ubcore/ubcore_cmd.h:75:37: sparse: got void *args_addr drivers/ub/urma/ubcore/ubcore_cmd.h:65:45: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void const [noderef] __user *from @@ got void const *args_addr @@ drivers/ub/urma/ubcore/ubcore_cmd.h:65:45: sparse: expected void const [noderef] __user *from drivers/ub/urma/ubcore/ubcore_cmd.h:65:45: sparse: got void const *args_addr drivers/ub/urma/ubcore/ubcore_cmd.h:65:45: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void const [noderef] __user *from @@ got void const *args_addr @@ drivers/ub/urma/ubcore/ubcore_cmd.h:65:45: sparse: expected void const [noderef] __user *from drivers/ub/urma/ubcore/ubcore_cmd.h:65:45: sparse: got void const *args_addr
vim +257 drivers/ub/urma/ubcore/ubcore_main.c 112 113 static int ubcore_cmd_set_uasid(struct ubcore_cmd_hdr *hdr) 114 { 115 struct ubcore_cmd_set_uasid arg; 116 int ret; 117 118 ret = ubcore_copy_from_user(&arg, (void __user *)(uintptr_t)hdr->args_addr, 119 sizeof(struct ubcore_cmd_set_uasid)); 120 if (ret != 0) 121 return -EPERM; 122 123 arg.out.uasid = ubcore_uasid_alloc(arg.in.uasid); 124 if (arg.out.uasid == 0) { 125 ubcore_log_err("set uasid allocation failed, in_uasid: %u.\n", arg.in.uasid); 126 return -ENOMEM; 127 } 128 ubcore_log_info("set uasid allocation success, uasid: %u.\n", arg.out.uasid); 129
130 ret = ubcore_copy_to_user((void __user *)(uintptr_t)hdr->args_addr, &arg, 131 sizeof(struct ubcore_cmd_set_uasid)); 132 if (ret != 0) 133 return -EPERM; 134 135 return 0; 136 } 137 138 static int ubcore_cmd_put_uasid(struct ubcore_cmd_hdr *hdr) 139 { 140 struct ubcore_cmd_put_uasid arg; 141 int ret; 142 143 ret = ubcore_copy_from_user(&arg, (void __user *)(uintptr_t)hdr->args_addr, 144 sizeof(struct ubcore_cmd_put_uasid)); 145 if (ret != 0) 146 return -EPERM; 147 148 if (ubcore_uasid_free(arg.in.uasid) != 0) 149 return -EINVAL; 150 151 ubcore_log_info("put uasid free success, uasid: %u.\n", arg.in.uasid); 152 return 0; 153 } 154 static int ubcore_cmd_parse(struct ubcore_cmd_hdr *hdr) 155 { 156 switch (hdr->command) { 157 case UBCORE_CMD_SET_UASID: 158 return ubcore_cmd_set_uasid(hdr); 159 case UBCORE_CMD_PUT_UASID: 160 return ubcore_cmd_put_uasid(hdr); 161 default: 162 ubcore_log_err("bad ubcore command: %d.\n", (int)hdr->command); 163 return -EINVAL; 164 } 165 } 166 167 static long ubcore_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) 168 { 169 struct ubcore_cmd_hdr hdr; 170 int ret; 171 172 if (cmd == UBCORE_CMD) { 173 ret = ubcore_copy_from_user(&hdr, (void *)arg, sizeof(struct ubcore_cmd_hdr)); 174 if ((ret != 0) || (hdr.args_len > UBCORE_MAX_CMD_SIZE)) { 175 ubcore_log_err("length of ioctl input parameter is out of range.\n"); 176 return -EINVAL; 177 } 178 } else { 179 ubcore_log_err("bad ioctl command.\n"); 180 return -ENOIOCTLCMD; 181 } 182 return ubcore_cmd_parse(&hdr); 183 } 184 185 static int ubcore_close(struct inode *i_node, struct file *filp) 186 { 187 return 0; 188 } 189 190 static const struct file_operations g_ubcore_ops = { 191 .owner = THIS_MODULE, 192 .open = ubcore_open, 193 .release = ubcore_close, 194 .unlocked_ioctl = ubcore_ioctl, 195 .compat_ioctl = ubcore_ioctl, 196 }; 197 198 static int ubcore_register_sysfs(void) 199 { 200 int ret; 201 202 ret = alloc_chrdev_region(&g_ubcore_ctx.ubcore_devno, 0, 1, UBCORE_DEVICE_NAME); 203 if (ret != 0) { 204 ubcore_log_err("alloc chrdev region failed, ret:%d.\n", ret); 205 return ret; 206 } 207 208 cdev_init(&g_ubcore_ctx.ubcore_cdev, &g_ubcore_ops); 209 ret = cdev_add(&g_ubcore_ctx.ubcore_cdev, g_ubcore_ctx.ubcore_devno, 1); 210 if (ret != 0) { 211 ubcore_log_err("chrdev add failed, ret:%d.\n", ret); 212 goto unreg_cdev_region; 213 } 214 215 /* /sys/class/ubus/ubcore */ 216 g_ubcore_ctx.ubcore_class = class_create(THIS_MODULE, UBCORE_CLASS_NAME); 217 if (IS_ERR(g_ubcore_ctx.ubcore_class)) { 218 ret = (int)PTR_ERR(g_ubcore_ctx.ubcore_class); 219 ubcore_log_err("couldn't create class %s, ret:%d.\n", UBCORE_CLASS_NAME, ret); 220 goto del_cdev; 221 } 222 223 /* /dev/ubcore */ 224 g_ubcore_ctx.ubcore_dev = 225 device_create(g_ubcore_ctx.ubcore_class, NULL, g_ubcore_ctx.ubcore_devno, NULL, 226 UBCORE_DEVICE_NAME); 227 if (IS_ERR(g_ubcore_ctx.ubcore_dev)) { 228 ret = (int)PTR_ERR(g_ubcore_ctx.ubcore_dev); 229 ubcore_log_err("couldn't create device %s, ret:%d.\n", UBCORE_DEVICE_NAME, ret); 230 goto destroy_class; 231 } 232 ubcore_log_info("ubcore device created success.\n"); 233 return 0; 234 235 destroy_class: 236 class_destroy(g_ubcore_ctx.ubcore_class); 237 del_cdev: 238 cdev_del(&g_ubcore_ctx.ubcore_cdev); 239 unreg_cdev_region: 240 unregister_chrdev_region(g_ubcore_ctx.ubcore_devno, 1); 241 return ret; 242 } 243 244 static void ubcore_unregister_sysfs(void) 245 { 246 device_destroy(g_ubcore_ctx.ubcore_class, g_ubcore_ctx.ubcore_cdev.dev); 247 class_destroy(g_ubcore_ctx.ubcore_class); 248 cdev_del(&g_ubcore_ctx.ubcore_cdev); 249 unregister_chrdev_region(g_ubcore_ctx.ubcore_devno, 1); 250 ubcore_log_info("ubcore device destroyed success.\n"); 251 } 252 253 static void ubcore_ipv4_to_netaddr(struct ubcore_net_addr *netaddr, __be32 ipv4) 254 { 255 netaddr->net_addr.in4.resv1 = 0; 256 netaddr->net_addr.in4.resv2 = htonl(UBCORE_IPV4_MAP_IPV6_PREFIX); 257 netaddr->net_addr.in4.addr = ipv4; 258 } 259
-- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki
participants (1)
-
kernel test robot