From 50c9e4b0864ceb9bb9c4c415ebb72a5e7c3c487a Mon Sep 17 00:00:00 2001 From: =?utf8?q?Thomas=20Wei=C3=9Fschuh?= Date: Tue, 13 Sep 2022 14:26:37 +0200 Subject: [PATCH] libblkid: ubifs: 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/ubifs.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/libblkid/src/superblocks/ubifs.c b/libblkid/src/superblocks/ubifs.c index dc84260632..0631423290 100644 --- a/libblkid/src/superblocks/ubifs.c +++ b/libblkid/src/superblocks/ubifs.c @@ -11,6 +11,7 @@ #include #include "superblocks.h" +#include "crc32.h" /* * struct ubifs_ch - common header node. @@ -93,6 +94,15 @@ struct ubifs_sb_node { uint8_t padding2[3968]; } __attribute__ ((packed)); +static int ubifs_verify_csum(blkid_probe pr, const struct ubifs_sb_node *sb) +{ + size_t csummed_offset = offsetof(struct ubifs_ch, sqnum); + uint32_t crc = ul_crc32(~0LL, + (unsigned char *) sb + csummed_offset, + sizeof(*sb) - csummed_offset); + return blkid_probe_verify_csum(pr, crc, le32_to_cpu(sb->ch.crc)); +} + static int probe_ubifs(blkid_probe pr, const struct blkid_idmag *mag) { struct ubifs_sb_node *sb; @@ -101,6 +111,9 @@ static int probe_ubifs(blkid_probe pr, const struct blkid_idmag *mag) if (!sb) return errno ? -errno : 1; + if (!ubifs_verify_csum(pr, sb)) + return 1; + blkid_probe_set_uuid(pr, sb->uuid); blkid_probe_sprintf_version(pr, "w%dr%d", le32_to_cpu(sb->fmt_version), -- 2.47.3