* [PATCH v2] drm/amdgpu: unmap GART dma pages before free
@ 2026-09-24 15:36 Michail Tatas
0 siblings, 0 replies; only message in thread
From: Michail Tatas @ 2026-09-24 15:36 UTC (permalink / raw)
To: alexander.deucher, christian.koenig, airlied, simona
Cc: amd-gfx, dri-devel, linux-kernel
amdgpu_gart_table_ram_alloc() maps the GART dma pages
and neither the error path nor amdgpu_gart_table_ram_free()
unmaps those pages before freeing them, which could leave
the device writing to freed memory.
Fix by unmapping the GART dma pages before freeing them.
Signed-off-by: Michail Tatas <michail.tatas@gmail.com>
---
Changes in v2:
- Fixed a null dereference possibility based on review
from sashiko
Revisions:
- v1: https://lore.kernel.org/all/arKhDFCSoPDNYaxX@michalis-linux/
drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
index c4c21dbbbdbf..116c646b86a8 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
@@ -209,6 +209,8 @@ int amdgpu_gart_table_ram_alloc(struct amdgpu_device *adev)
error_resv:
amdgpu_bo_unreserve(bo);
error:
+ dma_unmap_page(&adev->pdev->dev, dma_addr, adev->gart.table_size,
+ DMA_BIDIRECTIONAL);
amdgpu_bo_unref(&bo);
if (sg) {
sg_free_table(sg);
@@ -240,6 +242,8 @@ void amdgpu_gart_table_ram_free(struct amdgpu_device *adev)
amdgpu_bo_unreserve(adev->gart.bo);
}
amdgpu_bo_unref(&adev->gart.bo);
+ dma_unmap_page(&adev->pdev->dev, sg_dma_address(sg->sgl), adev->gart.table_size,
+ DMA_BIDIRECTIONAL);
sg_free_table(sg);
kfree(sg);
p = virt_to_page(adev->gart.ptr);
--
2.43.0
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2026-09-25 7:39 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-24 15:36 [PATCH v2] drm/amdgpu: unmap GART dma pages before free Michail Tatas
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.