aboutsummaryrefslogtreecommitdiffstats
path: root/include/spl_load.h
diff options
context:
space:
mode:
authorDaniel Palmer <daniel@0x0f.com>2024-08-31 12:17:06 +0900
committerTom Rini <trini@konsulko.com>2024-09-10 13:15:13 -0600
commitc6eba28c467bea645040789c17d50f04637f4771 (patch)
treeebbbcfd6b7d339fb0d4ed34ef40d658401f7bfe6 /include/spl_load.h
parent2349cc00d907253d88ff2340690d3159d49811f0 (diff)
downloadu-boot-c6eba28c467bea645040789c17d50f04637f4771.tar.gz
spl: spl_load: fix comparison between negative error code and unsigned size
read could be a negative error value but size in spl_image is unsigned so when they are compared read is used as if it's a unsigned value and if it's negative it'll most likely be bigger than size and the result will be true and _spl_load() will return 0 to the caller. This results in the caller to _spl_load() not seeing that an error happened as it should and continuing as if the load was completed when it might not have been. Check if read is negative and return it's value if it is before comparing against size in spl_image. Signed-off-by: Daniel Palmer <daniel@0x0f.com> Reviewed-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'include/spl_load.h')
-rw-r--r--include/spl_load.h4
1 files changed, 4 insertions, 0 deletions
diff --git a/include/spl_load.h b/include/spl_load.h
index 83db3812029..935f7d336f2 100644
--- a/include/spl_load.h
+++ b/include/spl_load.h
@@ -83,6 +83,10 @@ static inline int _spl_load(struct spl_image_info *spl_image,
read = info->read(info, offset + image_offset, size,
map_sysmem(spl_image->load_addr - overhead, size));
+
+ if (read < 0)
+ return read;
+
return read < spl_image->size ? -EIO : 0;
}