diff options
author | Franco Venturi <fventuri@comcast.net> | 2024-07-31 09:09:00 -0400 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2024-08-27 18:04:05 -0600 |
commit | cf85cd84aa1a396126448b6d405e458d15f42976 (patch) | |
tree | 939787642bbf9e23de26e007dc0170bcd018cede | |
parent | 7c2c235a27c7b7198742f37fbe20877e17b6e3ea (diff) |
mmc: fix signed vs unsigned compare in read check in _spl_load()
Fix signed vs unsigned compare in read check in _spl_load()
Issue: when info->read() returns a negative value because of an error,
the comparison of 'read' (signed) with 'sizeof(*header)'
(unsigned silently converts the negative value into a very
large unsigned value and the check on the error condition
always return false, i.e. the error is not detected
Symptoms: if spl_load_image_fat() is unable to find the file 'uImage',
the SPL phase of the boot process just hangs after displaying
the following line:
Trying to boot from MMC1
Fix: cast 'sizeof(*header)' to int so the compare is now between
signed types
Reference: https://stackoverflow.com/questions/17293749/sizeof-operator-in-if-statement
Signed-off-by: Franco Venturi <fventuri@comcast.net>
Reviewed-by: Sean Anderson <seanga2@gmail.com>
Reviewed-by: Peng Fan <peng.fan@nxp.com>
-rw-r--r-- | include/spl_load.h | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/include/spl_load.h b/include/spl_load.h index 1c2b296c0a2..83db3812029 100644 --- a/include/spl_load.h +++ b/include/spl_load.h @@ -22,7 +22,7 @@ static inline int _spl_load(struct spl_image_info *spl_image, read = info->read(info, offset, ALIGN(sizeof(*header), spl_get_bl_len(info)), header); - if (read < sizeof(*header)) + if (read < (int)sizeof(*header)) return -EIO; if (image_get_magic(header) == FDT_MAGIC) { |