summaryrefslogtreecommitdiff
path: root/include/uapi
diff options
context:
space:
mode:
authorLu Baolu <baolu.lu@linux.intel.com>2026-01-22 09:48:56 +0800
committerJoerg Roedel <joerg.roedel@amd.com>2026-01-22 09:20:30 +0100
commitc3b1edea3791fa91ab7032faa90355913ad9451b (patch)
tree43dc1f4842bea0314e7ad7b4e49526f8a92bdcae /include/uapi
parentc1e4f1dccbe9d7656d1c6872ebeadb5992d0aaa2 (diff)
iommu/vt-d: Fix race condition during PASID entry replacement
The Intel VT-d PASID table entry is 512 bits (64 bytes). When replacing an active PASID entry (e.g., during domain replacement), the current implementation calculates a new entry on the stack and copies it to the table using a single structure assignment. struct pasid_entry *pte, new_pte; pte = intel_pasid_get_entry(dev, pasid); pasid_pte_config_first_level(iommu, &new_pte, ...); *pte = new_pte; Because the hardware may fetch the 512-bit PASID entry in multiple 128-bit chunks, updating the entire entry while it is active (Present bit set) risks a "torn" read. In this scenario, the IOMMU hardware could observe an inconsistent state — partially new data and partially old data — leading to unpredictable behavior or spurious faults. Fix this by removing the unsafe "replace" helpers and following the "clear-then-update" flow, which ensures the Present bit is cleared and the required invalidation handshake is completed before the new configuration is applied. Fixes: 7543ee63e811 ("iommu/vt-d: Add pasid replace helpers") Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com> Reviewed-by: Samiullah Khawaja <skhawaja@google.com> Reviewed-by: Kevin Tian <kevin.tian@intel.com> Link: https://lore.kernel.org/r/20260120061816.2132558-4-baolu.lu@linux.intel.com Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
Diffstat (limited to 'include/uapi')
0 files changed, 0 insertions, 0 deletions