From: Thomas Weißschuh Date: Tue, 13 Sep 2022 11:08:49 +0000 (+0200) Subject: libblkid: zonefs: add checksum support X-Git-Tag: v2.39-rc1~515^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=baac95792658012e454023734ebc8d870e0ad6b8;p=thirdparty%2Futil-linux.git libblkid: zonefs: add checksum support Signed-off-by: Thomas Weißschuh --- diff --git a/libblkid/src/superblocks/zonefs.c b/libblkid/src/superblocks/zonefs.c index 2cb7097d4c..b18dc2c6de 100644 --- a/libblkid/src/superblocks/zonefs.c +++ b/libblkid/src/superblocks/zonefs.c @@ -8,6 +8,7 @@ #include #include "superblocks.h" +#include "crc32.h" #define ZONEFS_MAGIC "SFOZ" /* 0x5a4f4653 'Z' 'O' 'F' 'S' */ #define ZONEFS_MAGIC_SIZE 4 @@ -44,10 +45,18 @@ struct zonefs_super { int32_t s_perm; /* Padding to 4096 bytes */ - /* uint8_t s_reserved[4020]; */ + uint8_t s_reserved[4020]; } __attribute__ ((packed)); +static int zonefs_verify_csum(blkid_probe pr, struct zonefs_super *sb) +{ + uint32_t expected = le32_to_cpu(sb->s_crc); + sb->s_crc = 0; + uint32_t crc = ul_crc32(~0LL, (unsigned char *) sb, sizeof(*sb)); + return blkid_probe_verify_csum(pr, crc, expected); +} + static int probe_zonefs(blkid_probe pr, const struct blkid_idmag *mag __attribute__((__unused__))) { @@ -59,6 +68,9 @@ static int probe_zonefs(blkid_probe pr, if (!sb) return errno ? -errno : 1; + if (!zonefs_verify_csum(pr, sb)) + return 1; + if (sb->s_label[0]) blkid_probe_set_label(pr, (unsigned char *) sb->s_label, sizeof(sb->s_label));