
On Mon 10 Jun 2024 at 11:43, Mattijs Korpershoek mkorpershoek@baylibre.com wrote:
When decompressing, it's possible that the algorithm only performs a partial decompression. This usually happens when CONFIG_SYS_BOOTM_LEN is too small for the uncompressed image.
When that happens, image_decomp() returns an error and *load_end == load. The error is then handled by handle_decomp_error().
handle_decomp_error() expects the number of uncompressed bytes in uncomp_size but receives *load_end - load == load - load == 0.
Because of this, handle_decomp_error does not report the expected "Image too large: increase CONFIG_SYS_BOOTM_LEN" error message.
Modify the image_decomp() logic to always report the decompressed size, even when a partial decompression happened.
Signed-off-by: Mattijs Korpershoek mkorpershoek@baylibre.com
This has been tested on an AM62X SK EVM board with a big lz4 image and the default CONFIG_SYS_BOOTM_LEN of 0x800000.
This has also been tested on sandbox using: => ut compression
boot/image.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/boot/image.c b/boot/image.c index 073931cd7a3f..4f48e6eb563d 100644 --- a/boot/image.c +++ b/boot/image.c @@ -531,10 +531,10 @@ int image_decomp(int comp, ulong load, ulong image_start, int type, printf("Unimplemented compression type %d\n", comp); return ret; }
if (ret)
return ret;
*load_end = load + image_len;
if (ret)
return ret;
return 0;
}
base-commit: a7f0154c412859323396111dd0c09dbafbc153cb change-id: 20240523-image-partial-decomp-d6604e998e3a
Best regards,
Mattijs Korpershoek mkorpershoek@baylibre.com
Reviewed-by: Julien Masson jmasson@baylibre.com