summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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);