* [PATCH] iommufd: Test attach before detaching pasid
@ 2025-03-28 13:34 Yi Liu
2025-03-28 14:40 ` Jason Gunthorpe
0 siblings, 1 reply; 3+ messages in thread
From: Yi Liu @ 2025-03-28 13:34 UTC (permalink / raw)
To: kevin.tian, jgg; +Cc: joro, baolu.lu, yi.l.liu, iommu, nicolinc, Lai Yi
Check if the pasid has been attached before going further in the detach
path. This makes this path more robust. Add a selftest as well.
Reported-by: Lai Yi <yi1.lai@linux.intel.com>
Closes: https://lore.kernel.org/linux-iommu/Z+X0tzxhiaupJT7b@ly-workstation/#t
Fixes: c0e301b2978d ("iommufd/device: Add pasid_attach array to track per-PASID attach")
Signed-off-by: Yi Liu <yi.l.liu@intel.com>
---
drivers/iommu/iommufd/device.c | 7 +++++++
tools/testing/selftests/iommu/iommufd.c | 6 ++++++
2 files changed, 13 insertions(+)
diff --git a/drivers/iommu/iommufd/device.c b/drivers/iommu/iommufd/device.c
index 2307daad65c0..375dd262f431 100644
--- a/drivers/iommu/iommufd/device.c
+++ b/drivers/iommu/iommufd/device.c
@@ -644,6 +644,11 @@ iommufd_hw_pagetable_detach(struct iommufd_device *idev, ioasid_t pasid)
mutex_lock(&igroup->lock);
attach = xa_load(&igroup->pasid_attach, pasid);
+ if (WARN_ON(!attach)) {
+ mutex_unlock(&igroup->lock);
+ return NULL;
+ }
+
hwpt = attach->hwpt;
hwpt_paging = find_hwpt_paging(hwpt);
@@ -1001,6 +1006,8 @@ void iommufd_device_detach(struct iommufd_device *idev, ioasid_t pasid)
struct iommufd_hw_pagetable *hwpt;
hwpt = iommufd_hw_pagetable_detach(idev, pasid);
+ if (!hwpt)
+ return;
iommufd_hw_pagetable_put(idev->ictx, hwpt);
refcount_dec(&idev->obj.users);
}
diff --git a/tools/testing/selftests/iommu/iommufd.c b/tools/testing/selftests/iommu/iommufd.c
index 7eb7ee149f2b..1a8e85afe9aa 100644
--- a/tools/testing/selftests/iommu/iommufd.c
+++ b/tools/testing/selftests/iommu/iommufd.c
@@ -3074,6 +3074,12 @@ TEST_F(iommufd_device_pasid, pasid_attach)
uint32_t pasid = 100;
uint32_t viommu_id;
+ /*
+ * Negative, detach pasid without attaching, this is not expected.
+ * But it should not result in failure anyway.
+ */
+ test_cmd_pasid_detach(pasid);
+
/* Allocate two nested hwpts sharing one common parent hwpt */
test_cmd_hwpt_alloc(self->device_id, self->ioas_id,
IOMMU_HWPT_ALLOC_NEST_PARENT,
--
2.34.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] iommufd: Test attach before detaching pasid
2025-03-28 13:34 [PATCH] iommufd: Test attach before detaching pasid Yi Liu
@ 2025-03-28 14:40 ` Jason Gunthorpe
2025-03-31 2:24 ` Yi Liu
0 siblings, 1 reply; 3+ messages in thread
From: Jason Gunthorpe @ 2025-03-28 14:40 UTC (permalink / raw)
To: Yi Liu; +Cc: kevin.tian, joro, baolu.lu, iommu, nicolinc, Lai Yi
On Fri, Mar 28, 2025 at 06:34:48AM -0700, Yi Liu wrote:
> Check if the pasid has been attached before going further in the detach
> path. This makes this path more robust. Add a selftest as well.
>
> Reported-by: Lai Yi <yi1.lai@linux.intel.com>
> Closes: https://lore.kernel.org/linux-iommu/Z+X0tzxhiaupJT7b@ly-workstation/#t
> Fixes: c0e301b2978d ("iommufd/device: Add pasid_attach array to track per-PASID attach")
> Signed-off-by: Yi Liu <yi.l.liu@intel.com>
> ---
> drivers/iommu/iommufd/device.c | 7 +++++++
> tools/testing/selftests/iommu/iommufd.c | 6 ++++++
> 2 files changed, 13 insertions(+)
>
> diff --git a/drivers/iommu/iommufd/device.c b/drivers/iommu/iommufd/device.c
> index 2307daad65c0..375dd262f431 100644
> --- a/drivers/iommu/iommufd/device.c
> +++ b/drivers/iommu/iommufd/device.c
> @@ -644,6 +644,11 @@ iommufd_hw_pagetable_detach(struct iommufd_device *idev, ioasid_t pasid)
>
> mutex_lock(&igroup->lock);
> attach = xa_load(&igroup->pasid_attach, pasid);
> + if (WARN_ON(!attach)) {
> + mutex_unlock(&igroup->lock);
> + return NULL;
> + }
We can't trigger a WARN_ON during the test suite!
# RUN iommufd_device_pasid.no_pasid.pasid_attach ...
[ 23.723948] iommufd_mock iommufd_mock0: Adding to iommu group 0
[ 23.724532] iommufd_mock iommufd_mock1: Adding to iommu group 1
[ 23.724722] ------------[ cut here ]------------
[ 23.725194] WARNING: CPU: 5 PID: 1169 at drivers/iommu/iommufd/device.c:647 iommufd_hw_pagetable_detach+0x1e7/0x230 [iommufd]
[ 23.725350] Modules linked in: iommufd
[ 23.725406] CPU: 5 UID: 0 PID: 1169 Comm: iommufd Not tainted 6.14.0-rc2+ #1
Just drop the WARN_ON check right?
I took it like that, please let me know
Jason
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] iommufd: Test attach before detaching pasid
2025-03-28 14:40 ` Jason Gunthorpe
@ 2025-03-31 2:24 ` Yi Liu
0 siblings, 0 replies; 3+ messages in thread
From: Yi Liu @ 2025-03-31 2:24 UTC (permalink / raw)
To: Jason Gunthorpe; +Cc: kevin.tian, joro, baolu.lu, iommu, nicolinc, Lai Yi
On 2025/3/28 22:40, Jason Gunthorpe wrote:
> On Fri, Mar 28, 2025 at 06:34:48AM -0700, Yi Liu wrote:
>> Check if the pasid has been attached before going further in the detach
>> path. This makes this path more robust. Add a selftest as well.
>>
>> Reported-by: Lai Yi <yi1.lai@linux.intel.com>
>> Closes: https://lore.kernel.org/linux-iommu/Z+X0tzxhiaupJT7b@ly-workstation/#t
>> Fixes: c0e301b2978d ("iommufd/device: Add pasid_attach array to track per-PASID attach")
>> Signed-off-by: Yi Liu <yi.l.liu@intel.com>
>> ---
>> drivers/iommu/iommufd/device.c | 7 +++++++
>> tools/testing/selftests/iommu/iommufd.c | 6 ++++++
>> 2 files changed, 13 insertions(+)
>>
>> diff --git a/drivers/iommu/iommufd/device.c b/drivers/iommu/iommufd/device.c
>> index 2307daad65c0..375dd262f431 100644
>> --- a/drivers/iommu/iommufd/device.c
>> +++ b/drivers/iommu/iommufd/device.c
>> @@ -644,6 +644,11 @@ iommufd_hw_pagetable_detach(struct iommufd_device *idev, ioasid_t pasid)
>>
>> mutex_lock(&igroup->lock);
>> attach = xa_load(&igroup->pasid_attach, pasid);
>> + if (WARN_ON(!attach)) {
>> + mutex_unlock(&igroup->lock);
>> + return NULL;
>> + }
>
> We can't trigger a WARN_ON during the test suite!
>
> # RUN iommufd_device_pasid.no_pasid.pasid_attach ...
> [ 23.723948] iommufd_mock iommufd_mock0: Adding to iommu group 0
> [ 23.724532] iommufd_mock iommufd_mock1: Adding to iommu group 1
> [ 23.724722] ------------[ cut here ]------------
> [ 23.725194] WARNING: CPU: 5 PID: 1169 at drivers/iommu/iommufd/device.c:647 iommufd_hw_pagetable_detach+0x1e7/0x230 [iommufd]
> [ 23.725350] Modules linked in: iommufd
> [ 23.725406] CPU: 5 UID: 0 PID: 1169 Comm: iommufd Not tainted 6.14.0-rc2+ #1
>
> Just drop the WARN_ON check right?
>
> I took it like that, please let me know
looks good to me. thanks.
--
Regards,
Yi Liu
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2025-03-31 2:19 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-03-28 13:34 [PATCH] iommufd: Test attach before detaching pasid Yi Liu
2025-03-28 14:40 ` Jason Gunthorpe
2025-03-31 2:24 ` Yi Liu
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.