On Thu, Jul 11, 2019 at 01:24:28AM +0530, Bhupesh Sharma wrote:
> This patch adds 'is_zlib_file()' helper function which can be
> used to quickly determine with the passed kernel image is a zlib
> compressed kernel image.
> 
> This is specifically useful for arm64 zImage (or Image.gz) support,
> which is introduced by later patches in this patchset.
> 
> Signed-off-by: Bhupesh Sharma <[email protected]>
> ---
>  kexec/kexec-zlib.h |  1 +
>  kexec/zlib.c       | 32 ++++++++++++++++++++++++++++++++
>  2 files changed, 33 insertions(+)
> 
> diff --git a/kexec/kexec-zlib.h b/kexec/kexec-zlib.h
> index 43c107bf4a72..16300f294759 100644
> --- a/kexec/kexec-zlib.h
> +++ b/kexec/kexec-zlib.h
> @@ -6,5 +6,6 @@
>  
>  #include "config.h"
>  
> +int is_zlib_file(const char *filename, off_t *r_size);
>  char *zlib_decompress_file(const char *filename, off_t *r_size);
>  #endif /* __KEXEC_ZLIB_H */
> diff --git a/kexec/zlib.c b/kexec/zlib.c
> index 95b608059d41..34d5ca566769 100644
> --- a/kexec/zlib.c
> +++ b/kexec/zlib.c
> @@ -23,6 +23,32 @@ static void _gzerror(gzFile fp, int *errnum, const char 
> **errmsg)
>       }
>  }
>  
> +int is_zlib_file(const char *filename, off_t *r_size)
> +{
> +     gzFile fp;
> +     int errnum;
> +     const char *msg;
> +
> +     if (!filename)
> +             goto out;
> +
> +     fp = gzopen(filename, "rb");

Does fp need to be closed somewhere to avoid a leak?

> +     if (fp == 0) {
> +             _gzerror(fp, &errnum, &msg);
> +             dbgprintf("Cannot open `%s': %s\n", filename, msg);
> +             goto out;
> +     }
> +
> +     if (gzdirect(fp))
> +             /* It's not in gzip format */
> +             goto out;
> +
> +     /* It's in gzip format */
> +     return 1;
> +out:
> +     return 0;
> +}
> +
>  char *zlib_decompress_file(const char *filename, off_t *r_size)
>  {
>       gzFile fp;
> @@ -84,6 +110,12 @@ fail:
>       return buf;
>  }
>  #else
> +
> +int is_zlib_file(const char *filename, off_t *r_size)
> +{
> +     return 0;
> +}
> +
>  char *zlib_decompress_file(const char *UNUSED(filename), off_t 
> *UNUSED(r_size))
>  {
>       return NULL;
> -- 
> 2.7.4
> 

_______________________________________________
kexec mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/kexec

Reply via email to