]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
accel/amdxdna: fix open_ref leak and stale client pointer on dma map failure
authorLizhi Hou <lizhi.hou@amd.com>
Tue, 7 Jul 2026 05:56:58 +0000 (22:56 -0700)
committerLizhi Hou <lizhi.hou@amd.com>
Tue, 7 Jul 2026 17:04:34 +0000 (10:04 -0700)
amdxdna_gem_obj_open() increments open_ref before attempting to set up
the DMA address mapping.  When amdxdna_dma_map_bo() fails, the function
returned immediately without rolling back either change made on the first
open (open_ref == 1 path).

Fix it by decrementing open_ref and clearing abo->client on the error path.

Fixes: ece3e8980907 ("accel/amdxdna: Allow forcing IOVA-based DMA via module parameter")
Reviewed-by: Max Zhen <max.zhen@amd.com>
Signed-off-by: Lizhi Hou <lizhi.hou@amd.com>
Link: https://patch.msgid.link/20260707055658.479049-1-lizhi.hou@amd.com
drivers/accel/amdxdna/amdxdna_gem.c

index 0c10ec0cc5e48c8cd5b52714a8a850c92ea398f9..1275f91ca7050866afa514a418c6427c3c95c9da 100644 (file)
@@ -664,8 +664,11 @@ static int amdxdna_gem_obj_open(struct drm_gem_object *gobj, struct drm_file *fi
        /* No need to set up dma addr mapping in PASID mode. */
        if (!amdxdna_pasid_on(abo->client)) {
                ret = amdxdna_dma_map_bo(xdna, abo);
-               if (ret)
+               if (ret) {
+                       abo->open_ref--;
+                       abo->client = NULL;
                        return ret;
+               }
        }
 
        amdxdna_gem_add_bo_usage(abo);