From db85cf0d08a318444b4c28a0fc5fcb125e679a11 Mon Sep 17 00:00:00 2001 From: Stefano Stabellini Date: Tue, 20 Oct 2026 15:08:21 -0700 Subject: [PATCH] xen/amd/iommu: Don't swap the IVMD read and write permissions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Per the IVMD Flags definition, bit 1 is IR and bit 2 is IW, matching ACPI_IVMD_READ and ACPI_IVMD_WRITE. parse_ivmd_block() takes iw from the former and ir from the latter, so a unity range firmware declares read-only is mapped write-only, and vice versa. Ranges with both permissions, including Xen's own, are unaffected. Fixes: e941abd7cab1 ("ACPI: eliminate duplicate IVRS definitions") Signed-off-by: Stefano Stabellini Reviewed-by: Teddy Astie Acked-by: Roger Pau Monné --- xen/drivers/passthrough/amd/iommu_acpi.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xen/drivers/passthrough/amd/iommu_acpi.c b/xen/drivers/passthrough/amd/iommu_acpi.c index 39ae637959..d118b36d80 100644 --- a/xen/drivers/passthrough/amd/iommu_acpi.c +++ b/xen/drivers/passthrough/amd/iommu_acpi.c @@ -414,8 +414,8 @@ static int __init parse_ivmd_block(const struct acpi_ivrs_memory *ivmd_block) exclusion = true; else if ( ivmd_block->header.flags & ACPI_IVMD_UNITY ) { - iw = ivmd_block->header.flags & ACPI_IVMD_READ; - ir = ivmd_block->header.flags & ACPI_IVMD_WRITE; + iw = ivmd_block->header.flags & ACPI_IVMD_WRITE; + ir = ivmd_block->header.flags & ACPI_IVMD_READ; } else {