diff options
author | Deepak Nibade <dnibade@nvidia.com> | 2017-05-11 05:28:51 -0400 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2017-05-12 09:24:27 -0400 |
commit | d0955cad82c92699965f76c95c87150fbed70d3a (patch) | |
tree | 7dd4181fc659d1620e4ce2ac0ac914f55174f6e1 | |
parent | 677edcd6ec16298722b1402d92bd493e68bc0299 (diff) |
gpu: nvgpu: fix resource leak in error path
In nvgpu_request_firmware(), if fw->data is NULL, we jump
to label "err" and leak the storage pointed by linux_fw
Fix this by releasing firmware in error path if
fw->data is NULL
Coverity id : 2513066
Bug 200291879
Change-Id: Ieb5e22137cebb4cd02415b805941969b95a38668
Signed-off-by: Deepak Nibade <dnibade@nvidia.com>
Reviewed-on: http://git-master/r/1479884
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: svccoveritychecker <svccoveritychecker@nvidia.com>
GVS: Gerrit_Virtual_Submit
Reviewed-by: Sachin Nikam <snikam@nvidia.com>
-rw-r--r-- | drivers/gpu/nvgpu/common/linux/firmware.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/gpu/nvgpu/common/linux/firmware.c b/drivers/gpu/nvgpu/common/linux/firmware.c index 32b1e61f..43728f05 100644 --- a/drivers/gpu/nvgpu/common/linux/firmware.c +++ b/drivers/gpu/nvgpu/common/linux/firmware.c | |||
@@ -93,7 +93,7 @@ struct nvgpu_firmware *nvgpu_request_firmware(struct gk20a *g, | |||
93 | 93 | ||
94 | fw->data = nvgpu_kmalloc(g, linux_fw->size); | 94 | fw->data = nvgpu_kmalloc(g, linux_fw->size); |
95 | if (!fw->data) | 95 | if (!fw->data) |
96 | goto err; | 96 | goto err_release; |
97 | 97 | ||
98 | memcpy(fw->data, linux_fw->data, linux_fw->size); | 98 | memcpy(fw->data, linux_fw->data, linux_fw->size); |
99 | fw->size = linux_fw->size; | 99 | fw->size = linux_fw->size; |
@@ -102,6 +102,8 @@ struct nvgpu_firmware *nvgpu_request_firmware(struct gk20a *g, | |||
102 | 102 | ||
103 | return fw; | 103 | return fw; |
104 | 104 | ||
105 | err_release: | ||
106 | release_firmware(linux_fw); | ||
105 | err: | 107 | err: |
106 | nvgpu_kfree(g, fw); | 108 | nvgpu_kfree(g, fw); |
107 | return NULL; | 109 | return NULL; |