summaryrefslogtreecommitdiffstats
path: root/drivers/vfio/vfio.c
diff options
context:
space:
mode:
authorEric Auger2017-08-11 15:16:06 +0200
committerAlex Williamson2017-08-30 22:00:47 +0200
commitd935ad91f07d20268fca97b1ddc56a816ac71826 (patch)
tree0db9c015f9aa0f8599a92048aa024e194029b161 /drivers/vfio/vfio.c
parentvfio/type1: Give hardware MSI regions precedence (diff)
downloadkernel-qcow2-linux-d935ad91f07d20268fca97b1ddc56a816ac71826.tar.gz
kernel-qcow2-linux-d935ad91f07d20268fca97b1ddc56a816ac71826.tar.xz
kernel-qcow2-linux-d935ad91f07d20268fca97b1ddc56a816ac71826.zip
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.c5
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