mirror of
https://github.com/torvalds/linux.git
synced 2025-12-07 20:06:24 +00:00
drm/panthor: Fix potential memleak of vma structure
This commit addresses a memleak issue of panthor_vma (or drm_gpuva)
structure in Panthor driver, that can happen if the GPU page table
update operation to map the pages fail.
The issue is very unlikely to occur in practice.
v2: Add panthor_vm_op_ctx_return_vma() helper (Boris)
v3: Add WARN_ON_ONCE (Boris)
Fixes: 647810ec24 ("drm/panthor: Add the MMU/VM logical block")
Signed-off-by: Akash Goel <akash.goel@arm.com>
Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
Reviewed-by: Steven Price <steven.price@arm.com>
Signed-off-by: Steven Price <steven.price@arm.com>
Link: https://patch.msgid.link/20251021081042.1377406-1-akash.goel@arm.com
This commit is contained in:
@@ -1147,6 +1147,20 @@ static void panthor_vm_cleanup_op_ctx(struct panthor_vm_op_ctx *op_ctx,
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
panthor_vm_op_ctx_return_vma(struct panthor_vm_op_ctx *op_ctx,
|
||||
struct panthor_vma *vma)
|
||||
{
|
||||
for (u32 i = 0; i < ARRAY_SIZE(op_ctx->preallocated_vmas); i++) {
|
||||
if (!op_ctx->preallocated_vmas[i]) {
|
||||
op_ctx->preallocated_vmas[i] = vma;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
WARN_ON_ONCE(1);
|
||||
}
|
||||
|
||||
static struct panthor_vma *
|
||||
panthor_vm_op_ctx_get_vma(struct panthor_vm_op_ctx *op_ctx)
|
||||
{
|
||||
@@ -2082,8 +2096,10 @@ static int panthor_gpuva_sm_step_map(struct drm_gpuva_op *op, void *priv)
|
||||
ret = panthor_vm_map_pages(vm, op->map.va.addr, flags_to_prot(vma->flags),
|
||||
op_ctx->map.sgt, op->map.gem.offset,
|
||||
op->map.va.range);
|
||||
if (ret)
|
||||
if (ret) {
|
||||
panthor_vm_op_ctx_return_vma(op_ctx, vma);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Ref owned by the mapping now, clear the obj field so we don't release the
|
||||
* pinning/obj ref behind GPUVA's back.
|
||||
|
||||
Reference in New Issue
Block a user