From b6e534ecf92c6f443cf731accb3e71fc56f6c90e Mon Sep 17 00:00:00 2001 From: jixj Date: Wed, 26 Aug 2020 17:08:11 +0800 Subject: [PATCH] utag: free the buffer when failed to open utag When fail to open utag, the alloc buffer will not be free to cause memory leak Change-Id: I9f77a4528513ddfb512f3183f067988ffa9870a9 Reviewed-on: https://gerrit.mot.com/1733773 SLTApproved: Slta Waiver SME-Granted: SME Approvals Granted Tested-by: Jira Key Reviewed-by: Huosheng Liao Submit-Approved: Jira Key --- drivers/misc/utag/utags.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/drivers/misc/utag/utags.c b/drivers/misc/utag/utags.c index bf316ef2f5fa..311f9e39f370 100644 --- a/drivers/misc/utag/utags.c +++ b/drivers/misc/utag/utags.c @@ -1143,7 +1143,7 @@ static int store_utags(struct ctrl *ctrl, struct utag *tags) if (open_utags(cb)) { rc = -EIO; - goto out; + goto err_free; } fp = cb->filep; @@ -1161,8 +1161,10 @@ static int store_utags(struct ctrl *ctrl, struct utag *tags) /* Only try to use backup partition if it is configured */ if (ctrl->backup.name) { cb = &ctrl->backup; - if (open_utags(cb)) - goto out; + if (open_utags(cb)) { + rc = -EIO; + goto err_free; + } fp = cb->filep; pos = 0; @@ -1171,13 +1173,16 @@ static int store_utags(struct ctrl *ctrl, struct utag *tags) #else written = vfs_write(fp, datap, tags_size, &pos); #endif - if (written < tags_size) + if (written < tags_size) { pr_err("failed to write file (%s), rc=%zu\n", cb->name, written); + rc = -EIO; + } } - vfree(datap); - out: +err_free: + vfree(datap); +out: set_fs(fs); return rc; }