]> xenbits.xensource.com Git - people/aperard/linux.git/commitdiff
drm/vmwgfx: fix a memleak in vmw_gmrid_man_get_node
authorZhipeng Lu <alexious@zju.edu.cn>
Mon, 4 Dec 2023 09:14:16 +0000 (17:14 +0800)
committerSasha Levin <sashal@kernel.org>
Tue, 26 Mar 2024 22:20:44 +0000 (18:20 -0400)
[ Upstream commit 89709105a6091948ffb6ec2427954cbfe45358ce ]

When ida_alloc_max fails, resources allocated before should be freed,
including *res allocated by kmalloc and ttm_resource_init.

Fixes: d3bcb4b02fe9 ("drm/vmwgfx: switch the TTM backends to self alloc")
Signed-off-by: Zhipeng Lu <alexious@zju.edu.cn>
Signed-off-by: Zack Rusin <zack.rusin@broadcom.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20231204091416.3308430-1-alexious@zju.edu.cn
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/gpu/drm/vmwgfx/vmwgfx_gmrid_manager.c

index 60e3cc537f36574e871b7febe0f164db8890338f..b9e5c8cd31001a72d0f7b7386cb6b4bc9062b345 100644 (file)
@@ -65,8 +65,11 @@ static int vmw_gmrid_man_get_node(struct ttm_resource_manager *man,
        ttm_resource_init(bo, place, *res);
 
        id = ida_alloc_max(&gman->gmr_ida, gman->max_gmr_ids - 1, GFP_KERNEL);
-       if (id < 0)
+       if (id < 0) {
+               ttm_resource_fini(man, *res);
+               kfree(*res);
                return id;
+       }
 
        spin_lock(&gman->lock);