summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/common
diff options
context:
space:
mode:
authorDeepak Nibade <dnibade@nvidia.com>2017-05-11 05:28:51 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2017-05-12 09:24:27 -0400
commitd0955cad82c92699965f76c95c87150fbed70d3a (patch)
tree7dd4181fc659d1620e4ce2ac0ac914f55174f6e1 /drivers/gpu/nvgpu/common
parent677edcd6ec16298722b1402d92bd493e68bc0299 (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>
Diffstat (limited to 'drivers/gpu/nvgpu/common')
-rw-r--r--drivers/gpu/nvgpu/common/linux/firmware.c4
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
105err_release:
106 release_firmware(linux_fw);
105err: 107err:
106 nvgpu_kfree(g, fw); 108 nvgpu_kfree(g, fw);
107 return NULL; 109 return NULL;