Hi Dan,

On 03/02/2017 10:14, Dan Carpenter wrote:
> Hello Eric Auger,
> 
> The patch 6c65fb318e8b: "iommu: iommu_get_group_resv_regions" from
> Jan 19, 2017, leads to the following static checker warning:
> 
>       drivers/iommu/iommu.c:215 iommu_insert_device_resv_regions()
>       error: uninitialized symbol 'ret'.
> 
> drivers/iommu/iommu.c
>    203  static int
>    204  iommu_insert_device_resv_regions(struct list_head *dev_resv_regions,
>    205                                   struct list_head *group_resv_regions)
>    206  {
>    207          struct iommu_resv_region *entry;
>    208          int ret;
>    209  
>    210          list_for_each_entry(entry, dev_resv_regions, list) {
>    211                  ret = iommu_insert_resv_region(entry, 
> group_resv_regions);
>    212                  if (ret)
>    213                          break;
>    214          }
>    215          return ret;
> 
> On the one hand, it probably doesn't make sense that the dev_resv_regions
> would ever be empty, but on the other hand, there some code that assumes
> it is possible.  What I mean is that iommu_get_resv_regions() can
> basically do nothing if ->get_resv_regions() isn't implemented.
> 
> I guess we should probably set ret = -EINVAL here?

we should rather initialize ret to 0. The dev_resv_regions can be void
if a device has no reserved region or if the IOMMU does not implement
the ops. We only return -ENOMEM error if we failed allocating.

Do you want to send the fix or shall I do?

Thanks for reporting

Eric
-
> 
>    216  }
>    217  
>    218  int iommu_get_group_resv_regions(struct iommu_group *group,
>    219                                   struct list_head *head)
>    220  {
>    221          struct iommu_device *device;
>    222          int ret = 0;
>    223  
>    224          mutex_lock(&group->mutex);
>    225          list_for_each_entry(device, &group->devices, list) {
>    226                  struct list_head dev_resv_regions;
>    227  
>    228                  INIT_LIST_HEAD(&dev_resv_regions);
>    229                  iommu_get_resv_regions(device->dev, 
> &dev_resv_regions);
>    230                  ret = 
> iommu_insert_device_resv_regions(&dev_resv_regions, head);
>    231                  iommu_put_resv_regions(device->dev, 
> &dev_resv_regions);
>    232                  if (ret)
>    233                          break;
>    234          }
>    235          mutex_unlock(&group->mutex);
>    236          return ret;
>    237  }
>    238  EXPORT_SYMBOL_GPL(iommu_get_group_resv_regions);
> 
> 
> regards,
> dan carpenter
> 
_______________________________________________
iommu mailing list
[email protected]
https://lists.linuxfoundation.org/mailman/listinfo/iommu

Reply via email to