CC: [email protected] BCC: [email protected] CC: [email protected] TO: Christoph Hellwig <[email protected]> CC: Alex Williamson <[email protected]> CC: Jason Gunthorpe <[email protected]> CC: Kevin Tian <[email protected]>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master head: 9050ba3a61a4b5bd84c2cde092a100404f814f31 commit: b00621603d050f77a6af9e81e32daeccfd246d6a vfio: factor out a vfio_iommu_driver_allowed helper date: 7 months ago :::::: branch date: 23 hours ago :::::: commit date: 7 months ago compiler: arc-elf-gcc (GCC) 11.3.0 reproduce (cppcheck warning): # apt-get install cppcheck git checkout b00621603d050f77a6af9e81e32daeccfd246d6a cppcheck --quiet --enable=style,performance,portability --template=gcc FILE If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <[email protected]> cppcheck possible warnings: (new ones prefixed by >>, may not real problems) drivers/vfio/vfio.c:542:66: warning: Parameter 'iommu_group' can be declared with const [constParameter] struct vfio_group *vfio_group_get_from_iommu(struct iommu_group *iommu_group) ^ drivers/vfio/vfio.c:607:23: warning: Parameter 'dev' can be declared with const [constParameter] struct device *dev) ^ drivers/vfio/vfio.c:1808:56: warning: Parameter 'test_group' can be declared with const [constParameter] bool vfio_external_group_match_file(struct vfio_group *test_group, ^ drivers/vfio/vfio.c:295:12: warning: Uninitialized variable: tmp->ops [uninitvar] if (tmp->ops == ops) { ^ drivers/vfio/vfio.c:286:6: note: Assuming condition is false if (!driver) ^ drivers/vfio/vfio.c:295:12: note: Uninitialized variable: tmp->ops if (tmp->ops == ops) { ^ drivers/vfio/vfio.c:316:15: warning: Uninitialized variable: driver->ops [uninitvar] if (driver->ops == ops) { ^ drivers/vfio/vfio.c:548:14: warning: Uninitialized variable: group->iommu_group [uninitvar] if (group->iommu_group == iommu_group) { ^ drivers/vfio/vfio.c:678:23: warning: Uninitialized variable: unbound->dev [uninitvar] if (dev == unbound->dev) { ^ >> drivers/vfio/vfio.c:1127:45: warning: Uninitialized variables: driver.ops, >> driver.vfio_next [uninitvar] if (!vfio_iommu_driver_allowed(container, driver)) ^ drivers/vfio/vfio.c:1118:41: note: Assuming condition is false if (list_empty(&container->group_list) || container->iommu_driver) { ^ drivers/vfio/vfio.c:1118:41: note: Assuming condition is false if (list_empty(&container->group_list) || container->iommu_driver) { ^ drivers/vfio/vfio.c:1127:45: note: Uninitialized variables: driver.ops, driver.vfio_next if (!vfio_iommu_driver_allowed(container, driver)) ^ vim +1127 drivers/vfio/vfio.c cba3345cc494ad Alex Williamson 2012-07-31 1101 cba3345cc494ad Alex Williamson 2012-07-31 1102 static long vfio_ioctl_set_iommu(struct vfio_container *container, cba3345cc494ad Alex Williamson 2012-07-31 1103 unsigned long arg) cba3345cc494ad Alex Williamson 2012-07-31 1104 { cba3345cc494ad Alex Williamson 2012-07-31 1105 struct vfio_iommu_driver *driver; cba3345cc494ad Alex Williamson 2012-07-31 1106 long ret = -ENODEV; cba3345cc494ad Alex Williamson 2012-07-31 1107 9587f44aa69a4c Alex Williamson 2013-04-25 1108 down_write(&container->group_lock); cba3345cc494ad Alex Williamson 2012-07-31 1109 cba3345cc494ad Alex Williamson 2012-07-31 1110 /* cba3345cc494ad Alex Williamson 2012-07-31 1111 * The container is designed to be an unprivileged interface while cba3345cc494ad Alex Williamson 2012-07-31 1112 * the group can be assigned to specific users. Therefore, only by cba3345cc494ad Alex Williamson 2012-07-31 1113 * adding a group to a container does the user get the privilege of cba3345cc494ad Alex Williamson 2012-07-31 1114 * enabling the iommu, which may allocate finite resources. There cba3345cc494ad Alex Williamson 2012-07-31 1115 * is no unset_iommu, but by removing all the groups from a container, cba3345cc494ad Alex Williamson 2012-07-31 1116 * the container is deprivileged and returns to an unset state. cba3345cc494ad Alex Williamson 2012-07-31 1117 */ cba3345cc494ad Alex Williamson 2012-07-31 1118 if (list_empty(&container->group_list) || container->iommu_driver) { 9587f44aa69a4c Alex Williamson 2013-04-25 1119 up_write(&container->group_lock); cba3345cc494ad Alex Williamson 2012-07-31 1120 return -EINVAL; cba3345cc494ad Alex Williamson 2012-07-31 1121 } cba3345cc494ad Alex Williamson 2012-07-31 1122 cba3345cc494ad Alex Williamson 2012-07-31 1123 mutex_lock(&vfio.iommu_drivers_lock); ae5515d66362b9 Alex Williamson 2015-12-04 1124 list_for_each_entry(driver, &vfio.iommu_drivers_list, vfio_next) { cba3345cc494ad Alex Williamson 2012-07-31 1125 void *data; cba3345cc494ad Alex Williamson 2012-07-31 1126 b00621603d050f Christoph Hellwig 2021-09-24 @1127 if (!vfio_iommu_driver_allowed(container, driver)) 03a76b60f8ba27 Alex Williamson 2015-12-21 1128 continue; cba3345cc494ad Alex Williamson 2012-07-31 1129 if (!try_module_get(driver->ops->owner)) cba3345cc494ad Alex Williamson 2012-07-31 1130 continue; cba3345cc494ad Alex Williamson 2012-07-31 1131 cba3345cc494ad Alex Williamson 2012-07-31 1132 /* cba3345cc494ad Alex Williamson 2012-07-31 1133 * The arg magic for SET_IOMMU is the same as CHECK_EXTENSION, cba3345cc494ad Alex Williamson 2012-07-31 1134 * so test which iommu driver reported support for this cba3345cc494ad Alex Williamson 2012-07-31 1135 * extension and call open on them. We also pass them the cba3345cc494ad Alex Williamson 2012-07-31 1136 * magic, allowing a single driver to support multiple cba3345cc494ad Alex Williamson 2012-07-31 1137 * interfaces if they'd like. cba3345cc494ad Alex Williamson 2012-07-31 1138 */ cba3345cc494ad Alex Williamson 2012-07-31 1139 if (driver->ops->ioctl(NULL, VFIO_CHECK_EXTENSION, arg) <= 0) { cba3345cc494ad Alex Williamson 2012-07-31 1140 module_put(driver->ops->owner); cba3345cc494ad Alex Williamson 2012-07-31 1141 continue; cba3345cc494ad Alex Williamson 2012-07-31 1142 } cba3345cc494ad Alex Williamson 2012-07-31 1143 cba3345cc494ad Alex Williamson 2012-07-31 1144 data = driver->ops->open(arg); cba3345cc494ad Alex Williamson 2012-07-31 1145 if (IS_ERR(data)) { cba3345cc494ad Alex Williamson 2012-07-31 1146 ret = PTR_ERR(data); cba3345cc494ad Alex Williamson 2012-07-31 1147 module_put(driver->ops->owner); 7c435b46c29a02 Alex Williamson 2016-02-22 1148 continue; cba3345cc494ad Alex Williamson 2012-07-31 1149 } cba3345cc494ad Alex Williamson 2012-07-31 1150 cba3345cc494ad Alex Williamson 2012-07-31 1151 ret = __vfio_container_attach_groups(container, driver, data); 7c435b46c29a02 Alex Williamson 2016-02-22 1152 if (ret) { cba3345cc494ad Alex Williamson 2012-07-31 1153 driver->ops->release(data); cba3345cc494ad Alex Williamson 2012-07-31 1154 module_put(driver->ops->owner); 7c435b46c29a02 Alex Williamson 2016-02-22 1155 continue; cba3345cc494ad Alex Williamson 2012-07-31 1156 } cba3345cc494ad Alex Williamson 2012-07-31 1157 7c435b46c29a02 Alex Williamson 2016-02-22 1158 container->iommu_driver = driver; 7c435b46c29a02 Alex Williamson 2016-02-22 1159 container->iommu_data = data; 7c435b46c29a02 Alex Williamson 2016-02-22 1160 break; cba3345cc494ad Alex Williamson 2012-07-31 1161 } cba3345cc494ad Alex Williamson 2012-07-31 1162 cba3345cc494ad Alex Williamson 2012-07-31 1163 mutex_unlock(&vfio.iommu_drivers_lock); 9587f44aa69a4c Alex Williamson 2013-04-25 1164 up_write(&container->group_lock); cba3345cc494ad Alex Williamson 2012-07-31 1165 cba3345cc494ad Alex Williamson 2012-07-31 1166 return ret; cba3345cc494ad Alex Williamson 2012-07-31 1167 } cba3345cc494ad Alex Williamson 2012-07-31 1168 -- 0-DAY CI Kernel Test Service https://01.org/lkp _______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
