summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/os/linux/ioctl_tsg.c
diff options
context:
space:
mode:
authorPreetha Chandru R <pchandru@nvidia.com>2018-08-16 04:45:34 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2018-08-21 06:33:02 -0400
commitfec299954f0c22123d0dd5d67613bf9f633b5fa0 (patch)
treeeb2e4d302739bff0427a006930bfa0a85639b4c3 /drivers/gpu/nvgpu/os/linux/ioctl_tsg.c
parente486ff45d02ae1ee286a1bc100157487cc9b029b (diff)
gpu: nvgpu: fix memory leak in failure condition
This change frees tsg_private structure in nvgpu_ioctl_tsg_open() when gk20a_busy() fails and avoids a memory leak. Bug 2268533 JIRA NVGPU-1016 Change-Id: I0428cc40e042b881537f7cb597e5ebeaad815b32 Signed-off-by: Preetha Chandru R <pchandru@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1800955 Reviewed-by: Alex Waterman <alexw@nvidia.com> GVS: Gerrit_Virtual_Submit Reviewed-by: Seshendra Gadagottu <sgadagottu@nvidia.com> Reviewed-by: Vijayakumar Subbu <vsubbu@nvidia.com> Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/os/linux/ioctl_tsg.c')
-rw-r--r--drivers/gpu/nvgpu/os/linux/ioctl_tsg.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/drivers/gpu/nvgpu/os/linux/ioctl_tsg.c b/drivers/gpu/nvgpu/os/linux/ioctl_tsg.c
index 5d22d082..f7d20f34 100644
--- a/drivers/gpu/nvgpu/os/linux/ioctl_tsg.c
+++ b/drivers/gpu/nvgpu/os/linux/ioctl_tsg.c
@@ -402,15 +402,14 @@ int nvgpu_ioctl_tsg_open(struct gk20a *g, struct file *filp)
402 err = gk20a_busy(g); 402 err = gk20a_busy(g);
403 if (err) { 403 if (err) {
404 nvgpu_err(g, "failed to power on, %d", err); 404 nvgpu_err(g, "failed to power on, %d", err);
405 goto free_ref; 405 goto free_mem;
406 } 406 }
407 407
408 tsg = gk20a_tsg_open(g, nvgpu_current_pid(g)); 408 tsg = gk20a_tsg_open(g, nvgpu_current_pid(g));
409 gk20a_idle(g); 409 gk20a_idle(g);
410 if (!tsg) { 410 if (!tsg) {
411 nvgpu_kfree(g, priv);
412 err = -ENOMEM; 411 err = -ENOMEM;
413 goto free_ref; 412 goto free_mem;
414 } 413 }
415 414
416 priv->g = g; 415 priv->g = g;
@@ -421,6 +420,8 @@ int nvgpu_ioctl_tsg_open(struct gk20a *g, struct file *filp)
421 420
422 return 0; 421 return 0;
423 422
423free_mem:
424 nvgpu_kfree(g, priv);
424free_ref: 425free_ref:
425 gk20a_put(g); 426 gk20a_put(g);
426 return err; 427 return err;