[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <4B50BFFC.8010108@gmail.com>
Date: Fri, 15 Jan 2010 14:20:28 -0500
From: William Allen Simpson <william.allen.simpson@...il.com>
To: Linux Kernel Developers <linux-kernel@...r.kernel.org>
CC: Linux Kernel Network Developers <netdev@...r.kernel.org>,
Andi Kleen <andi@...stfloor.org>
Subject: [PATCH v2] tcp: input header length, prediction, and timestamp bugs
Fix incorrect header prediction flags documentation.
Don't use output calculated tp->tcp_header_len for input decisions.
While the output header is usually the same as the input (same options
in both directions), that's a poor assumption. In particular, Sack will
be different. Newer options are not guaranteed.
Moreover, in the fast path, that only saved a shift or two. The other
efficiencies in this patch more than make up the difference.
Instead, use tp->rx_opt.tstamp_ok to accurately predict header length.
Likewise, use tp->rx_opt.tstamp_ok for received MSS calculations.
Don't use "sizeof(struct tcphdr) + TCPOLEN_TSTAMP_ALIGNED" to guess that
the timestamp is present. This may have been OK in the days with fewer
possible options, but various combinations of newer options may yield
the same header length. (This bug is in 3 places.)
Instead, use tp->rx_opt.saw_tstamp to determine a timestamp is present.
There's no need to test buffer length against header length, already
checked by tcp_v[4,6]_rcv(). Straighten code for minor efficiency gain.
Stand-alone patch, originally developed for TCPCT.
Requires:
net: tcp_header_len_th and tcp_option_len_th
tcp: harmonize tcp_vx_rcv header length assumptions
Signed-off-by: William.Allen.Simpson@...il.com
---
include/linux/tcp.h | 6 +++-
include/net/tcp.h | 9 +++++-
net/ipv4/tcp_input.c | 84 +++++++++++++++++++-------------------------------
3 files changed, 45 insertions(+), 54 deletions(-)
View attachment "len_th+4v2.patch" of type "text/plain" (5606 bytes)
Powered by blists - more mailing lists