From: Ralf Baechle <ralf@linux-mips.org>
To: Dave Johnson <djohnson+linux-mips@sw.starentnetworks.com>
Cc: linux-mips@linux-mips.org
Subject: Re: [PATCH] Fix wrong checksum for split TCP packets on 64-bit MIPS
Date: Wed, 18 Apr 2007 17:17:07 +0100 [thread overview]
Message-ID: <20070418161707.GB24160@linux-mips.org> (raw)
In-Reply-To: <17958.11693.953285.795311@zeus.sw.starentnetworks.com>
On Wed, Apr 18, 2007 at 10:39:41AM -0400, Dave Johnson wrote:
> the following conditions:
>
> 1) The TCP code needs to split a full-sized packet due to a reduced
> MSS (typically due to the addition of TCP options mid-stream like
> SACK).
> _AND_
> 2) The checksum of the 2nd fragment is larger than the checksum of the
> original packet. After subtraction this results in a checksum for
> the 1st fragment with bits 16..31 set to 1. (this is ok)
> _AND_
> 3) The checksum of the 1st fragment's TCP header plus the previously
> 32bit checksum of the 1st fragment DOES NOT cause a 32bit overflow
> when added together. This results in a checksum of the TCP header
> plus TCP data that still has the upper 16 bits as 1's.
> _THEN_
> 4) The TCP+data checksum is added to the checksum of the pseudo IP
> header with csum_tcpudp_nofold() incorrectly (the bug).
>
> The problem is the checksum of the TCP+data is passed to
> csum_tcpudp_nofold() as an 32bit unsigned value, however the assembly
> code acts on it as if it is a 64bit unsigned value.
>
> This causes an incorrect 32->64bit extension if the sum has bit 31
> set. The resulting checksum is off by one.
Sigh. The second bug of this kind. As clever and apparently elegent as
the sign extension stuff happens to look on MIPS as prone to unobvious
accidents it is at times. Oh well.
Applied & thanks!
Ralf
prev parent reply other threads:[~2007-04-18 16:17 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-04-18 14:39 [PATCH] Fix wrong checksum for split TCP packets on 64-bit MIPS Dave Johnson
2007-04-18 16:17 ` Ralf Baechle [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20070418161707.GB24160@linux-mips.org \
--to=ralf@linux-mips.org \
--cc=djohnson+linux-mips@sw.starentnetworks.com \
--cc=linux-mips@linux-mips.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox