From: Simon Glass <s...@chromium.org>

Spec v0.9 specifies that the entire bloblist area is checksummed,
including unused portions. Update the code to follow this.

Signed-off-by: Simon Glass <s...@chromium.org>
Signed-off-by: Raymond Mao <raymond....@linaro.org>
---
 common/bloblist.c |  9 +--------
 test/bloblist.c   | 10 ++++++++--
 2 files changed, 9 insertions(+), 10 deletions(-)

diff --git a/common/bloblist.c b/common/bloblist.c
index 70ec0c13e6..96e0a167c2 100644
--- a/common/bloblist.c
+++ b/common/bloblist.c
@@ -317,17 +317,10 @@ int bloblist_resize(uint tag, int new_size)
 
 static u32 bloblist_calc_chksum(struct bloblist_hdr *hdr)
 {
-       struct bloblist_rec *rec;
        u8 chksum;
 
-       chksum = table_compute_checksum(hdr, hdr->hdr_size);
+       chksum = table_compute_checksum(hdr, hdr->alloced);
        chksum += hdr->chksum;
-       foreach_rec(rec, hdr) {
-               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/test/bloblist.c b/test/bloblist.c
index 9e51735d83..32256be772 100644
--- a/test/bloblist.c
+++ b/test/bloblist.c
@@ -226,12 +226,18 @@ static int bloblist_test_checksum(struct unit_test_state 
*uts)
        *data2 -= 1;
 
        /*
-        * Changing data outside the range of valid data should not affect
-        * the checksum.
+        * Changing data outside the range of valid data should affect the
+        * checksum.
         */
        ut_assertok(bloblist_check(TEST_ADDR, TEST_BLOBLIST_SIZE));
        data[TEST_SIZE]++;
+       ut_asserteq(-EIO, bloblist_check(TEST_ADDR, TEST_BLOBLIST_SIZE));
+       data[TEST_SIZE]--;
+       ut_assertok(bloblist_check(TEST_ADDR, TEST_BLOBLIST_SIZE));
+
        data2[TEST_SIZE2]++;
+       ut_asserteq(-EIO, bloblist_check(TEST_ADDR, TEST_BLOBLIST_SIZE));
+       data[TEST_SIZE]--;
        ut_assertok(bloblist_check(TEST_ADDR, TEST_BLOBLIST_SIZE));
 
        return 0;
-- 
2.25.1

Reply via email to