diff options
author | Preetha Chandru R <pchandru@nvidia.com> | 2018-08-16 04:45:34 -0400 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2018-08-21 06:33:02 -0400 |
commit | fec299954f0c22123d0dd5d67613bf9f633b5fa0 (patch) | |
tree | eb2e4d302739bff0427a006930bfa0a85639b4c3 /drivers/gpu | |
parent | e486ff45d02ae1ee286a1bc100157487cc9b029b (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')
-rw-r--r-- | drivers/gpu/nvgpu/os/linux/ioctl_tsg.c | 7 |
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 | ||
423 | free_mem: | ||
424 | nvgpu_kfree(g, priv); | ||
424 | free_ref: | 425 | free_ref: |
425 | gk20a_put(g); | 426 | gk20a_put(g); |
426 | return err; | 427 | return err; |