From: Eric Auger Date: Fri, 11 Aug 2017 13:16:06 +0000 (+0200) Subject: vfio: fix noiommu vfio_iommu_group_get reference count X-Git-Url: http://git.cdn.openwrt.org/?a=commitdiff_plain;h=d935ad91f07d20268fca97b1ddc56a816ac71826;p=openwrt%2Fstaging%2Fblogic.git vfio: fix noiommu vfio_iommu_group_get reference count In vfio_iommu_group_get() we want to increase the reference count of the iommu group. In noiommu case, the group does not exist and is allocated. iommu_group_add_device() increases the group ref count. However we then call iommu_group_put() which decrements it. This leads to a "refcount_t: underflow WARN_ON". Only decrement the ref count in case of iommu_group_add_device failure. Signed-off-by: Eric Auger Signed-off-by: Alex Williamson --- diff --git a/drivers/vfio/vfio.c b/drivers/vfio/vfio.c index 330d50582f40..4ee4f361fe9f 100644 --- a/drivers/vfio/vfio.c +++ b/drivers/vfio/vfio.c @@ -138,9 +138,10 @@ struct iommu_group *vfio_iommu_group_get(struct device *dev) iommu_group_set_name(group, "vfio-noiommu"); iommu_group_set_iommudata(group, &noiommu, NULL); ret = iommu_group_add_device(group, dev); - iommu_group_put(group); - if (ret) + if (ret) { + iommu_group_put(group); return NULL; + } /* * Where to taint? At this point we've added an IOMMU group for a