aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChandra Seetharaman <sekharan@us.ibm.com>2006-10-10 18:15:55 -0400
committerMark Fasheh <mark.fasheh@oracle.com>2006-10-20 18:29:00 -0400
commit559c9ac391c046710bdeee5581dc5d9dda794881 (patch)
tree78cdf1ebc1027028b7e1e01d4ed34f2cf18742c9
parente2057c5a63821e17c8a54dab6db680c77ce7ee6c (diff)
configfs: handle kzalloc() failure in check_perm()
check_perm() does not drop the reference to the module when kzalloc() failure occurs. Signed-Off-By: Chandra Seetharaman <sekharan@us.ibm.com> Signed-off-by: Joel Becker <joel.becker@oracle.com> Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com>
-rw-r--r--fs/configfs/file.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/fs/configfs/file.c b/fs/configfs/file.c
index e6d5754a715e..cf33fac68c84 100644
--- a/fs/configfs/file.c
+++ b/fs/configfs/file.c
@@ -275,13 +275,14 @@ static int check_perm(struct inode * inode, struct file * file)
275 * it in file->private_data for easy access. 275 * it in file->private_data for easy access.
276 */ 276 */
277 buffer = kzalloc(sizeof(struct configfs_buffer),GFP_KERNEL); 277 buffer = kzalloc(sizeof(struct configfs_buffer),GFP_KERNEL);
278 if (buffer) { 278 if (!buffer) {
279 init_MUTEX(&buffer->sem);
280 buffer->needs_read_fill = 1;
281 buffer->ops = ops;
282 file->private_data = buffer;
283 } else
284 error = -ENOMEM; 279 error = -ENOMEM;
280 goto Enomem;
281 }
282 init_MUTEX(&buffer->sem);
283 buffer->needs_read_fill = 1;
284 buffer->ops = ops;
285 file->private_data = buffer;
285 goto Done; 286 goto Done;
286 287
287 Einval: 288 Einval:
@@ -289,6 +290,7 @@ static int check_perm(struct inode * inode, struct file * file)
289 goto Done; 290 goto Done;
290 Eaccess: 291 Eaccess:
291 error = -EACCES; 292 error = -EACCES;
293 Enomem:
292 module_put(attr->ca_owner); 294 module_put(attr->ca_owner);
293 Done: 295 Done:
294 if (error && item) 296 if (error && item)