[PATCH v5 06/10] swiotlb: Reject misaligned restricted DMA pools for CoCo guests
Aneesh Kumar K.V (Arm)
aneesh.kumar at kernel.org
Sun Jul 5 23:04:28 PDT 2026
Restricted DMA pools are described by firmware reserved-memory nodes and
are not resized or realigned by the kernel. For confidential-computing
guests, such pools can only be shared safely when both the base address and
size are aligned to the shared-granule size.
Reject restricted DMA pools that are not aligned to
mem_cc_shared_granule_size() when guest memory encryption is active.
Signed-off-by: Aneesh Kumar K.V (Arm) <aneesh.kumar at kernel.org>
---
kernel/dma/swiotlb.c | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/kernel/dma/swiotlb.c b/kernel/dma/swiotlb.c
index 1d77746b6f31..ad8a1ccf3977 100644
--- a/kernel/dma/swiotlb.c
+++ b/kernel/dma/swiotlb.c
@@ -2002,6 +2002,20 @@ static int rmem_swiotlb_device_init(struct reserved_mem *rmem,
* if platform supports memory encryption,
* restricted mem pool is shared by default
*/
+ if (cc_platform_has(CC_ATTR_GUEST_MEM_ENCRYPT)) {
+ size_t cc_shared_granule_size = mem_cc_shared_granule_size();
+
+ if (!IS_ALIGNED(rmem->base, cc_shared_granule_size) ||
+ !IS_ALIGNED(rmem->size, cc_shared_granule_size)) {
+ dev_err(dev, "Restricted DMA pool must be aligned to %#zx bytes for memory encryption\n",
+ cc_shared_granule_size);
+ kfree(pool->areas);
+ kfree(pool->slots);
+ kfree(mem);
+ return -EINVAL;
+ }
+ }
+
if (cc_platform_has(CC_ATTR_MEM_ENCRYPT)) {
int ret;
--
2.43.0
More information about the linux-arm-kernel
mailing list