diff options
author | Richard Genoud <richard.genoud@posteo.net> | 2020-11-03 12:11:15 +0100 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2020-11-19 09:45:49 -0500 |
commit | c9b8e86f8bd238421b35ec15d88b4d3cac8a0992 (patch) | |
tree | 3887b0ae192f7946db79a9ecc1e010f4e8dea921 /fs | |
parent | 555459e7931f7ae34a4e10d1e21ce7aada7aa59b (diff) | |
download | u-boot-c9b8e86f8bd238421b35ec15d88b4d3cac8a0992.zip u-boot-c9b8e86f8bd238421b35ec15d88b4d3cac8a0992.tar.gz u-boot-c9b8e86f8bd238421b35ec15d88b4d3cac8a0992.tar.bz2 |
fs/squashfs: sqfs_frag_lookup: simplify error handling
For consistency with other functions.
Reviewed-by: Joao Marcos Costa <jmcosta944@gmail.com>
Signed-off-by: Richard Genoud <richard.genoud@posteo.net>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/squashfs/sqfs.c | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/fs/squashfs/sqfs.c b/fs/squashfs/sqfs.c index cfea313..b97a961 100644 --- a/fs/squashfs/sqfs.c +++ b/fs/squashfs/sqfs.c @@ -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; |