Reading a file over NFS is prone to return short reads as the file content is split over multiple UDP packets and reads won't return more than the number of bytes that have gathered in the FIFO.
The uImage verification code didn't account for this and handled neither short reads or the file prematurely ending. Address both to fix this unexpected result: uimage -v /mnt/nfs/uImage verifying data CRC... Bad Data CRC: 0x56474aa2 != 0x6b8f0a9c cp /mnt/nfs/uImage . uimage -v uImage verifying data CRC... ok Fixes: 390249968c4e ("reimplement uImage code") Closes: https://github.com/barebox/barebox/issues/28 Reported-by: Rashidwi <rashidwin...@gmail.com> Signed-off-by: Ahmad Fatoum <a.fat...@pengutronix.de> --- common/uimage.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/common/uimage.c b/common/uimage.c index 140a08c1e426..c578edae2606 100644 --- a/common/uimage.c +++ b/common/uimage.c @@ -272,7 +272,9 @@ int uimage_verify(struct uimage_handle *handle) ret = read(handle->fd, buf, now); if (ret < 0) goto err; - crc = crc32(crc, buf, now); + if (!ret) + break; + crc = crc32(crc, buf, ret); len -= ret; } -- 2.39.5