diff options
-rw-r--r-- | libfdisk/src/bsd.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/libfdisk/src/bsd.c b/libfdisk/src/bsd.c index 90b44b963..4e05bb328 100644 --- a/libfdisk/src/bsd.c +++ b/libfdisk/src/bsd.c @@ -736,13 +736,20 @@ done: static unsigned short bsd_dkcksum (struct bsd_disklabel *lp) { - unsigned short *start, *end; + unsigned char *ptr, *end; unsigned short sum = 0; - start = (unsigned short *) lp; - end = (unsigned short *) &lp->d_partitions[lp->d_npartitions]; - while (start < end) - sum ^= *start++; + ptr = (unsigned char *) lp; + end = (unsigned char *) &lp->d_partitions[lp->d_npartitions]; + + while (ptr < end) { + unsigned short val; + + memcpy(&val, ptr, sizeof(unsigned short)); + sum ^= val; + + ptr += sizeof(unsigned short); + } return sum; } |