summaryrefslogtreecommitdiffstats
path: root/drivers/gpu
diff options
context:
space:
mode:
authorKonsta Holtta <kholtta@nvidia.com>2015-01-09 06:18:46 -0500
committerDan Willemsen <dwillemsen@nvidia.com>2015-04-04 21:02:34 -0400
commit91713341013de0ae6f83b7296fa476fa9c8bf7bf (patch)
tree1ee623fd7f0327cf8b68c62d9195b040a8ae47b7 /drivers/gpu
parent8b887af59a90d86fcf0f242e826131144eb6a770 (diff)
gpu: nvgpu: fix struct file memleak in alloc_as
Free also newly allocated struct file in error conditions with fput, and pair it by not trying to release the resulting null as_share on release. Bug 1597056 Change-Id: Ifad5c3a829b2c459ed6a738ecdc1ac2ac7e1678a Signed-off-by: Konsta Holtta <kholtta@nvidia.com> Reviewed-on: http://git-master/r/671527 GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/nvgpu/gk20a/as_gk20a.c3
-rw-r--r--drivers/gpu/nvgpu/gk20a/ctrl_gk20a.c4
2 files changed, 6 insertions, 1 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/as_gk20a.c b/drivers/gpu/nvgpu/gk20a/as_gk20a.c
index cd5cdd48..fa131bb1 100644
--- a/drivers/gpu/nvgpu/gk20a/as_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/as_gk20a.c
@@ -247,6 +247,9 @@ int gk20a_as_dev_release(struct inode *inode, struct file *filp)
247 247
248 gk20a_dbg_fn(""); 248 gk20a_dbg_fn("");
249 249
250 if (!as_share)
251 return 0;
252
250 return gk20a_as_release_share(as_share); 253 return gk20a_as_release_share(as_share);
251} 254}
252 255
diff --git a/drivers/gpu/nvgpu/gk20a/ctrl_gk20a.c b/drivers/gpu/nvgpu/gk20a/ctrl_gk20a.c
index 4e85abc8..c8fe34a8 100644
--- a/drivers/gpu/nvgpu/gk20a/ctrl_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/ctrl_gk20a.c
@@ -170,13 +170,15 @@ static int gk20a_ctrl_alloc_as(
170 170
171 err = gk20a_as_alloc_share(&g->as, args->big_page_size, &as_share); 171 err = gk20a_as_alloc_share(&g->as, args->big_page_size, &as_share);
172 if (err) 172 if (err)
173 goto clean_up; 173 goto clean_up_file;
174 174
175 file->private_data = as_share; 175 file->private_data = as_share;
176 176
177 args->as_fd = fd; 177 args->as_fd = fd;
178 return 0; 178 return 0;
179 179
180clean_up_file:
181 fput(file);
180clean_up: 182clean_up:
181 put_unused_fd(fd); 183 put_unused_fd(fd);
182 return err; 184 return err;