From 2958db6f5625a9f566644a6830dc96e1b6879327 Mon Sep 17 00:00:00 2001 From: Terje Bergstrom Date: Tue, 20 Dec 2016 14:37:49 -0800 Subject: gpu: nvgpu: Release VBIOS firmware if alloc fails We first load VBIOS firmware from file, and then attempt to allocate space into which we copy the data. If allocation fails, we do not release the firmware. Add a release_firmware() in the error path. Change-Id: Iaa995e93bf8d5a23e08c5e332f70b203ac2e09db Signed-off-by: Terje Bergstrom Reviewed-on: http://git-master/r/1275740 GVS: Gerrit_Virtual_Submit Reviewed-by: Thomas Fleury --- drivers/gpu/nvgpu/gm206/bios_gm206.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'drivers/gpu/nvgpu/gm206/bios_gm206.c') diff --git a/drivers/gpu/nvgpu/gm206/bios_gm206.c b/drivers/gpu/nvgpu/gm206/bios_gm206.c index 304de68e..c278cb08 100644 --- a/drivers/gpu/nvgpu/gm206/bios_gm206.c +++ b/drivers/gpu/nvgpu/gm206/bios_gm206.c @@ -852,8 +852,10 @@ static int gm206_bios_init(struct gk20a *g) gk20a_dbg_info("using VBIOS overlay"); g->bios.size = bios_fw->size - ROM_FILE_PAYLOAD_OFFSET; g->bios.data = vmalloc(g->bios.size); - if (!g->bios.data) - return -ENOMEM; + if (!g->bios.data) { + err = -ENOMEM; + goto free_firmware; + } memcpy(g->bios.data, &bios_fw->data[ROM_FILE_PAYLOAD_OFFSET], g->bios.size); @@ -929,6 +931,10 @@ static int gm206_bios_init(struct gk20a *g) } return 0; + +free_firmware: + release_firmware(bios_fw); + return err; } void gm206_init_bios(struct gpu_ops *gops) -- cgit v1.2.2