diff options
author | Eric Auger <eric.auger@redhat.com> | 2017-08-11 15:16:06 +0200 |
---|---|---|
committer | Alex Williamson <alex.williamson@redhat.com> | 2017-08-30 14:00:47 -0600 |
commit | d935ad91f07d20268fca97b1ddc56a816ac71826 (patch) | |
tree | 0db9c015f9aa0f8599a92048aa024e194029b161 /drivers/vfio/vfio.c | |
parent | f203f7f1dbb298e1ed68f6c2f53715d13d5f3a0f (diff) |
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 <eric.auger@redhat.com>
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
Diffstat (limited to 'drivers/vfio/vfio.c')
-rw-r--r-- | drivers/vfio/vfio.c | 5 |
1 files changed, 3 insertions, 2 deletions
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 |