mail archive of the barebox mailing list
 help / color / mirror / Atom feed
* [PATCH] uimage: fix CRC32 verification on NFS
@ 2024-10-02 16:07 Ahmad Fatoum
  2024-10-14 13:10 ` Sascha Hauer
  2024-10-15  8:17 ` Sascha Hauer
  0 siblings, 2 replies; 6+ messages in thread
From: Ahmad Fatoum @ 2024-10-02 16:07 UTC (permalink / raw)
  To: barebox; +Cc: Rashidwi, Ahmad Fatoum

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 <rashidwinter@gmail.com>
Signed-off-by: Ahmad Fatoum <a.fatoum@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




^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2024-10-15  8:19 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-10-02 16:07 [PATCH] uimage: fix CRC32 verification on NFS Ahmad Fatoum
2024-10-14 13:10 ` Sascha Hauer
2024-10-14 13:18   ` Ahmad Fatoum
2024-10-14 14:52     ` Sascha Hauer
2024-10-14 15:00       ` Ahmad Fatoum
2024-10-15  8:17 ` Sascha Hauer

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox