From 16d7868fc1c6955fbcd5a825caad496c39ac3014 Mon Sep 17 00:00:00 2001 From: Karel Zak Date: Wed, 22 May 2019 17:42:48 +0200 Subject: 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 --- libblkid/src/superblocks/silicon_raid.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/libblkid/src/superblocks/silicon_raid.c b/libblkid/src/superblocks/silicon_raid.c index edbefbc09..399eea8c4 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); -- cgit v1.2.3-55-g7522