* [PATCH v2] iommu/vt-d: fix pci device refcount leak in prq_event_thread()
@ 2022-11-19 14:40 Yang Yingliang
2022-12-01 4:03 ` Baolu Lu
0 siblings, 1 reply; 2+ messages in thread
From: Yang Yingliang @ 2022-11-19 14:40 UTC (permalink / raw)
To: dwmw2, baolu.lu, joro, will, robin.murphy; +Cc: iommu, yangyingliang
As comment of pci_get_domain_bus_and_slot() says, it returns
a pci device with refcount increment, when finish using it,
the caller must decrement the reference count by calling
pci_dev_put(). So call pci_dev_put() after using the 'pdev'
to avoid refcount leak.
Besides, if the 'pdev' is null or intel_svm_prq_report()
returns error, there is no need to trace this fault.
Fixes: 06f4b8d09dba ("iommu/vt-d: Remove unnecessary SVA data accesses in page fault path")
Suggested-by: Lu Baolu <baolu.lu@linux.intel.com>
Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
---
drivers/iommu/intel/svm.c | 14 +++++++++-----
1 file changed, 9 insertions(+), 5 deletions(-)
diff --git a/drivers/iommu/intel/svm.c b/drivers/iommu/intel/svm.c
index 7d08eb034f2d..3fa7446fb2e9 100644
--- a/drivers/iommu/intel/svm.c
+++ b/drivers/iommu/intel/svm.c
@@ -745,12 +745,16 @@ static irqreturn_t prq_event_thread(int irq, void *d)
* If prq is to be handled outside iommu driver via receiver of
* the fault notifiers, we skip the page response here.
*/
- if (!pdev || intel_svm_prq_report(iommu, &pdev->dev, req))
- handle_bad_prq_event(iommu, req, QI_RESP_INVALID);
+ if (!pdev)
+ goto bad_req;
- trace_prq_report(iommu, &pdev->dev, req->qw_0, req->qw_1,
- req->priv_data[0], req->priv_data[1],
- iommu->prq_seq_number++);
+ if (intel_svm_prq_report(iommu, &pdev->dev, req))
+ handle_bad_prq_event(iommu, req, QI_RESP_INVALID);
+ else
+ trace_prq_report(iommu, &pdev->dev, req->qw_0, req->qw_1,
+ req->priv_data[0], req->priv_data[1],
+ iommu->prq_seq_number++);
+ pci_dev_put(pdev);
prq_advance:
head = (head + sizeof(*req)) & PRQ_RING_MASK;
}
--
2.25.1
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH v2] iommu/vt-d: fix pci device refcount leak in prq_event_thread()
2022-11-19 14:40 [PATCH v2] iommu/vt-d: fix pci device refcount leak in prq_event_thread() Yang Yingliang
@ 2022-12-01 4:03 ` Baolu Lu
0 siblings, 0 replies; 2+ messages in thread
From: Baolu Lu @ 2022-12-01 4:03 UTC (permalink / raw)
To: Yang Yingliang, dwmw2, joro, will, robin.murphy; +Cc: baolu.lu, iommu
On 2022/11/19 22:40, Yang Yingliang wrote:
> As comment of pci_get_domain_bus_and_slot() says, it returns
> a pci device with refcount increment, when finish using it,
> the caller must decrement the reference count by calling
> pci_dev_put(). So call pci_dev_put() after using the 'pdev'
> to avoid refcount leak.
>
> Besides, if the 'pdev' is null or intel_svm_prq_report()
> returns error, there is no need to trace this fault.
>
> Fixes: 06f4b8d09dba ("iommu/vt-d: Remove unnecessary SVA data accesses in page fault path")
> Suggested-by: Lu Baolu<baolu.lu@linux.intel.com>
> Signed-off-by: Yang Yingliang<yangyingliang@huawei.com>
Queued for Joerg. Thank you!
Best regards,
baolu
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2022-12-01 4:03 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-11-19 14:40 [PATCH v2] iommu/vt-d: fix pci device refcount leak in prq_event_thread() Yang Yingliang
2022-12-01 4:03 ` Baolu Lu
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox