Message ID | 20250227144150.1667735-2-suzuki.poulose@arm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | arm64: realm: Fix DMA address for devices | expand |
On 2/28/25 12:41 AM, Suzuki K Poulose wrote: > phys_to_dma() sets the encryption bit on the translated DMA address. But > dma_to_phys() clears the encryption bit after it has been translated back > to the physical address, which could fail if the device uses DMA ranges. > > AMD SME doesn't use the DMA ranges and thus this is harmless. But as we > are about to add support for other architectures, let us fix this. > > Reported-by: Aneesh Kumar K.V <aneesh.kumar@kernel.org> > Link: https://lkml.kernel.org/r/yq5amsen9stc.fsf@kernel.org > Cc: Will Deacon <will@kernel.org> > Cc: Jean-Philippe Brucker <jean-philippe@linaro.org> > Cc: Catalin Marinas <catalin.marinas@arm.com> > Cc: Robin Murphy <robin.murphy@arm.com> > Cc: Steven Price <steven.price@arm.com> > Cc: Christoph Hellwig <hch@lst.de> > Cc: Marek Szyprowski <m.szyprowski@samsung.com> > Cc: Tom Lendacky <thomas.lendacky@amd.com> > Reviewed-by: Robin Murphy <robin.murphy@arm.com> > Acked-by: Tom Lendacky <thomas.lendacky@amd.com> > Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com> > --- > include/linux/dma-direct.h | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > Reviewed-by: Gavin Shan <gshan@redhat.com>
diff --git a/include/linux/dma-direct.h b/include/linux/dma-direct.h index d7e30d4f7503..d20ecc24cb0f 100644 --- a/include/linux/dma-direct.h +++ b/include/linux/dma-direct.h @@ -101,12 +101,13 @@ static inline phys_addr_t dma_to_phys(struct device *dev, dma_addr_t dma_addr) { phys_addr_t paddr; + dma_addr = __sme_clr(dma_addr); if (dev->dma_range_map) paddr = translate_dma_to_phys(dev, dma_addr); else paddr = dma_addr; - return __sme_clr(paddr); + return paddr; } #endif /* !CONFIG_ARCH_HAS_PHYS_TO_DMA */