]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/amd/ras: fix memory leak on ras sw_init failure
authorYiPeng Chai <YiPeng.Chai@amd.com>
Tue, 12 May 2026 03:00:14 +0000 (11:00 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 19 May 2026 15:53:11 +0000 (11:53 -0400)
Fix memory leak on ras sw_init failure.

Signed-off-by: YiPeng Chai <YiPeng.Chai@amd.com>
Reviewed-by: Tao Zhou <tao.zhou1@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/ras/ras_mgr/amdgpu_ras_mgr.c

index c12e756b4ef067dcad934b4fc8707be00bfc1308..a22d1aebbeb9482b72c3454d2cfa9f6bf672734a 100644 (file)
@@ -309,13 +309,17 @@ static int amdgpu_ras_mgr_sw_init(struct amdgpu_ip_block *ip_block)
        if (!ras_mgr->ras_core) {
                RAS_DEV_ERR(adev, "Failed to create ras core!\n");
                ret = -EINVAL;
-               goto err;
+               goto err1;
        }
 
        ras_mgr->ras_core->dev = adev;
 
        amdgpu_ras_process_init(adev);
-       ras_core_sw_init(ras_mgr->ras_core);
+       ret = ras_core_sw_init(ras_mgr->ras_core);
+       if (ret) {
+               RAS_DEV_ERR(adev, "ras_core_sw_init failed! ret:%d\n", ret);
+               goto err2;
+       }
        amdgpu_ras_mgr_init_event_mgr(ras_mgr->ras_core);
 
        if (amdgpu_sriov_vf(adev)) {
@@ -323,14 +327,22 @@ static int amdgpu_ras_mgr_sw_init(struct amdgpu_ip_block *ip_block)
                if (ret) {
                        RAS_DEV_ERR(adev,
                                "Virt ras sw_init failed! ret:%d\n", ret);
-                       goto err;
+                       goto err3;
                }
        }
 
        return 0;
 
-err:
+err3:
+       if (ras_mgr->ras_core)
+               ras_core_sw_fini(ras_mgr->ras_core);
+err2:
+       amdgpu_ras_process_fini(adev);
+       if (ras_mgr->ras_core)
+               ras_core_destroy(ras_mgr->ras_core);
+err1:
        kfree(ras_mgr);
+       con->ras_mgr = NULL;
        return ret;
 }