From b21cc278ce2b88503ea97a05f552001aef632f3d Mon Sep 17 00:00:00 2001 From: russor Date: Mon, 18 Apr 2016 15:22:50 -0700 Subject: [PATCH] correct checksum calculation when adding the overflow overflows you can see this with a bit pattern of FF and a large packet length --- net.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/net.c b/net.c index f743492..60b2b68 100644 --- a/net.c +++ b/net.c @@ -247,8 +247,9 @@ int checksum(void *data, int sz) while (sz--) { sum += *(ch++); } - - sum = (sum >> 16) + (sum & 0xffff); + while (sum >> 16) { + sum = (sum >> 16) + (sum & 0xffff); + } return (~sum & 0xffff); } -- 2.47.2