Subject: Re: [PATCH v3 1/2] vdpa: support set mac address from vdpa tool

From: kernel test robot <[email-masked]>
Date: Mon, 8 Jul 2024 17:15:42 +0800

Hi Cindy,

kernel test robot noticed the following build warnings:

[auto build test WARNING on linus/master]
[also build test WARNING on horms-ipvs/master v6.10-rc7 next-20240703]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Cindy-Lu/vdpa-support-set-mac-address-from-vdpa-tool/20240708-144942
base:   linus/master
patch link:    https://lore.kernel.org/r/20240708064820.88955-2-lulu%40redhat.com
patch subject: [PATCH v3 1/2] vdpa: support set mac address from vdpa tool
config: i386-buildonly-randconfig-005-20240708 (https://download.01.org/0day-ci/archive/20240708/[email-masked]/config)
compiler: clang version 18.1.5 (https://github.com/llvm/llvm-project 617a15a9eac96088ae5e9134248d8236e34b91b1)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240708/[email-masked]/reproduce)

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 <[email-masked]>
| Closes: https://lore.kernel.org/oe-kbuild-all/[email-masked]/

All warnings (new ones prefixed by >>):

>> drivers/vdpa/vdpa.c:1377:6: warning: variable 'err' is used uninitialized whenever 'if' condition is false [-Wsometimes-uninitialized]
    1377 |         if ((mdev->supported_features & BIT_ULL(VIRTIO_NET_F_MAC)) &&
         |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    1378 |             nl_attrs[VDPA_ATTR_DEV_NET_CFG_MACADDR]) {
         |             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/vdpa/vdpa.c:1394:9: note: uninitialized use occurs here
    1394 |         return err;
         |                ^~~
   drivers/vdpa/vdpa.c:1377:2: note: remove the 'if' if its condition is always true
    1377 |         if ((mdev->supported_features & BIT_ULL(VIRTIO_NET_F_MAC)) &&
         |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    1378 |             nl_attrs[VDPA_ATTR_DEV_NET_CFG_MACADDR]) {
         |             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/vdpa/vdpa.c:1377:6: warning: variable 'err' is used uninitialized whenever '&&' condition is false [-Wsometimes-uninitialized]
    1377 |         if ((mdev->supported_features & BIT_ULL(VIRTIO_NET_F_MAC)) &&
         |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/vdpa/vdpa.c:1394:9: note: uninitialized use occurs here
    1394 |         return err;
         |                ^~~
   drivers/vdpa/vdpa.c:1377:6: note: remove the '&&' if its condition is always true
    1377 |         if ((mdev->supported_features & BIT_ULL(VIRTIO_NET_F_MAC)) &&
         |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/vdpa/vdpa.c:1371:9: note: initialize the variable 'err' to silence this warning
    1371 |         int err;
         |                ^
         |                 = 0
   2 warnings generated.

vim +1377 drivers/vdpa/vdpa.c

  1363	
  1364	static int vdpa_dev_net_device_attr_set(struct vdpa_device *vdev,
  1365						struct genl_info *info)
  1366	{
  1367		struct vdpa_dev_set_config set_config = {};
  1368		const u8 *macaddr;
  1369		struct vdpa_mgmt_dev *mdev = vdev->mdev;
  1370		struct nlattr **nl_attrs = info->attrs;
  1371		int err;
  1372	
  1373		if (!vdev->mdev)
  1374			return -EINVAL;
  1375	
  1376		down_write(&vdev->cf_lock);
> 1377		if ((mdev->supported_features & BIT_ULL(VIRTIO_NET_F_MAC)) &&
  1378		    nl_attrs[VDPA_ATTR_DEV_NET_CFG_MACADDR]) {
  1379			set_config.mask |= BIT_ULL(VDPA_ATTR_DEV_NET_CFG_MACADDR);
  1380			macaddr = nla_data(nl_attrs[VDPA_ATTR_DEV_NET_CFG_MACADDR]);
  1381			memcpy(set_config.net.mac, macaddr, ETH_ALEN);
  1382	
  1383			if (mdev->ops->dev_set_attr) {
  1384				err = mdev->ops->dev_set_attr(mdev, vdev, &set_config);
  1385			} else {
  1386				NL_SET_ERR_MSG_FMT_MOD(info->extack,
  1387						       "features 0x%llx not supported",
  1388						       BIT_ULL(VIRTIO_NET_F_MAC));
  1389				err = -EINVAL;
  1390			}
  1391		}
  1392		up_write(&vdev->cf_lock);
  1393	
  1394		return err;
  1395	}
  1396	static int vdpa_nl_cmd_dev_attr_set_doit(struct sk_buff *skb,
  1397						 struct genl_info *info)
  1398	{
  1399		const char *name;
  1400		int err = 0;
  1401		struct device *dev;
  1402		struct vdpa_device *vdev;
  1403		u64 classes;
  1404	
  1405		if (!info->attrs[VDPA_ATTR_DEV_NAME])
  1406			return -EINVAL;
  1407	
  1408		name = nla_data(info->attrs[VDPA_ATTR_DEV_NAME]);
  1409	
  1410		down_write(&vdpa_dev_lock);
  1411		dev = bus_find_device(&vdpa_bus, NULL, name, vdpa_name_match);
  1412		if (!dev) {
  1413			NL_SET_ERR_MSG_MOD(info->extack, "device not found");
  1414			err = -ENODEV;
  1415			goto dev_err;
  1416		}
  1417		vdev = container_of(dev, struct vdpa_device, dev);
  1418		if (!vdev->mdev) {
  1419			NL_SET_ERR_MSG_MOD(
  1420				info->extack,
  1421				"Fail to find the specified management device");
  1422			err = -EINVAL;
  1423			goto mdev_err;
  1424		}
  1425		classes = vdpa_mgmtdev_get_classes(vdev->mdev, NULL);
  1426		if (classes & BIT_ULL(VIRTIO_ID_NET)) {
  1427			err = vdpa_dev_net_device_attr_set(vdev, info);
  1428		} else {
  1429			NL_SET_ERR_MSG_FMT_MOD(info->extack, "%s device not supported",
  1430					       name);
  1431		}
  1432	
  1433	mdev_err:
  1434		put_device(dev);
  1435	dev_err:
  1436		up_write(&vdpa_dev_lock);
  1437		return err;
  1438	}
  1439	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki