TCP checksum problems

Doug Nazar (nazard@man-assoc.on.ca)
Tue, 22 Dec 1998 10:47:09 -0600


I've been seeing the for quite sometime, and I finally got a bit of time to look through the code. I haven't got quite the hang of it
all yet.

As far as I can see, pretty much all packets travel through tcp_v4_rcv() as this is where the checksum is verified. So I added a
little more info the the printk() and noticed that there were a few similiarities between all the bad packets. The LSB was consistant
and the tcp header ptr was equal to the data ptr. I wasn't sure if this was normal so I added another printk(). The code now looks
like:

/* Try to use the device checksum if provided. */
switch (skb->ip_summed) {
case CHECKSUM_NONE:
skb->csum = csum_partial((char *)th, len, 0);
case CHECKSUM_HW:
if (tcp_v4_check(th,len,skb->nh.iph->saddr,skb->nh.iph->daddr,skb->csum)) {
printk(KERN_DEBUG "TCPv4 bad checksum from %d.%d.%d.%d:%04x to %d.%d.%d.%d:%04x, "
"len=%d/%d/%d\n",
NIPQUAD(skb->nh.iph->saddr),
ntohs(th->source),
NIPQUAD(skb->nh.iph->daddr),
ntohs(th->dest),
len, skb->len,
ntohs(skb->nh.iph->tot_len));
printk(KERN_DEBUG " csum=%#x, ip_summed=%i, nh=%#x, h=%#x, data=%#x\n",
skb->csum,
skb->ip_summed,
skb->nh.raw,
skb->h.raw,
skb->data);
bad_packet:
tcp_statistics.TcpInErrs++;
goto discard_it;
}
default:
/* CHECKSUM_UNNECESSARY */
}
if (skb->data == skb->h.raw || ((unsigned long)skb->data & 0x000000ff) == 0x000000b0)
{
printk(KERN_DEBUG "TCPv4 good checksum from %d.%d.%d.%d:%04x to %d.%d.%d.%d:%04x, "
"len=%d/%d/%d\n",
NIPQUAD(skb->nh.iph->saddr),
ntohs(th->source),
NIPQUAD(skb->nh.iph->daddr),
ntohs(th->dest),
len, skb->len,
ntohs(skb->nh.iph->tot_len));
printk(KERN_DEBUG " csum=%#x, ip_summed=%i, nh=%#x, h=%#x, data=%#x\n",
skb->csum,
skb->ip_summed,
skb->nh.raw,
skb->h.raw,
skb->data);
}

Much to my surprise, the second set of printk()'s never got called. I don't quite know what it means anything or maybe I'm just
missing the boat altogether <g>. Here's a section of logs, I can pretty much produce these to order, and see several thousand per
day.

