* [PATCH 0/1] [PULL REQUEST] iommu/vt-d: Fixes for v6.17-rc
@ 2025-09-03 5:53 Lu Baolu
2025-09-03 5:53 ` [PATCH 1/1] iommu/vt-d: Fix __domain_mapping()'s usage of switch_to_super_page() Lu Baolu
2025-09-05 13:00 ` [PATCH 0/1] [PULL REQUEST] iommu/vt-d: Fixes for v6.17-rc Joerg Roedel
0 siblings, 2 replies; 3+ messages in thread
From: Lu Baolu @ 2025-09-03 5:53 UTC (permalink / raw)
To: Joerg Roedel; +Cc: Eugene Koira, iommu, linux-kernel
Hi Joerg,
The following fix has been queued for v6.17-rc:
- Fix __domain_mapping()'s usage of switch_to_super_page()
It fixes a bug in __domain_mapping() where valid PTEs that are beyond
the affected huge page range might be zeroed out. The patch has been
reviewed and tested and is ready for merge. Please consider it for
v6.17-rc.
Best regards,
baolu
Eugene Koira (1):
iommu/vt-d: Fix __domain_mapping()'s usage of switch_to_super_page()
drivers/iommu/intel/iommu.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
--
2.43.0
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH 1/1] iommu/vt-d: Fix __domain_mapping()'s usage of switch_to_super_page()
2025-09-03 5:53 [PATCH 0/1] [PULL REQUEST] iommu/vt-d: Fixes for v6.17-rc Lu Baolu
@ 2025-09-03 5:53 ` Lu Baolu
2025-09-05 13:00 ` [PATCH 0/1] [PULL REQUEST] iommu/vt-d: Fixes for v6.17-rc Joerg Roedel
1 sibling, 0 replies; 3+ messages in thread
From: Lu Baolu @ 2025-09-03 5:53 UTC (permalink / raw)
To: Joerg Roedel; +Cc: Eugene Koira, iommu, linux-kernel
From: Eugene Koira <eugkoira@amazon.com>
switch_to_super_page() assumes the memory range it's working on is aligned
to the target large page level. Unfortunately, __domain_mapping() doesn't
take this into account when using it, and will pass unaligned ranges
ultimately freeing a PTE range larger than expected.
Take for example a mapping with the following iov_pfn range [0x3fe400,
0x4c0600), which should be backed by the following mappings:
iov_pfn [0x3fe400, 0x3fffff] covered by 2MiB pages
iov_pfn [0x400000, 0x4bffff] covered by 1GiB pages
iov_pfn [0x4c0000, 0x4c05ff] covered by 2MiB pages
Under this circumstance, __domain_mapping() will pass [0x400000, 0x4c05ff]
to switch_to_super_page() at a 1 GiB granularity, which will in turn
free PTEs all the way to iov_pfn 0x4fffff.
Mitigate this by rounding down the iov_pfn range passed to
switch_to_super_page() in __domain_mapping()
to the target large page level.
Additionally add range alignment checks to switch_to_super_page.
Fixes: 9906b9352a35 ("iommu/vt-d: Avoid duplicate removing in __domain_mapping()")
Signed-off-by: Eugene Koira <eugkoira@amazon.com>
Cc: stable@vger.kernel.org
Reviewed-by: Nicolas Saenz Julienne <nsaenz@amazon.com>
Reviewed-by: David Woodhouse <dwmw@amazon.co.uk>
Link: https://lore.kernel.org/r/20250826143816.38686-1-eugkoira@amazon.com
Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
---
drivers/iommu/intel/iommu.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c
index 9c3ab9d9f69a..dff2d895b8ab 100644
--- a/drivers/iommu/intel/iommu.c
+++ b/drivers/iommu/intel/iommu.c
@@ -1575,6 +1575,10 @@ static void switch_to_super_page(struct dmar_domain *domain,
unsigned long lvl_pages = lvl_to_nr_pages(level);
struct dma_pte *pte = NULL;
+ if (WARN_ON(!IS_ALIGNED(start_pfn, lvl_pages) ||
+ !IS_ALIGNED(end_pfn + 1, lvl_pages)))
+ return;
+
while (start_pfn <= end_pfn) {
if (!pte)
pte = pfn_to_dma_pte(domain, start_pfn, &level,
@@ -1650,7 +1654,8 @@ __domain_mapping(struct dmar_domain *domain, unsigned long iov_pfn,
unsigned long pages_to_remove;
pteval |= DMA_PTE_LARGE_PAGE;
- pages_to_remove = min_t(unsigned long, nr_pages,
+ pages_to_remove = min_t(unsigned long,
+ round_down(nr_pages, lvl_pages),
nr_pte_to_next_page(pte) * lvl_pages);
end_pfn = iov_pfn + pages_to_remove - 1;
switch_to_super_page(domain, iov_pfn, end_pfn, largepage_lvl);
--
2.43.0
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH 0/1] [PULL REQUEST] iommu/vt-d: Fixes for v6.17-rc
2025-09-03 5:53 [PATCH 0/1] [PULL REQUEST] iommu/vt-d: Fixes for v6.17-rc Lu Baolu
2025-09-03 5:53 ` [PATCH 1/1] iommu/vt-d: Fix __domain_mapping()'s usage of switch_to_super_page() Lu Baolu
@ 2025-09-05 13:00 ` Joerg Roedel
1 sibling, 0 replies; 3+ messages in thread
From: Joerg Roedel @ 2025-09-05 13:00 UTC (permalink / raw)
To: Lu Baolu; +Cc: Eugene Koira, iommu, linux-kernel
On Wed, Sep 03, 2025 at 01:53:28PM +0800, Lu Baolu wrote:
> Hi Joerg,
>
> The following fix has been queued for v6.17-rc:
>
> - Fix __domain_mapping()'s usage of switch_to_super_page()
>
> It fixes a bug in __domain_mapping() where valid PTEs that are beyond
> the affected huge page range might be zeroed out. The patch has been
> reviewed and tested and is ready for merge. Please consider it for
> v6.17-rc.
>
> Best regards,
> baolu
>
> Eugene Koira (1):
> iommu/vt-d: Fix __domain_mapping()'s usage of switch_to_super_page()
Applied for -rc, thanks.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2025-09-05 13:01 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-09-03 5:53 [PATCH 0/1] [PULL REQUEST] iommu/vt-d: Fixes for v6.17-rc Lu Baolu
2025-09-03 5:53 ` [PATCH 1/1] iommu/vt-d: Fix __domain_mapping()'s usage of switch_to_super_page() Lu Baolu
2025-09-05 13:00 ` [PATCH 0/1] [PULL REQUEST] iommu/vt-d: Fixes for v6.17-rc Joerg Roedel
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).