CVE-2023-46835

x86/AMD: mismatch in IOMMU quarantine page table levels

Medium · published January 5, 2024

CVSS v3.1
5.5
EPSS
0%
Percentile
19.8
In the wild
Unconfirmed
What it is

The current setup of the quarantine page tables assumes that the

quarantine domain (dom_io) has been initialized with an address width

of DEFAULT_DOMAIN_ADDRESS_WIDTH (48) and hence 4 page table levels.

However dom_io being a PV domain gets the AMD-Vi IOMMU page tables

levels based on the maximum (hot pluggable) RAM address, and hence on

systems with no RAM above the 512GB mark only 3 page-table levels are

configured in the IOMMU.

On systems without RAM above the 512GB boundary

amd_iommu_quarantine_init() will setup page tables for the scratch

page with 4 levels, while the IOMMU will be configured to use 3 levels

only, resulting in the last page table directory (PDE) effectively

becoming a page table entry (PTE), and hence a device in quarantine

mode gaining write access to the page destined to be a PDE.

Due to this page table level mismatch, the sink page the device gets

read/write access to is no longer cleared between device assignment,

possibly leading to data leaks.

The record
Technical detail
CVSS v3.1
5.5 · MEDIUM
Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
CVSS v4.0
Not supplied
EPSS
0.00284 · 19.8th percentile
Published
2024-01-05T16:34Z
EPSS history
Timeline
  • 05 JAN 16:34Z
    x86/AMD: mismatch in IOMMU quarantine page table levels
    cvelistv5