Hi Aristo, Thank you for the patch.
On mer., avril 30, 2025 at 10:23, Aristo Chen <jj251510319...@gmail.com> wrote: > Currently, when decompressing a gzip-compressed image during bootm, a > generic error such as "inflate() returned -5" is shown when the buffer is > too small. However, it is not immediately clear that this is caused by > CONFIG_SYS_BOOTM_LEN being too small. > > This patch improves error handling by: > - Detecting Z_BUF_ERROR (-5) returned from the inflate() call > - Suggesting the user to increase CONFIG_SYS_BOOTM_LEN when applicable > - Preserving the original return code from zunzip() instead of overwriting > it with -1 > > By providing clearer hints when decompression fails due to insufficient > buffer size, this change helps users diagnose and fix boot failures more > easily. > > Signed-off-by: Aristo Chen <aristo.c...@canonical.com> Reviewed-by: Mattijs Korpershoek <mkorpersh...@kernel.org> > --- > boot/bootm.c | 4 +++- > lib/gunzip.c | 2 +- > 2 files changed, 4 insertions(+), 2 deletions(-) > > diff --git a/boot/bootm.c b/boot/bootm.c > index f5cbb10f0d1..f6aa32746b7 100644 > --- a/boot/bootm.c > +++ b/boot/bootm.c > @@ -34,6 +34,7 @@ > > #include <bootm.h> > #include <image.h> > +#include <u-boot/zlib.h> > > #define MAX_CMDLINE_SIZE SZ_4K > > @@ -578,7 +579,8 @@ static int handle_decomp_error(int comp_type, size_t > uncomp_size, > if (ret == -ENOSYS) > return BOOTM_ERR_UNIMPLEMENTED; > > - if (uncomp_size >= buf_size) > + if ((comp_type == IH_COMP_GZIP && ret == Z_BUF_ERROR) || > + uncomp_size >= buf_size) > printf("Image too large: increase CONFIG_SYS_BOOTM_LEN\n"); > else > printf("%s: uncompress error %d\n", name, ret); > diff --git a/lib/gunzip.c b/lib/gunzip.c > index 52007715bda..a05dcde9a75 100644 > --- a/lib/gunzip.c > +++ b/lib/gunzip.c > @@ -299,7 +299,7 @@ __rcode int zunzip(void *dst, int dstlen, unsigned char > *src, > if (stoponerr == 1 && r != Z_STREAM_END && > (s.avail_in == 0 || s.avail_out == 0 || r != Z_BUF_ERROR)) { > printf("Error: inflate() returned %d\n", r); > - err = -1; > + err = r; > break; > } > } while (r == Z_BUF_ERROR); > -- > 2.34.1