diff mbox series

[next] ubifs: authentication: fix memory leak on error exit path

Message ID 20181029232146.21262-1-colin.king@canonical.com
State Changes Requested
Delegated to: Richard Weinberger
Headers show
Series [next] ubifs: authentication: fix memory leak on error exit path | expand

Commit Message

Colin Ian King Oct. 29, 2018, 11:21 p.m. UTC
From: Colin Ian King <colin.king@canonical.com>

Currently a failure when calling ubifs_read_nnode results in a leak
of desc and buf because of a direct return. Fix this by exiting via
label 'out' that performs the necessary free'ing of the resources.

Fixes: a1dc58140f7e ("ubifs: authentication: Authenticate LPT")

Signed-off-by: Colin Ian King <colin.king@canonical.com>
---
 fs/ubifs/lpt.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Richard Weinberger Oct. 29, 2018, 11:32 p.m. UTC | #1
Am Dienstag, 30. Oktober 2018, 00:21:46 CET schrieb Colin King:
> From: Colin Ian King <colin.king@canonical.com>
> 
> Currently a failure when calling ubifs_read_nnode results in a leak
> of desc and buf because of a direct return. Fix this by exiting via
> label 'out' that performs the necessary free'ing of the resources.
> 
> Fixes: a1dc58140f7e ("ubifs: authentication: Authenticate LPT")
> 
> Signed-off-by: Colin Ian King <colin.king@canonical.com>
> ---
>  fs/ubifs/lpt.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/fs/ubifs/lpt.c b/fs/ubifs/lpt.c
> index d1d5e96350dd..c162459a1e02 100644
> --- a/fs/ubifs/lpt.c
> +++ b/fs/ubifs/lpt.c
> @@ -1688,7 +1688,7 @@ int ubifs_lpt_calc_hash(struct ubifs_info *c, u8 *hash)
>  	if (!c->nroot) {
>  		err = ubifs_read_nnode(c, NULL, 0);
>  		if (err)
> -			return err;
> +			goto out;

IMHO a better fix would be reading the root node before allocating these buffers.

Thanks,
//richard
diff mbox series

Patch

diff --git a/fs/ubifs/lpt.c b/fs/ubifs/lpt.c
index d1d5e96350dd..c162459a1e02 100644
--- a/fs/ubifs/lpt.c
+++ b/fs/ubifs/lpt.c
@@ -1688,7 +1688,7 @@  int ubifs_lpt_calc_hash(struct ubifs_info *c, u8 *hash)
 	if (!c->nroot) {
 		err = ubifs_read_nnode(c, NULL, 0);
 		if (err)
-			return err;
+			goto out;
 	}
 
 	cnode = (struct ubifs_cnode *)c->nroot;