X-Git-Url: https://tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Froute.c;h=d1048e76dc7c4890ad23c08a4e68048c6d7106a6;hb=7b55200887d05c29abb8cea31aa914e03b806e9a;hp=2e8d94ace2123a1c9cd5485ecfad1cd55f43387b;hpb=f8190b7233871b5b47c3fc8846731d1bbdef78a5;p=tinc diff --git a/src/route.c b/src/route.c index 2e8d94ac..d1048e76 100644 --- a/src/route.c +++ b/src/route.c @@ -63,17 +63,20 @@ static timeout_t age_subnets_timeout; /* RFC 1071 */ -static uint16_t inet_checksum(void *data, int len, uint16_t prevsum) { - uint16_t *p = data; +static uint16_t inet_checksum(void *vdata, int len, uint16_t prevsum) { + uint8_t *data = vdata; + uint16_t word; uint32_t checksum = prevsum ^ 0xFFFF; while(len >= 2) { - checksum += *p++; + memcpy(&word, data, sizeof(word)); + checksum += word; + data += 2; len -= 2; } if(len) { - checksum += *(uint8_t *)p; + checksum += *data; } while(checksum >> 16) {