summaryrefslogtreecommitdiffstats
path: root/libblkid
diff options
context:
space:
mode:
authorKarel Zak2019-05-22 17:42:48 +0200
committerKarel Zak2019-05-22 17:46:14 +0200
commit16d7868fc1c6955fbcd5a825caad496c39ac3014 (patch)
treeacae0232075caad330c0c1a7ef47583e7ea2e0f5 /libblkid
parentlibfdisk: (sgi) improve checksum calculation [-Waddress-of-packed-member] (diff)
downloadkernel-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.c10
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);