]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
iommufd/selftest: Remove MOCK_IOMMUPT_AMDV1 format
authorPranjal Shrivastava <praan@google.com>
Mon, 30 Mar 2026 09:26:09 +0000 (09:26 +0000)
committerJason Gunthorpe <jgg@nvidia.com>
Tue, 31 Mar 2026 16:13:08 +0000 (13:13 -0300)
syzbot found that allocating a mock domain with AMDV1 format could
cause a WARN_ON because the selftest enabled DYNAMIC_TOP without
providing the required driver_ops.

The AMDV1 format in the selftest was a placeholder and was not actually
used by any of the existing selftests. Instead of adding dummy
driver_ops to satisfy the requirements of a format we don't currently
test, remove the AMDV1 format option from the selftest.

The MOCK_IOMMUPT_DEFAULT and MOCK_IOMMUPT_HUGE formats are unaffected as
they use the amdv1_mock variant which does not enable DYNAMIC_TOP.

Fixes: dcd6a011a8d5 ("iommupt: Add map_pages op")
Link: https://patch.msgid.link/r/20260330092609.2659235-1-praan@google.com
Reported-by: syzbot+453eb7add07c3767adab@syzkaller.appspotmail.com
Closes: https://lore.kernel.org/all/69c1d50b.a70a0220.3cae05.0001.GAE@google.com/
Signed-off-by: Pranjal Shrivastava <praan@google.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
drivers/iommu/iommufd/iommufd_test.h
drivers/iommu/iommufd/selftest.c

index 73e73e1ec1583706990562eed2e2fb8ce1f5dae2..52b78cbcc920dd8ffc269eebc2085b71ca8c61d2 100644 (file)
@@ -36,7 +36,6 @@ enum {
 enum {
        MOCK_IOMMUPT_DEFAULT = 0,
        MOCK_IOMMUPT_HUGE,
-       MOCK_IOMMUPT_AMDV1,
 };
 
 /* These values are true for MOCK_IOMMUPT_DEFAULT */
index 83e2215e7800d05b75902fe98acdb7ee614ca18f..2a7f037060ca8c6231ba1a390fcf87f2b0543d77 100644 (file)
@@ -421,19 +421,6 @@ static const struct iommu_dirty_ops amdv1_mock_dirty_ops = {
        .set_dirty_tracking = mock_domain_set_dirty_tracking,
 };
 
-static const struct iommu_domain_ops amdv1_ops = {
-       IOMMU_PT_DOMAIN_OPS(amdv1),
-       .free = mock_domain_free,
-       .attach_dev = mock_domain_nop_attach,
-       .set_dev_pasid = mock_domain_set_dev_pasid_nop,
-       .iotlb_sync = &mock_iotlb_sync,
-};
-
-static const struct iommu_dirty_ops amdv1_dirty_ops = {
-       IOMMU_PT_DIRTY_OPS(amdv1),
-       .set_dirty_tracking = mock_domain_set_dirty_tracking,
-};
-
 static struct mock_iommu_domain *
 mock_domain_alloc_pgtable(struct device *dev,
                          const struct iommu_hwpt_selftest *user_cfg, u32 flags)
@@ -477,24 +464,6 @@ mock_domain_alloc_pgtable(struct device *dev,
                        mock->domain.dirty_ops = &amdv1_mock_dirty_ops;
                break;
        }
-
-       case MOCK_IOMMUPT_AMDV1: {
-               struct pt_iommu_amdv1_cfg cfg = {};
-
-               cfg.common.hw_max_vasz_lg2 = 64;
-               cfg.common.hw_max_oasz_lg2 = 52;
-               cfg.common.features = BIT(PT_FEAT_DYNAMIC_TOP) |
-                                     BIT(PT_FEAT_AMDV1_ENCRYPT_TABLES) |
-                                     BIT(PT_FEAT_AMDV1_FORCE_COHERENCE);
-               cfg.starting_level = 2;
-               mock->domain.ops = &amdv1_ops;
-               rc = pt_iommu_amdv1_init(&mock->amdv1, &cfg, GFP_KERNEL);
-               if (rc)
-                       goto err_free;
-               if (flags & IOMMU_HWPT_ALLOC_DIRTY_TRACKING)
-                       mock->domain.dirty_ops = &amdv1_dirty_ops;
-               break;
-       }
        default:
                rc = -EOPNOTSUPP;
                goto err_free;