[PATCH v2 08/18] bloblist: Change the checksum algorithm
Raymond Mao
raymond.mao at linaro.org
Mon Nov 27 20:50:19 CET 2023
From: Simon Glass <sjg at chromium.org>
Use a sinple 8-bit checksum for bloblist, as specified by the spec
version 0.9
Signed-off-by: Simon Glass <sjg at chromium.org>
Signed-off-by: Raymond Mao <raymond.mao at linaro.org>
---
common/bloblist.c | 14 ++++++++------
include/bloblist.h | 5 ++---
2 files changed, 10 insertions(+), 9 deletions(-)
diff --git a/common/bloblist.c b/common/bloblist.c
index 691f86f600..70ec0c13e6 100644
--- a/common/bloblist.c
+++ b/common/bloblist.c
@@ -13,6 +13,7 @@
#include <malloc.h>
#include <mapmem.h>
#include <spl.h>
+#include <tables_csum.h>
#include <asm/global_data.h>
#include <u-boot/crc.h>
@@ -317,14 +318,15 @@ int bloblist_resize(uint tag, int new_size)
static u32 bloblist_calc_chksum(struct bloblist_hdr *hdr)
{
struct bloblist_rec *rec;
- u32 chksum;
+ u8 chksum;
- chksum = crc32(0, (unsigned char *)hdr,
- offsetof(struct bloblist_hdr, chksum));
+ chksum = table_compute_checksum(hdr, hdr->hdr_size);
+ chksum += hdr->chksum;
foreach_rec(rec, hdr) {
- chksum = crc32(chksum, (void *)rec, rec_hdr_size(rec));
- chksum = crc32(chksum, (void *)rec + rec_hdr_size(rec),
- rec->size);
+ chksum -= table_compute_checksum((void *)rec,
+ rec_hdr_size(rec));
+ chksum -= table_compute_checksum((void *)rec +
+ rec_hdr_size(rec), rec->size);
}
return chksum;
diff --git a/include/bloblist.h b/include/bloblist.h
index d46bf060d7..ab7a7fc299 100644
--- a/include/bloblist.h
+++ b/include/bloblist.h
@@ -170,11 +170,10 @@ enum bloblist_tag_t {
* @alloced: Total size allocated so far for this bloblist. This starts out as
* sizeof(bloblist_hdr) since we need at least that much space to store a
* valid bloblist
- * @chksum: CRC32 for the entire bloblist allocated area. Since any of the
+ * @chksum: checksum for the entire bloblist allocated area. Since any of the
* blobs can be altered after being created, this checksum is only valid
* when the bloblist is finalised before jumping to the next stage of boot.
- * Note that chksum is last to make it easier to exclude it from the
- * checksum calculation.
+ * This is the value needed to make all checksummed bytes sum to 0
*/
struct bloblist_hdr {
u32 magic;
--
2.25.1
More information about the U-Boot
mailing list