diff options
author | Karel Zak | 2019-05-22 17:42:48 +0200 |
---|---|---|
committer | Karel Zak | 2019-05-22 17:46:14 +0200 |
commit | 16d7868fc1c6955fbcd5a825caad496c39ac3014 (patch) | |
tree | acae0232075caad330c0c1a7ef47583e7ea2e0f5 /libblkid | |
parent | libfdisk: (sgi) improve checksum calculation [-Waddress-of-packed-member] (diff) | |
download | kernel-qcow2-util-linux-16d7868fc1c6955fbcd5a825caad496c39ac3014.tar.gz kernel-qcow2-util-linux-16d7868fc1c6955fbcd5a825caad496c39ac3014.tar.xz kernel-qcow2-util-linux-16d7868fc1c6955fbcd5a825caad496c39ac3014.zip |
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 <kzak@redhat.com>
Diffstat (limited to 'libblkid')
-rw-r--r-- | libblkid/src/superblocks/silicon_raid.c | 10 |
1 files 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); |