diff mbox

[U-Boot,04/10] ext4: fix leak in check_filename()

Message ID 1441425831-3441-4-git-send-email-swarren@wwwdotorg.org
State Accepted
Delegated to: Tom Rini
Headers show

Commit Message

Stephen Warren Sept. 5, 2015, 4:03 a.m. UTC
From: Stephen Warren <swarren@nvidia.com>

root_first_block_buffer should be free()d in all cases, not just when an
error occurs. Fix the success exit path of the function to do this.

Signed-off-by: Stephen Warren <swarren@nvidia.com>
---
 fs/ext4/ext4_common.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

Comments

Ɓukasz Majewski Sept. 8, 2015, 1:05 p.m. UTC | #1
Hi Stephen,

> From: Stephen Warren <swarren@nvidia.com>
> 
> root_first_block_buffer should be free()d in all cases, not just when
> an error occurs. Fix the success exit path of the function to do this.
> 
> Signed-off-by: Stephen Warren <swarren@nvidia.com>
> ---
>  fs/ext4/ext4_common.c | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/fs/ext4/ext4_common.c b/fs/ext4/ext4_common.c
> index b09f23aa5b83..7d7609a91fa8 100644
> --- a/fs/ext4/ext4_common.c
> +++ b/fs/ext4/ext4_common.c
> @@ -769,6 +769,7 @@ static int check_filename(char *filename,
> unsigned int blknr) struct ext2_dirent *previous_dir = NULL;
>  	char *ptr = NULL;
>  	struct ext_filesystem *fs = get_fs();
> +	int ret = -1;
>  
>  	/* get the first block of root */
>  	first_block_no_of_root = blknr;
> @@ -822,12 +823,12 @@ static int check_filename(char *filename,
> unsigned int blknr) if (ext4fs_put_metadata(root_first_block_addr,
>  					first_block_no_of_root))
>  			goto fail;
> -		return inodeno;
> +		ret = inodeno;
>  	}
>  fail:
>  	free(root_first_block_buffer);
>  
> -	return -1;
> +	return ret;
>  }
>  
>  int ext4fs_filename_check(char *filename)

Acked-by: Lukasz Majewski <l.majewski@samsung.com>
Tested-by: Lukasz Majewski <l.majewski@samsung.com>

Test HW: Odroid XU3 - Exynos5433
[DFU tests]
Tom Rini Sept. 12, 2015, 12:51 p.m. UTC | #2
On Fri, Sep 04, 2015 at 10:03:45PM -0600, Stephen Warren wrote:

> From: Stephen Warren <swarren@nvidia.com>
> 
> root_first_block_buffer should be free()d in all cases, not just when an
> error occurs. Fix the success exit path of the function to do this.
> 
> Signed-off-by: Stephen Warren <swarren@nvidia.com>
> Acked-by: Lukasz Majewski <l.majewski@samsung.com>
> Tested-by: Lukasz Majewski <l.majewski@samsung.com>

Applied to u-boot/master, thanks!
diff mbox

Patch

diff --git a/fs/ext4/ext4_common.c b/fs/ext4/ext4_common.c
index b09f23aa5b83..7d7609a91fa8 100644
--- a/fs/ext4/ext4_common.c
+++ b/fs/ext4/ext4_common.c
@@ -769,6 +769,7 @@  static int check_filename(char *filename, unsigned int blknr)
 	struct ext2_dirent *previous_dir = NULL;
 	char *ptr = NULL;
 	struct ext_filesystem *fs = get_fs();
+	int ret = -1;
 
 	/* get the first block of root */
 	first_block_no_of_root = blknr;
@@ -822,12 +823,12 @@  static int check_filename(char *filename, unsigned int blknr)
 		if (ext4fs_put_metadata(root_first_block_addr,
 					first_block_no_of_root))
 			goto fail;
-		return inodeno;
+		ret = inodeno;
 	}
 fail:
 	free(root_first_block_buffer);
 
-	return -1;
+	return ret;
 }
 
 int ext4fs_filename_check(char *filename)