From e83923fedcbc250fc7516125852b7cc14778d97c Mon Sep 17 00:00:00 2001 From: =?utf8?q?Thomas=20Wei=C3=9Fschuh?= Date: Tue, 13 Sep 2022 14:09:34 +0200 Subject: [PATCH] libblkid: ubi: add checksum support MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Thomas Weißschuh --- libblkid/src/superblocks/ubi.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/libblkid/src/superblocks/ubi.c b/libblkid/src/superblocks/ubi.c index 0739c32c6e..fbb7c5e33b 100644 --- a/libblkid/src/superblocks/ubi.c +++ b/libblkid/src/superblocks/ubi.c @@ -11,6 +11,7 @@ #include #include "superblocks.h" +#include "crc32.h" struct ubi_ec_hdr { uint32_t magic; @@ -24,6 +25,14 @@ struct ubi_ec_hdr { uint32_t hdr_crc; } __attribute__((packed)); +static int ubi_verify_csum(blkid_probe pr, const struct ubi_ec_hdr *hdr) +{ + return blkid_probe_verify_csum(pr, + ul_crc32(~0LL, (unsigned char *) hdr, + sizeof(*hdr) - sizeof(hdr->hdr_crc)), + be32_to_cpu(hdr->hdr_crc)); +} + static int probe_ubi(blkid_probe pr, const struct blkid_idmag *mag) { struct ubi_ec_hdr *hdr; @@ -32,6 +41,9 @@ static int probe_ubi(blkid_probe pr, const struct blkid_idmag *mag) if (!hdr) return -1; + if (!ubi_verify_csum(pr, hdr)) + return -1; + blkid_probe_sprintf_version(pr, "%u", hdr->version); blkid_probe_sprintf_uuid(pr, (unsigned char *)&hdr->image_seq, 4, "%u", be32_to_cpu(hdr->image_seq)); -- 2.47.3