linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] drm/amdgpu: fix multiple memory leaks
@ 2019-09-18 16:09 Navid Emamdoost
  2019-09-18 17:31 ` Koenig, Christian
  0 siblings, 1 reply; 16+ messages in thread
From: Navid Emamdoost @ 2019-09-18 16:09 UTC (permalink / raw)
  Cc: emamd001, smccaman, kjlu, Navid Emamdoost, Alex Deucher,
	Christian König, David (ChunMing) Zhou, David Airlie,
	Daniel Vetter, Rex Zhu, Sam Ravnborg, amd-gfx, dri-devel,
	linux-kernel

In acp_hw_init there are some allocations that needs to be released in
case of failure:

1- adev->acp.acp_genpd should be released if any allocation attemp for
adev->acp.acp_cell, adev->acp.acp_res or i2s_pdata fails.
2- all of those allocations should be released if pm_genpd_add_device
fails.

Signed-off-by: Navid Emamdoost <navid.emamdoost@gmail.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_acp.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_acp.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_acp.c
index eba42c752bca..dd3fa85b11c5 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_acp.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_acp.c
@@ -231,17 +231,21 @@ static int acp_hw_init(void *handle)
 	adev->acp.acp_cell = kcalloc(ACP_DEVS, sizeof(struct mfd_cell),
 							GFP_KERNEL);
 
-	if (adev->acp.acp_cell == NULL)
+	if (adev->acp.acp_cell == NULL) {
+		kfree(adev->acp.acp_genpd);
 		return -ENOMEM;
+	}
 
 	adev->acp.acp_res = kcalloc(5, sizeof(struct resource), GFP_KERNEL);
 	if (adev->acp.acp_res == NULL) {
+		kfree(adev->acp.acp_genpd);
 		kfree(adev->acp.acp_cell);
 		return -ENOMEM;
 	}
 
 	i2s_pdata = kcalloc(3, sizeof(struct i2s_platform_data), GFP_KERNEL);
 	if (i2s_pdata == NULL) {
+		kfree(adev->acp.acp_genpd);
 		kfree(adev->acp.acp_res);
 		kfree(adev->acp.acp_cell);
 		return -ENOMEM;
@@ -348,6 +352,10 @@ static int acp_hw_init(void *handle)
 		r = pm_genpd_add_device(&adev->acp.acp_genpd->gpd, dev);
 		if (r) {
 			dev_err(dev, "Failed to add dev to genpd\n");
+			kfree(adev->acp.acp_genpd);
+			kfree(adev->acp.acp_res);
+			kfree(adev->acp.acp_cell);
+			kfree(i2s_pdata);
 			return r;
 		}
 	}
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2019-10-02  6:58 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-09-18 16:09 [PATCH] drm/amdgpu: fix multiple memory leaks Navid Emamdoost
2019-09-18 17:31 ` Koenig, Christian
2019-09-18 19:05   ` [PATCH v2] " Navid Emamdoost
2019-09-18 19:45     ` Sven Van Asbroeck
2019-09-19  8:03     ` Koenig, Christian
2019-09-19 14:28       ` Sven Van Asbroeck
2019-09-19 16:48         ` Koenig, Christian
2019-09-30 21:26       ` [PATCH v3] drm/amdgpu: fix multiple memory leaks in acp_hw_init Navid Emamdoost
2019-10-01 11:24         ` Markus Elfring
2019-10-01 12:19         ` Koenig, Christian
2019-10-02  3:46           ` [PATCH v4] " Navid Emamdoost
2019-10-02  5:47             ` Markus Elfring
2019-10-02  6:58             ` Koenig, Christian
2019-10-02  3:47           ` [PATCH v3] " Navid Emamdoost
2019-09-30 21:31       ` [PATCH v2] drm/amdgpu: fix multiple memory leaks Navid Emamdoost
2019-09-27 16:37     ` Markus Elfring

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).