Test that the cache invalidation ioctl rejects an oversized entry_len and
an oversized entry_num, covering the CPU soft-lockup paths the caps close.

Assisted-by: Claude:claude-opus-4-8
Signed-off-by: Nicolin Chen <[email protected]>
---
 tools/testing/selftests/iommu/iommufd.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/tools/testing/selftests/iommu/iommufd.c 
b/tools/testing/selftests/iommu/iommufd.c
index d1fe5dbc2813e..653aa251f8122 100644
--- a/tools/testing/selftests/iommu/iommufd.c
+++ b/tools/testing/selftests/iommu/iommufd.c
@@ -556,6 +556,21 @@ TEST_F(iommufd_ioas, alloc_hwpt_nested)
                                         1, &num_inv);
                assert(!num_inv);
 
+               /* Negative test: entry_len is bounded by PAGE_SIZE */
+               num_inv = 1;
+               test_err_hwpt_invalidate(EINVAL, nested_hwpt_id[0], inv_reqs,
+                                        IOMMU_HWPT_INVALIDATE_DATA_SELFTEST,
+                                        PAGE_SIZE + 1, &num_inv);
+               assert(!num_inv);
+
+               /* Negative test: entry_num is bounded */
+#define IOMMU_HWPT_INVALIDATE_ENTRY_NUM_MAX (1U << 19)
+               num_inv = IOMMU_HWPT_INVALIDATE_ENTRY_NUM_MAX + 1;
+               test_err_hwpt_invalidate(EINVAL, nested_hwpt_id[0], inv_reqs,
+                                        IOMMU_HWPT_INVALIDATE_DATA_SELFTEST,
+                                        sizeof(*inv_reqs), &num_inv);
+               assert(!num_inv);
+
                /* Negative test: invalid flag is passed */
                num_inv = 1;
                inv_reqs[0].flags = 0xffffffff;
-- 
2.43.0


Reply via email to