diff options
author | Mattijs Korpershoek | 2024-05-23 11:27:09 +0200 |
---|---|---|
committer | Tom Rini | 2024-06-07 16:20:28 -0600 |
commit | 3078766134ae6d9c8746300b084a293105e35f60 (patch) | |
tree | 42238ac1173a306f2fa9c4f72b6071f7d2bcda92 | |
parent | 6068abe33fff28ba50a0f68eabc5d9eb31b7045d (diff) |
image: Set load_end on partial loads
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>
-rw-r--r-- | boot/image.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/boot/image.c b/boot/image.c index bacf5146e13..fc774d605d1 100644 --- a/boot/image.c +++ b/boot/image.c @@ -528,10 +528,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; } |