
Subject: [PATCH v1] 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: first check if 'read' is negative then check its value against 'sizeof(*header)' Reference:
Signed-off-by: Franco Venturi fventuri@comcast.net
include/spl_load.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/include/spl_load.h b/include/spl_load.h index 1c2b296c0a..1e05599d29 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 < 0 || read < sizeof(*header))
"read < 0" will imply that "read < sizeof(*header)", so there should no need to include this change.
Regards, Peng.
return -EIO;
if (image_get_magic(header) == FDT_MAGIC) {
2.45.2