diff options
author | Garry McNulty <garrmcnu@gmail.com> | 2018-11-15 22:25:58 +0000 |
---|---|---|
committer | Richard Weinberger <richard@nod.at> | 2018-12-13 22:09:13 +0100 |
commit | 6554a56f352ee2a6ce295fcfb39889eb9ecc79cf (patch) | |
tree | 7036b37a474b831f003cfd1093d579d10d8c041d | |
parent | 60eb5da2434b5288291aac533fb4dadc8ec8aed7 (diff) | |
download | linux-stable-6554a56f352ee2a6ce295fcfb39889eb9ecc79cf.tar.gz linux-stable-6554a56f352ee2a6ce295fcfb39889eb9ecc79cf.tar.bz2 linux-stable-6554a56f352ee2a6ce295fcfb39889eb9ecc79cf.zip |
ubifs: Fix memory leak on error condition
If the call to ubifs_read_nnode() fails in ubifs_lpt_calc_hash() an
error is returned without freeing the memory allocated to 'buf'.
Read and check the root node before allocating the buffer.
Detected by CoverityScan, CID 1441025 ("Resource leak")
Signed-off-by: Garry McNulty <garrmcnu@gmail.com>
Signed-off-by: Richard Weinberger <richard@nod.at>
-rw-r--r-- | fs/ubifs/lpt.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/fs/ubifs/lpt.c b/fs/ubifs/lpt.c index d1d5e96350dd..b0c5f06128b5 100644 --- a/fs/ubifs/lpt.c +++ b/fs/ubifs/lpt.c @@ -1675,6 +1675,12 @@ int ubifs_lpt_calc_hash(struct ubifs_info *c, u8 *hash) if (!ubifs_authenticated(c)) return 0; + if (!c->nroot) { + err = ubifs_read_nnode(c, NULL, 0); + if (err) + return err; + } + desc = ubifs_hash_get_desc(c); if (IS_ERR(desc)) return PTR_ERR(desc); @@ -1685,12 +1691,6 @@ int ubifs_lpt_calc_hash(struct ubifs_info *c, u8 *hash) goto out; } - if (!c->nroot) { - err = ubifs_read_nnode(c, NULL, 0); - if (err) - return err; - } - cnode = (struct ubifs_cnode *)c->nroot; while (cnode) { |