[U-Boot] [PATCH v2 0/12] bootm: Tidy up decompression and add tests
Simon Glass
sjg at chromium.org
Tue Dec 2 21:17:28 CET 2014
(Note: this builds on a single patch left over from a recent series, which
is why it is v2. That patch refactored the code but did not add tests.)
bootm's decompression functions currently have tests in the
'test_compression' unit test command, but this calls the decompression
routines directly and is more aimed at ensuring that they never overwrite
their output buffer.
But bootm is critical code and it is important that test coverage be
adequate for the task it performs. Existing tests in test/image provide
some coverage, but not for decompression.
This series adds a new unit test specifically for bootm's decompression.
It tests that bootm deals correctly with a normal decompress, a case where
there is insufficient output buffer space, and a case where part of the
data is corrupted.
Previously the uncompressed case had no error checking, so this is added.
This is a change in behaviour so I hope it will not cause problems.
The current error message on failure is confusing, since it is unclear
whether the image is too large or the data is corrupt. This is improved
and patches added to make sure we can distinguish these two cases for
each decompression method in most situations.
The existing 'Must RESET board to recover' message is retained, but this
is likely to be unnecessary, since all decompressions routines are, I
believe, careful not to overwrite their output buffer even in the case
of corrupted data. It may be desirable to remove it later.
The output of the new sandbox 'ut_image_decomp' command is below:
Testing: gzip compressed
Uncompressing Kernel Image ... OK
Uncompressing Kernel Image ... Error: inflate() returned -5
Image too large: increase CONFIG_SYS_BOOTM_LEN
Must RESET board to recover
Uncompressing Kernel Image ... Error: inflate() returned -5
Image too large: increase CONFIG_SYS_BOOTM_LEN
Must RESET board to recover
Testing: bzip2 compressed
Uncompressing Kernel Image ... OK
Uncompressing Kernel Image ... Image too large: increase CONFIG_SYS_BOOTM_LEN
Must RESET board to recover
Uncompressing Kernel Image ... bzip2 compressed: uncompress error -4
Must RESET board to recover
Testing: lzma compressed
Uncompressing Kernel Image ... OK
Uncompressing Kernel Image ... Image too large: increase CONFIG_SYS_BOOTM_LEN
Must RESET board to recover
Uncompressing Kernel Image ... lzma compressed: uncompress error 1
Must RESET board to recover
Testing: lzo compressed
Uncompressing Kernel Image ... OK
Uncompressing Kernel Image ... Image too large: increase CONFIG_SYS_BOOTM_LEN
Must RESET board to recover
Uncompressing Kernel Image ... lzo compressed: uncompress error -6
Must RESET board to recover
Testing: uncompressed
Loading Kernel Image ... OK
Loading Kernel Image ... Image too large: increase CONFIG_SYS_BOOTM_LEN
Must RESET board to recover
ut_image_decomp ok
Changes in v2:
- Add tests to cover the code changes
- Correct the overflow check for bzip2
Simon Glass (12):
lzma: fix buffer bound check error further
bootm: Move compression progress/error messages into a function
sandbox: Correct ordering of 'sb save' commands
test: Add DEBUG output option to test-fit.py
bootm: Export bootm_decomp_image()
test: Rename test_compression to ut_compression
test: Add unit tests for bootm image decompression
bootm: Use print_decomp_msg() in all cases
bootm: Factor out common parts of image decompression code
bzlib: Update destLen even on error
gunzip: Update lenp even on error
lzo: Update dst_len even on error
common/bootm.c | 150 ++++++++++++++++++++++++++-------------------
common/cmd_sandbox.c | 2 +-
include/bootm.h | 17 +++++
lib/bzlib.c | 2 +-
lib/gunzip.c | 7 ++-
lib/lzma/LzmaTools.c | 4 +-
lib/lzo/lzo1x_decompress.c | 4 +-
test/compression.c | 93 ++++++++++++++++++++++++++--
test/dm/sf.c | 2 +-
test/image/test-fit.py | 16 ++++-
10 files changed, 218 insertions(+), 79 deletions(-)
--
2.2.0.rc0.207.ga3a616c
More information about the U-Boot
mailing list