From: Thomas Weißschuh Date: Tue, 13 Sep 2022 12:09:34 +0000 (+0200) Subject: libblkid: ubi: add checksum support X-Git-Tag: v2.39-rc1~514^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e83923fedcbc250fc7516125852b7cc14778d97c;p=thirdparty%2Futil-linux.git libblkid: ubi: add checksum support Signed-off-by: Thomas Weißschuh --- 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));