[PATCH v2 17/28] fs/squashfs: sqfs_frag_lookup: simplify error handling

João Marcos Costa jmcosta944 at gmail.com
Tue Nov 3 13:44:16 CET 2020


Reviewed-by Joao Marcos Costa <jmcosta944 at gmail.com>

Em ter., 3 de nov. de 2020 às 08:12, Richard Genoud <
richard.genoud at posteo.net> escreveu:

> For consistency with other functions.
>
> Signed-off-by: Richard Genoud <richard.genoud at posteo.net>
> ---
>  fs/squashfs/sqfs.c | 28 ++++++++++++++++------------
>  1 file changed, 16 insertions(+), 12 deletions(-)
>
> diff --git a/fs/squashfs/sqfs.c b/fs/squashfs/sqfs.c
> index cfea313e34b..b97a961c5e3 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;
>


-- 
Atenciosamente,
João Marcos Costa

www.linkedin.com/in/jmarcoscosta/
https://github.com/jmarcoscosta


More information about the U-Boot mailing list