[PATCH] dma-direct: fix type mismatch in dma_direct_alloc_pages

From: yangge1116

Date: Fri Aug 14 2026 - 02:33:05 EST


From: Ge Yang <yangge1116@xxxxxxx>

The pool allocation path directly returned the void* cpu virtual
address from dma_direct_alloc_from_pool(), which is type‑mismatched
against struct page *. Convert the dma_handle to page via
dma_direct_to_page() instead.

Fixes: 5b138c534fda ("dma-direct: factor out a dma_direct_alloc_from_pool helper")
Signed-off-by: Ge Yang <yangge1116@xxxxxxx>
Cc: stable@xxxxxxxxxxxxxxx
---
kernel/dma/direct.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/kernel/dma/direct.c b/kernel/dma/direct.c
index 4391b79..f496568 100644
--- a/kernel/dma/direct.c
+++ b/kernel/dma/direct.c
@@ -356,8 +356,12 @@ struct page *dma_direct_alloc_pages(struct device *dev, size_t size,
struct page *page;
void *ret;

- if (force_dma_unencrypted(dev) && dma_direct_use_pool(dev, gfp))
- return dma_direct_alloc_from_pool(dev, size, dma_handle, gfp);
+ if (force_dma_unencrypted(dev) && dma_direct_use_pool(dev, gfp)) {
+ ret = dma_direct_alloc_from_pool(dev, size, dma_handle, gfp);
+ if (!ret)
+ return NULL;
+ return dma_direct_to_page(dev, *dma_handle);
+ }

page = __dma_direct_alloc_pages(dev, size, gfp, false);
if (!page)
--
2.7.4