]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
ubifs: Fix memory leak on error condition
authorGarry McNulty <garrmcnu@gmail.com>
Thu, 15 Nov 2018 22:25:58 +0000 (22:25 +0000)
committerRichard Weinberger <richard@nod.at>
Thu, 13 Dec 2018 21:09:13 +0000 (22:09 +0100)
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>
fs/ubifs/lpt.c

index d1d5e96350ddbd0ff549941655b0e4d8e089beef..b0c5f06128b5385cff7f8ca514f2c2a3f3296cb0 100644 (file)
@@ -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) {