diff options
author | Konsta Holtta <kholtta@nvidia.com> | 2015-01-09 06:18:46 -0500 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2015-04-04 21:02:34 -0400 |
commit | 91713341013de0ae6f83b7296fa476fa9c8bf7bf (patch) | |
tree | 1ee623fd7f0327cf8b68c62d9195b040a8ae47b7 /drivers | |
parent | 8b887af59a90d86fcf0f242e826131144eb6a770 (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')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/as_gk20a.c | 3 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/ctrl_gk20a.c | 4 |
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 | ||
180 | clean_up_file: | ||
181 | fput(file); | ||
180 | clean_up: | 182 | clean_up: |
181 | put_unused_fd(fd); | 183 | put_unused_fd(fd); |
182 | return err; | 184 | return err; |