Patchwork [U-Boot] ubifs: Fix memory leak in ubifs_finddir

login
register
mail settings
Submitter Stefan Roese
Date Aug. 28, 2012, noon
Message ID <1346155224-26630-1-git-send-email-sr@denx.de>
Download mbox | patch
Permalink /patch/180447/
State Accepted
Commit be73913b91ca1e86c7478c1ab8af7b7ba6f3e4ad
Delegated to: Stefan Roese
Headers show

Comments

Stefan Roese - Aug. 28, 2012, noon
This patch fixes a memory leak in ubifs_finddir().

Signed-off-by: Stefan Roese <sr@denx.de>
Cc: dev.ma.dma@gmail.com
---
 fs/ubifs/ubifs.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)
Stefan Roese - Sept. 3, 2012, 9:36 a.m.
On 08/28/2012 02:00 PM, Stefan Roese wrote:
> This patch fixes a memory leak in ubifs_finddir().
> 
> Signed-off-by: Stefan Roese <sr@denx.de>
> Cc: dev.ma.dma@gmail.com

Applied to u-boot-ubi/master.

Thanks,
Stefan

Patch

diff --git a/fs/ubifs/ubifs.c b/fs/ubifs/ubifs.c
index 604eb8f..c68802b 100644
--- a/fs/ubifs/ubifs.c
+++ b/fs/ubifs/ubifs.c
@@ -295,6 +295,7 @@  static int ubifs_finddir(struct super_block *sb, char *dirname,
 	struct file *file;
 	struct dentry *dentry;
 	struct inode *dir;
+	int ret = 0;
 
 	file = kzalloc(sizeof(struct file), 0);
 	dentry = kzalloc(sizeof(struct dentry), 0);
@@ -336,7 +337,8 @@  static int ubifs_finddir(struct super_block *sb, char *dirname,
 		if ((strncmp(dirname, (char *)dent->name, nm.len) == 0) &&
 		    (strlen(dirname) == nm.len)) {
 			*inum = le64_to_cpu(dent->inum);
-			return 1;
+			ret = 1;
+			goto out_free;
 		}
 
 		/* Switch to the next entry */
@@ -355,11 +357,10 @@  static int ubifs_finddir(struct super_block *sb, char *dirname,
 	}
 
 out:
-	if (err != -ENOENT) {
+	if (err != -ENOENT)
 		ubifs_err("cannot find next direntry, error %d", err);
-		return err;
-	}
 
+out_free:
 	if (file->private_data)
 		kfree(file->private_data);
 	if (file)
@@ -369,7 +370,7 @@  out:
 	if (dir)
 		free(dir);
 
-	return 0;
+	return ret;
 }
 
 static unsigned long ubifs_findfile(struct super_block *sb, char *filename)