Dec 22 05:36:24 linux02 kernel: TCPv4 bad checksum from 206.204.217.14:0050 to 172.16.0.11:0407, len=1480/1480/1500
Dec 22 05:36:24 linux02 kernel: csum=0xbf857b21, ip_summed=0, nh=0xc3bac09c, h=0xc3bac0b0, data=0xc3bac0b0
Dec 22 05:36:29 linux02 kernel: TCPv4 bad checksum from 206.204.7.75:0050 to 172.16.0.11:0406, len=1480/1480/1500
Dec 22 05:36:29 linux02 kernel: csum=0x7b6e8311, ip_summed=0, nh=0xc3a5e09c, h=0xc3a5e0b0, data=0xc3a5e0b0
Dec 22 05:36:46 linux02 kernel: TCPv4 bad checksum from 206.204.217.14:0050 to 172.16.0.11:0407, len=1480/1480/1500
Dec 22 05:36:46 linux02 kernel: csum=0x19c120e6, ip_summed=0, nh=0xc396009c, h=0xc39600b0, data=0xc39600b0
Dec 22 05:45:45 linux02 kernel: TCPv4 bad checksum from 204.96.213.11:0050 to 172.16.0.11:047e, len=1480/1480/1500
Dec 22 05:45:45 linux02 kernel: csum=0xa2620752, ip_summed=0, nh=0xc3bda09c, h=0xc3bda0b0, data=0xc3bda0b0
Dec 22 05:56:54 linux02 kernel: TCPv4 bad checksum from 143.166.82.8:081e to 172.16.0.11:04f0, len=1480/1480/1500
Dec 22 05:56:54 linux02 kernel: csum=0xe9a87dcb, ip_summed=0, nh=0xc38c409c, h=0xc38c40b0, data=0xc38c40b0
Dec 22 05:57:18 linux02 kernel: TCPv4 bad checksum from 143.166.224.45:0050 to 172.16.0.11:04f3, len=1480/1480/1500
Dec 22 05:57:18 linux02 kernel: csum=0xaaba9743, ip_summed=0, nh=0xc3aac09c, h=0xc3aac0b0, data=0xc3aac0b0
Dec 22 05:59:05 linux02 kernel: TCPv4 bad checksum from 143.166.82.8:0015 to 172.16.0.11:04f7, len=1072/1072/1092
Dec 22 05:59:05 linux02 kernel: csum=0xa90e5660, ip_summed=0, nh=0xc391409c, h=0xc39140b0, data=0xc39140b0
Dec 22 05:59:23 linux02 kernel: TCPv4 bad checksum from 143.166.82.8:083e to 172.16.0.11:04f8, len=1480/1480/1500
Dec 22 05:59:23 linux02 kernel: csum=0x5f53081a, ip_summed=0, nh=0xc3a9009c, h=0xc3a900b0, data=0xc3a900b0
Dec 22 05:59:26 linux02 kernel: TCPv4 bad checksum from 143.166.82.8:083e to 172.16.0.11:04f8, len=1480/1480/1500
Dec 22 05:59:26 linux02 kernel: csum=0x2dc839a5, ip_summed=0, nh=0xc39b409c, h=0xc39b40b0, data=0xc39b40b0
Dec 22 05:59:30 linux02 kernel: TCPv4 bad checksum from 143.166.82.8:083e to 172.16.0.11:04f8, len=1480/1480/1500
Dec 22 05:59:30 linux02 kernel: csum=0xc84c9f20, ip_summed=0, nh=0xc3a7209c, h=0xc3a720b0, data=0xc3a720b0
Dec 22 05:59:39 linux02 kernel: TCPv4 bad checksum from 143.166.82.8:083e to 172.16.0.11:04f8, len=1480/1480/1500
Dec 22 05:59:39 linux02 kernel: csum=0x57fe0fee, ip_summed=0, nh=0xc389009c, h=0xc38900b0, data=0xc38900b0
Dec 22 06:13:38 linux02 kernel: TCPv4 bad checksum from 149.82.3.9:0050 to 172.16.0.11:0573, len=1458/1458/1478
Dec 22 06:13:38 linux02 kernel: csum=0x61cb6eeb, ip_summed=0, nh=0xc2b7c09c, h=0xc2b7c0b0, data=0xc2b7c0b0
Dec 22 06:19:08 linux02 kernel: TCPv4 bad checksum from 206.204.7.138:0050 to 172.16.0.11:0405, len=1480/1480/1500
Dec 22 06:19:08 linux02 kernel: csum=0xe7b5d7c9, ip_summed=0, nh=0xc3c2a09c, h=0xc3c2a0b0, data=0xc3c2a0b0
Dec 22 06:19:08 linux02 kernel: TCPv4 bad checksum from 206.204.7.138:0050 to 172.16.0.11:0405, len=1480/1480/1500
Dec 22 06:19:08 linux02 kernel: csum=0xa40e1b6a, ip_summed=0, nh=0xc3a9209c, h=0xc3a920b0, data=0xc3a920b0
Dec 22 06:19:17 linux02 kernel: TCPv4 bad checksum from 206.204.7.138:0050 to 172.16.0.11:0405, len=1480/1480/1500
Dec 22 06:19:17 linux02 kernel: csum=0x91322e46, ip_summed=0, nh=0xc3ab409c, h=0xc3ab40b0, data=0xc3ab40b0
Dec 22 06:19:21 linux02 kernel: TCPv4 bad checksum from 206.204.7.138:0050 to 172.16.0.11:0405, len=1480/1480/1500
Dec 22 06:19:21 linux02 kernel: csum=0x84fb730, ip_summed=0, nh=0xc23ce09c, h=0xc23ce0b0, data=0xc23ce0b0
Dec 22 06:29:25 linux02 kernel: TCPv4 bad checksum from 206.204.7.74:0050 to 172.16.0.11:0751, len=1480/1480/1500
Dec 22 06:29:25 linux02 kernel: csum=0x25aad9ce, ip_summed=0, nh=0xc045e09c, h=0xc045e0b0, data=0xc045e0b0
Dec 22 06:29:43 linux02 kernel: TCPv4 bad checksum from 206.204.7.74:0050 to 172.16.0.11:0751, len=1480/1480/1500
Dec 22 06:29:43 linux02 kernel: csum=0x35b5c9c3, ip_summed=0, nh=0xc3e6609c, h=0xc3e660b0, data=0xc3e660b0
Dec 22 06:30:05 linux02 kernel: TCPv4 bad checksum from 206.204.7.74:0050 to 172.16.0.11:0751, len=1480/1480/1500
Dec 22 06:30:05 linux02 kernel: csum=0xf4160b62, ip_summed=0, nh=0xc177609c, h=0xc17760b0, data=0xc17760b0
Dec 22 06:30:15 linux02 kernel: TCPv4 bad checksum from 206.204.7.74:0050 to 172.16.0.11:0751, len=1480/1480/1500
Dec 22 06:30:15 linux02 kernel: csum=0xc2853cf3, ip_summed=0, nh=0xc395e09c, h=0xc395e0b0, data=0xc395e0b0
Dec 22 06:30:18 linux02 kernel: TCPv4 bad checksum from 206.204.7.74:0050 to 172.16.0.11:0751, len=1480/1480/1500
Dec 22 06:30:18 linux02 kernel: csum=0xa6565922, ip_summed=0, nh=0xc397809c, h=0xc39780b0, data=0xc39780b0
Dec 22 06:30:27 linux02 kernel: TCPv4 bad checksum from 206.204.7.74:0050 to 172.16.0.11:0751, len=1480/1480/1500
Dec 22 06:30:27 linux02 kernel: csum=0x6a549524, ip_summed=0, nh=0xc3ea409c, h=0xc3ea40b0, data=0xc3ea40b0
Dec 22 06:30:34 linux02 kernel: TCPv4 bad checksum from 206.204.7.74:0050 to 172.16.0.11:0f51, len=1480/1480/1500
Dec 22 06:30:34 linux02 kernel: csum=0xefd40fab, ip_summed=0, nh=0xc3a8809c, h=0xc3a880b0, data=0xc3a880b0
Dec 22 06:30:38 linux02 kernel: TCPv4 bad checksum from 206.204.7.74:0050 to 172.16.0.11:0751, len=1480/1480/1500
Dec 22 06:30:38 linux02 kernel: csum=0xcaaa34d5, ip_summed=0, nh=0xc3a0a09c, h=0xc3a0a0b0, data=0xc3a0a0b0
Dec 22 06:30:46 linux02 kernel: TCPv4 bad checksum from 206.204.7.74:0050 to 172.16.0.11:0751, len=1480/1480/1500
Dec 22 06:30:46 linux02 kernel: csum=0x1622e956, ip_summed=0, nh=0xc3e7c09c, h=0xc3e7c0b0, data=0xc3e7c0b0
Dec 22 06:30:55 linux02 kernel: TCPv4 bad checksum from 206.204.7.74:0050 to 172.16.0.11:0751, len=1480/1480/1500
Dec 22 06:30:55 linux02 kernel: csum=0xc80e3771, ip_summed=0, nh=0xc38ee09c, h=0xc38ee0b0, data=0xc38ee0b0
Dec 22 06:30:57 linux02 kernel: TCPv4 bad checksum from 206.204.7.74:0050 to 172.16.0.11:0751, len=1480/1480/1500
Dec 22 06:30:57 linux02 kernel: csum=0xa34c5c2c, ip_summed=0, nh=0xc2aa209c, h=0xc2aa20b0, data=0xc2aa20b0
Dec 22 06:31:01 linux02 kernel: TCPv4 bad checksum from 206.204.7.74:0050 to 172.16.0.11:0751, len=1480/1480/1500
Dec 22 06:31:01 linux02 kernel: csum=0xb3ff4b80, ip_summed=0, nh=0xc04e609c, h=0xc04e60b0, data=0xc04e60b0
Dec 22 06:31:06 linux02 kernel: TCPv4 bad checksum from 206.204.7.74:0050 to 172.16.0.11:0751, len=1480/1480/1500
Dec 22 06:31:06 linux02 kernel: csum=0xb6f9487f, ip_summed=0, nh=0xc218c09c, h=0xc218c0b0, data=0xc218c0b0
Dec 22 06:31:23 linux02 kernel: TCPv4 bad checksum from 206.204.7.74:0050 to 172.16.0.11:0751, len=1480/1480/1500
Dec 22 06:31:23 linux02 kernel: csum=0xdee52093, ip_summed=0, nh=0xc38c009c, h=0xc38c00b0, data=0xc38c00b0
Dec 22 06:31:25 linux02 kernel: TCPv4 bad checksum from 206.204.7.74:0050 to 172.16.0.11:0751, len=1480/1480/1500
Dec 22 06:31:25 linux02 kernel: csum=0x3a26c552, ip_summed=0, nh=0xc1fc409c, h=0xc1fc40b0, data=0xc1fc40b0
Dec 22 06:31:46 linux02 kernel: TCPv4 bad checksum from 206.204.7.74:0050 to 172.16.0.11:0751, len=1480/1480/1500
Dec 22 06:31:46 linux02 kernel: csum=0xa56f5a09, ip_summed=0, nh=0xc38c609c, h=0xc38c60b0, data=0xc38c60b0
Dec 22 06:44:48 linux02 kernel: TCPv4 bad checksum from 206.204.217.15:0050 to 172.16.0.11:0407, len=1480/1480/1500
Dec 22 06:44:48 linux02 kernel: csum=0xd2e366c3, ip_summed=0, nh=0xc114c09c, h=0xc114c0b0, data=0xc114c0b0
Dec 22 06:45:03 linux02 kernel: TCPv4 bad checksum from 206.204.217.15:0050 to 172.16.0.11:0407, len=1480/1480/1500
Dec 22 06:45:03 linux02 kernel: csum=0x12532754, ip_summed=0, nh=0xc124809c, h=0xc12480b0, data=0xc12480b0
Dec 22 06:45:03 linux02 kernel: TCPv4 bad checksum from 206.204.7.74:0050 to 172.16.0.11:0405, len=1480/1480/1500
Dec 22 06:45:03 linux02 kernel: csum=0x72b08cc8, ip_summed=0, nh=0xc0d1209c, h=0xc0d120b0, data=0xc0d120b0
Dec 22 06:45:24 linux02 kernel: TCPv4 bad checksum from 206.204.7.74:0050 to 172.16.0.11:0405, len=1480/1480/1500
Dec 22 06:45:24 linux02 kernel: csum=0xbe204158, ip_summed=0, nh=0xc123009c, h=0xc12300b0, data=0xc12300b0
Dec 22 06:45:28 linux02 kernel: TCPv4 bad checksum from 206.204.7.74:0050 to 172.16.0.11:0505, len=1480/1480/1500
Dec 22 06:45:28 linux02 kernel: csum=0xd99a25de, ip_summed=0, nh=0xc3e1409c, h=0xc3e140b0, data=0xc3e140b0
Dec 22 06:45:29 linux02 kernel: TCPv4 bad checksum from 206.204.217.15:0050 to 172.16.0.11:0507, len=1480/1480/1500
Dec 22 06:45:29 linux02 kernel: csum=0xcf5c6a4a, ip_summed=0, nh=0xc110009c, h=0xc11000b0, data=0xc11000b0
Dec 22 06:45:38 linux02 kernel: TCPv4 bad checksum from 206.204.217.15:0050 to 172.16.0.11:0407, len=1480/1480/1500
Dec 22 06:45:38 linux02 kernel: csum=0xc4b274f4, ip_summed=0, nh=0xc3ea209c, h=0xc3ea20b0, data=0xc3ea20b0
Dec 22 06:45:40 linux02 kernel: TCPv4 bad checksum from 206.204.217.15:0050 to 172.16.0.11:0407, len=1480/1480/1500
Dec 22 06:45:40 linux02 kernel: csum=0x631cd691, ip_summed=0, nh=0xc110a09c, h=0xc110a0b0, data=0xc110a0b0
Dec 22 06:45:48 linux02 kernel: TCPv4 bad checksum from 206.204.217.15:0050 to 172.16.0.11:0407, len=1480/1480/1500
Dec 22 06:45:48 linux02 kernel: csum=0xbf877a1f, ip_summed=0, nh=0xc115209c, h=0xc11520b0, data=0xc11520b0
Dec 22 06:45:58 linux02 kernel: TCPv4 bad checksum from 206.204.217.15:0050 to 172.16.0.11:0407, len=1480/1480/1500
Dec 22 06:45:58 linux02 kernel: csum=0x1bd71dd0, ip_summed=0, nh=0xc16d809c, h=0xc16d80b0, data=0xc16d80b0
Dec 22 06:46:06 linux02 kernel: TCPv4 bad checksum from 206.204.7.74:0050 to 172.16.0.11:0405, len=1480/1480/1500
Dec 22 06:46:06 linux02 kernel: csum=0x789986df, ip_summed=0, nh=0xc3e5c09c, h=0xc3e5c0b0, data=0xc3e5c0b0
Dec 22 06:46:09 linux02 kernel: TCPv4 bad checksum from 206.204.217.15:0050 to 172.16.0.11:0407, len=1480/1480/1500
Dec 22 06:46:09 linux02 kernel: csum=0x6462d5c3, ip_summed=0, nh=0xc12d209c, h=0xc12d20b0, data=0xc12d20b0
Dec 22 06:46:10 linux02 kernel: TCPv4 bad checksum from 206.204.7.74:0050 to 172.16.0.11:0405, len=1480/1480/1500
Dec 22 06:46:10 linux02 kernel: csum=0xe9bb15bd, ip_summed=0, nh=0xc0faa09c, h=0xc0faa0b0, data=0xc0faa0b0
Dec 22 06:46:18 linux02 kernel: TCPv4 bad checksum from 206.204.7.74:0050 to 172.16.0.11:0405, len=1480/1480/1500
Dec 22 06:46:18 linux02 kernel: csum=0x814b7e2d, ip_summed=0, nh=0xc120209c, h=0xc12020b0, data=0xc12020b0
Dec 22 06:46:28 linux02 kernel: TCPv4 bad checksum from 206.204.7.74:0050 to 172.16.0.11:0405, len=1480/1480/1500
Dec 22 06:46:28 linux02 kernel: csum=0x9b1f5c7, ip_summed=0, nh=0xc11f609c, h=0xc11f60b0, data=0xc11f60b0
Dec 22 06:46:29 linux02 kernel: TCPv4 bad checksum from 206.204.7.74:0050 to 172.16.0.11:0405, len=1480/1480/1500
Dec 22 06:46:29 linux02 kernel: csum=0x63719c07, ip_summed=0, nh=0xc0faa09c, h=0xc0faa0b0, data=0xc0faa0b0
Dec 22 06:46:47 linux02 kernel: TCPv4 bad checksum from 206.204.7.74:0050 to 172.16.0.11:0405, len=1480/1480/1500
Dec 22 06:46:47 linux02 kernel: csum=0xa2215d5e, ip_summed=0, nh=0xc125209c, h=0xc12520b0, data=0xc12520b0
Dec 22 06:46:48 linux02 kernel: TCPv4 bad checksum from 206.204.7.74:0050 to 172.16.0.11:0405, len=1480/1480/1500
Dec 22 06:46:48 linux02 kernel: csum=0x4a7cb503, ip_summed=0, nh=0xc0f8609c, h=0xc0f860b0, data=0xc0f860b0
Dec 22 06:46:48 linux02 kernel: TCPv4 bad checksum from 206.204.217.15:0050 to 172.16.0.11:0407, len=1480/1480/1500
Dec 22 06:46:48 linux02 kernel: csum=0xa479952d, ip_summed=0, nh=0xc107a09c, h=0xc107a0b0, data=0xc107a0b0

Doug Nazar

Phone: (416) 708-1578
Fax: (416) 708-8081

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/