From: Karel Zak Date: Wed, 22 May 2019 15:42:48 +0000 (+0200) Subject: libblkid: (silicon raid) improve checksum calculation [-Waddress-of-packed-member] X-Git-Tag: v2.34-rc2~37 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=16d7868fc1c6955fbcd5a825caad496c39ac3014;p=thirdparty%2Futil-linux.git libblkid: (silicon raid) improve checksum calculation [-Waddress-of-packed-member] Let's keep compilers and static analyzers happy. The idea is to use memcpy() to copy from buffer to variable and use all label as unsigned char rather than vectorize by uint16_t. Signed-off-by: Karel Zak --- diff --git a/libblkid/src/superblocks/silicon_raid.c b/libblkid/src/superblocks/silicon_raid.c index edbefbc095..399eea8c4e 100644 --- a/libblkid/src/superblocks/silicon_raid.c +++ b/libblkid/src/superblocks/silicon_raid.c @@ -71,11 +71,15 @@ static uint16_t silraid_checksum(struct silicon_metadata *sil) { int sum = 0; unsigned short count = offsetof(struct silicon_metadata, checksum1) / 2; - uint16_t *p = (uint16_t *) sil; + unsigned char *ptr = (unsigned char *) sil; while (count--) { - uint16_t x = *p++; - sum += le16_to_cpu(x); + uint16_t val; + + memcpy(&val, ptr, sizeof(uint16_t)); + sum += le16_to_cpu(val); + + ptr += sizeof(uint16_t); } return (-sum & 0xFFFF);