fs/squashfs: sqfs_frag_lookup: simplify error handling 79/250879/1
authorRichard Genoud <richard.genoud@posteo.net>
Tue, 3 Nov 2020 11:11:15 +0000 (12:11 +0100)
committerJaehoon Chung <jh80.chung@samsung.com>
Tue, 5 Jan 2021 07:09:47 +0000 (16:09 +0900)
For consistency with other functions.

Reviewed-by: Joao Marcos Costa <jmcosta944@gmail.com>
Signed-off-by: Richard Genoud <richard.genoud@posteo.net>
[jh80.chung: cherry picked from mainline commit c9b8e86f8bd238421b35ec15d88b4d3cac8a0992]
Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
Change-Id: If6a955583f876fe4399982e58ade2784c2da1b30

fs/squashfs/sqfs.c

index 7d8e999..c9e8317 100644 (file)
@@ -106,6 +106,10 @@ static int sqfs_frag_lookup(u32 inode_fragment_index,
        int block, offset, ret;
        u16 header;
 
+       metadata_buffer = NULL;
+       entries = NULL;
+       table = NULL;
+
        if (inode_fragment_index >= get_unaligned_le32(&sblk->fragments))
                return -EINVAL;
 
@@ -117,12 +121,14 @@ static int sqfs_frag_lookup(u32 inode_fragment_index,
 
        /* Allocate a proper sized buffer to store the fragment index table */
        table = malloc_cache_aligned(n_blks * ctxt.cur_dev->blksz);
-       if (!table)
-               return -ENOMEM;
+       if (!table) {
+               ret = -ENOMEM;
+               goto out;
+       }
 
        if (sqfs_disk_read(start, n_blks, table) < 0) {
-               free(table);
-               return -EINVAL;
+               ret = -EINVAL;
+               goto out;
        }
 
        block = SQFS_FRAGMENT_INDEX(inode_fragment_index);
@@ -142,12 +148,12 @@ static int sqfs_frag_lookup(u32 inode_fragment_index,
        metadata_buffer = malloc_cache_aligned(n_blks * ctxt.cur_dev->blksz);
        if (!metadata_buffer) {
                ret = -ENOMEM;
-               goto free_table;
+               goto out;
        }
 
        if (sqfs_disk_read(start, n_blks, metadata_buffer) < 0) {
                ret = -EINVAL;
-               goto free_buffer;
+               goto out;
        }
 
        /* Every metadata block starts with a 16-bit header */
@@ -156,13 +162,13 @@ static int sqfs_frag_lookup(u32 inode_fragment_index,
 
        if (!metadata || !header) {
                ret = -ENOMEM;
-               goto free_buffer;
+               goto out;
        }
 
        entries = malloc(SQFS_METADATA_BLOCK_SIZE);
        if (!entries) {
                ret = -ENOMEM;
-               goto free_buffer;
+               goto out;
        }
 
        if (SQFS_COMPRESSED_METADATA(header)) {
@@ -172,7 +178,7 @@ static int sqfs_frag_lookup(u32 inode_fragment_index,
                                      src_len);
                if (ret) {
                        ret = -EINVAL;
-                       goto free_entries;
+                       goto out;
                }
        } else {
                memcpy(entries, metadata, SQFS_METADATA_SIZE(header));
@@ -181,11 +187,9 @@ static int sqfs_frag_lookup(u32 inode_fragment_index,
        *e = entries[offset];
        ret = SQFS_COMPRESSED_BLOCK(e->size);
 
-free_entries:
+out:
        free(entries);
-free_buffer:
        free(metadata_buffer);
-free_table:
        free(table);
 
        return ret;