All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v4 0/8] Fix stale IOTLB entries for kernel address space
@ 2025-09-05  5:50 Lu Baolu
  2025-09-05  5:50 ` [PATCH v4 1/8] mm: Add a ptdesc flag to mark kernel page tables Lu Baolu
                   ` (7 more replies)
  0 siblings, 8 replies; 31+ messages in thread
From: Lu Baolu @ 2025-09-05  5:50 UTC (permalink / raw)
  To: Joerg Roedel, Will Deacon, Robin Murphy, Kevin Tian,
	Jason Gunthorpe, Jann Horn, Vasant Hegde, Dave Hansen,
	Alistair Popple, Peter Zijlstra, Uladzislau Rezki,
	Jean-Philippe Brucker, Andy Lutomirski, Yi Lai
  Cc: iommu, security, linux-kernel, Lu Baolu

This proposes a fix for a security vulnerability related to IOMMU Shared
Virtual Addressing (SVA). In an SVA context, an IOMMU can cache kernel
page table entries. When a kernel page table page is freed and
reallocated for another purpose, the IOMMU might still hold stale,
incorrect entries. This can be exploited to cause a use-after-free or
write-after-free condition, potentially leading to privilege escalation
or data corruption.

This solution introduces a deferred freeing mechanism for kernel page
table pages, which provides a safe window to notify the IOMMU to
invalidate its caches before the page is reused.

Change log:
v4:
 - Introduce a mechanism to defer the freeing of page-table pages for
   KVA mappings. Call iommu_sva_invalidate_kva_range() in the deferred
   work thread before freeing the pages.

v3:
 - https://lore.kernel.org/linux-iommu/20250806052505.3113108-1-baolu.lu@linux.intel.com/
 - iommu_sva_mms is an unbound list; iterating it in an atomic context
   could introduce significant latency issues. Schedule it in a kernel
   thread and replace the spinlock with a mutex.
 - Replace the static key with a normal bool; it can be brought back if
   data shows the benefit.
 - Invalidate KVA range in the flush_tlb_all() paths.
 - All previous reviewed-bys are preserved. Please let me know if there
   are any objections.

v2:
 - https://lore.kernel.org/linux-iommu/20250709062800.651521-1-baolu.lu@linux.intel.com/
 - Remove EXPORT_SYMBOL_GPL(iommu_sva_invalidate_kva_range);
 - Replace the mutex with a spinlock to make the interface usable in the
   critical regions.

v1: https://lore.kernel.org/linux-iommu/20250704133056.4023816-1-baolu.lu@linux.intel.com/

Dave Hansen (6):
  mm: Add a ptdesc flag to mark kernel page tables
  mm: Actually mark kernel page table pages
  x86/mm: Use 'ptdesc' when freeing PMD pages
  mm: Introduce pure page table freeing function
  mm: Introduce deferred freeing for kernel page tables
  mm: Hook up Kconfig options for async page table freeing

Lu Baolu (2):
  x86/mm: Use pagetable_free()
  iommu/sva: Invalidate stale IOTLB entries for kernel address space

 arch/x86/Kconfig              |  1 +
 arch/x86/mm/init_64.c         |  2 +-
 arch/x86/mm/pat/set_memory.c  |  2 +-
 arch/x86/mm/pgtable.c         | 12 ++++-----
 drivers/iommu/iommu-sva.c     | 29 +++++++++++++++++++-
 include/asm-generic/pgalloc.h | 18 +++++++++++++
 include/linux/iommu.h         |  4 +++
 include/linux/mm.h            | 24 ++++++++++++++---
 include/linux/page-flags.h    | 51 +++++++++++++++++++++++++++++++++++
 mm/Kconfig                    |  3 +++
 mm/pgtable-generic.c          | 41 ++++++++++++++++++++++++++++
 11 files changed, 175 insertions(+), 12 deletions(-)

-- 
2.43.0


^ permalink raw reply	[flat|nested] 31+ messages in thread

end of thread, other threads:[~2025-09-19  8:18 UTC | newest]

Thread overview: 31+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-09-05  5:50 [PATCH v4 0/8] Fix stale IOTLB entries for kernel address space Lu Baolu
2025-09-05  5:50 ` [PATCH v4 1/8] mm: Add a ptdesc flag to mark kernel page tables Lu Baolu
2025-09-05 18:24   ` Jason Gunthorpe
2025-09-12  7:58   ` Tian, Kevin
2025-09-05  5:50 ` [PATCH v4 2/8] mm: Actually mark kernel page table pages Lu Baolu
2025-09-05 18:24   ` Jason Gunthorpe
2025-09-12  7:59   ` Tian, Kevin
2025-09-05  5:50 ` [PATCH v4 3/8] x86/mm: Use 'ptdesc' when freeing PMD pages Lu Baolu
2025-09-05 18:25   ` Jason Gunthorpe
2025-09-12  8:03   ` Tian, Kevin
2025-09-05  5:50 ` [PATCH v4 4/8] mm: Introduce pure page table freeing function Lu Baolu
2025-09-05 18:31   ` Jason Gunthorpe
2025-09-12  8:04   ` Tian, Kevin
2025-09-05  5:51 ` [PATCH v4 5/8] x86/mm: Use pagetable_free() Lu Baolu
2025-09-05 18:41   ` Jason Gunthorpe
2025-09-05 19:22     ` Dave Hansen
2025-09-05 20:11     ` Dave Hansen
2025-09-05 23:04       ` Jason Gunthorpe
2025-09-19  5:31       ` Baolu Lu
2025-09-05  5:51 ` [PATCH v4 6/8] mm: Introduce deferred freeing for kernel page tables Lu Baolu
2025-09-05 18:43   ` Jason Gunthorpe
2025-09-05 19:26     ` Dave Hansen
2025-09-12  8:17     ` Tian, Kevin
2025-09-15 11:35       ` Jason Gunthorpe
2025-09-19  8:18         ` Tian, Kevin
2025-09-12  8:14   ` Tian, Kevin
2025-09-15  1:16     ` Baolu Lu
2025-09-05  5:51 ` [PATCH v4 7/8] mm: Hook up Kconfig options for async page table freeing Lu Baolu
2025-09-05 18:44   ` Jason Gunthorpe
2025-09-12  8:19   ` Tian, Kevin
2025-09-05  5:51 ` [PATCH v4 8/8] iommu/sva: Invalidate stale IOTLB entries for kernel address space Lu Baolu

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.