Commit 7982d5e1 authored by Philip Love's avatar Philip Love Committed by David S. Miller

tcp: fix tcp header size miscalculation when window scale is unused

The size of the TCP header is miscalculated when the window scale ends
up being 0. Additionally, this can be induced by sending a SYN to a
passive open port with a window scale option with value 0.
Signed-off-by: default avatarPhilip Love <love_phil@emc.com>
Signed-off-by: default avatarAdam Langley <agl@imperialviolet.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent fe439dd0
...@@ -468,7 +468,8 @@ static unsigned tcp_syn_options(struct sock *sk, struct sk_buff *skb, ...@@ -468,7 +468,8 @@ static unsigned tcp_syn_options(struct sock *sk, struct sk_buff *skb,
} }
if (likely(sysctl_tcp_window_scaling)) { if (likely(sysctl_tcp_window_scaling)) {
opts->ws = tp->rx_opt.rcv_wscale; opts->ws = tp->rx_opt.rcv_wscale;
size += TCPOLEN_WSCALE_ALIGNED; if(likely(opts->ws))
size += TCPOLEN_WSCALE_ALIGNED;
} }
if (likely(sysctl_tcp_sack)) { if (likely(sysctl_tcp_sack)) {
opts->options |= OPTION_SACK_ADVERTISE; opts->options |= OPTION_SACK_ADVERTISE;
...@@ -509,7 +510,8 @@ static unsigned tcp_synack_options(struct sock *sk, ...@@ -509,7 +510,8 @@ static unsigned tcp_synack_options(struct sock *sk,
if (likely(ireq->wscale_ok)) { if (likely(ireq->wscale_ok)) {
opts->ws = ireq->rcv_wscale; opts->ws = ireq->rcv_wscale;
size += TCPOLEN_WSCALE_ALIGNED; if(likely(opts->ws))
size += TCPOLEN_WSCALE_ALIGNED;
} }
if (likely(doing_ts)) { if (likely(doing_ts)) {
opts->options |= OPTION_TS; opts->options |= OPTION_TS;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment