From: Franco Venturi Date: Wed, 31 Jul 2024 13:09:00 +0000 (-0400) Subject: mmc: fix signed vs unsigned compare in read check in _spl_load() X-Git-Url: http://git.dujemihanovic.xyz/posts?a=commitdiff_plain;h=cf85cd84aa1a396126448b6d405e458d15f42976;p=u-boot.git 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 Reviewed-by: Sean Anderson Reviewed-by: Peng Fan --- diff --git a/include/spl_load.h b/include/spl_load.h index 1c2b296c0a..83db381202 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) {