summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJiri Pirko <jiri@nvidia.com>2026-05-17 17:13:11 +0300
committerJason Gunthorpe <jgg@nvidia.com>2026-05-30 02:27:29 +0300
commit3b6384dac14a306fd3d8e4357b5191a6f2b7f52e (patch)
tree029847d0974ce69c9e39bc3bb01970e77c17174b
parentd7a40b519497fbee5644be4bd823b8d710bb8d55 (diff)
downloadlinux-3b6384dac14a306fd3d8e4357b5191a6f2b7f52e.tar.xz
RDMA/umem: Block plain userspace memory registration under CoCo bounce
When a device requires DMA bounce buffering inside a Confidential Computing guest, __ib_umem_get_va() cannot work. The DMA mapping layer redirects all mappings through swiotlb bounce buffers, so the device receives DMA addresses pointing to bounce buffer memory rather than the user's pages. Since RDMA devices access registered memory directly without CPU involvement, there is no opportunity for swiotlb to synchronize between the bounce buffer and the original pages. The registration would already fail later on, since the umem mapping is requested with DMA_ATTR_REQUIRE_COHERENT and gets rejected under is_swiotlb_force_bounce() with -EIO. Fail early with -EOPNOTSUPP instead, so the user gets a specific error code to react to. Link: https://patch.msgid.link/r/20260517141311.2409230-3-jiri@resnulli.us Signed-off-by: Jiri Pirko <jiri@nvidia.com> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
-rw-r--r--drivers/infiniband/core/umem.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/infiniband/core/umem.c b/drivers/infiniband/core/umem.c
index 89311fe65619..e424a9de66c1 100644
--- a/drivers/infiniband/core/umem.c
+++ b/drivers/infiniband/core/umem.c
@@ -167,6 +167,9 @@ static struct ib_umem *__ib_umem_get_va(struct ib_device *device,
int pinned, ret;
unsigned int gup_flags = FOLL_LONGTERM;
+ if (device->cc_dma_bounce)
+ return ERR_PTR(-EOPNOTSUPP);
+
/*
* If the combination of the addr and size requested for this memory
* region causes an integer overflow, return error.