diff options
Diffstat (limited to 'net/ipv4/tcp_output.c')
-rw-r--r-- | net/ipv4/tcp_output.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index 2e2eb74ac4cc..b35802af3c4c 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c | |||
@@ -464,6 +464,7 @@ static unsigned tcp_syn_options(struct sock *sk, struct sk_buff *skb, | |||
464 | struct tcp_md5sig_key **md5) { | 464 | struct tcp_md5sig_key **md5) { |
465 | struct tcp_sock *tp = tcp_sk(sk); | 465 | struct tcp_sock *tp = tcp_sk(sk); |
466 | unsigned size = 0; | 466 | unsigned size = 0; |
467 | struct dst_entry *dst = __sk_dst_get(sk); | ||
467 | 468 | ||
468 | #ifdef CONFIG_TCP_MD5SIG | 469 | #ifdef CONFIG_TCP_MD5SIG |
469 | *md5 = tp->af_specific->md5_lookup(sk, sk); | 470 | *md5 = tp->af_specific->md5_lookup(sk, sk); |
@@ -498,7 +499,8 @@ static unsigned tcp_syn_options(struct sock *sk, struct sk_buff *skb, | |||
498 | opts->options |= OPTION_WSCALE; | 499 | opts->options |= OPTION_WSCALE; |
499 | size += TCPOLEN_WSCALE_ALIGNED; | 500 | size += TCPOLEN_WSCALE_ALIGNED; |
500 | } | 501 | } |
501 | if (likely(sysctl_tcp_sack)) { | 502 | if (likely(sysctl_tcp_sack && |
503 | !dst_feature(dst, RTAX_FEATURE_NO_SACK))) { | ||
502 | opts->options |= OPTION_SACK_ADVERTISE; | 504 | opts->options |= OPTION_SACK_ADVERTISE; |
503 | if (unlikely(!(OPTION_TS & opts->options))) | 505 | if (unlikely(!(OPTION_TS & opts->options))) |
504 | size += TCPOLEN_SACKPERM_ALIGNED; | 506 | size += TCPOLEN_SACKPERM_ALIGNED; |