From b728e9026011e7b502eaf1768ccecb33d9bc72e7 Mon Sep 17 00:00:00 2001 From: Andre Oppermann Date: Wed, 4 Apr 2007 14:39:49 +0000 Subject: [PATCH] In tcp_dooptions() skip over SACK options if it is a SYN segment. --- sys/netinet/tcp_input.c | 2 ++ sys/netinet/tcp_reass.c | 2 ++ 2 files changed, 4 insertions(+) diff --git a/sys/netinet/tcp_input.c b/sys/netinet/tcp_input.c index e37b656cc2d..5277c46b73e 100644 --- a/sys/netinet/tcp_input.c +++ b/sys/netinet/tcp_input.c @@ -2748,6 +2748,8 @@ tcp_dooptions(struct tcpopt *to, u_char *cp, int cnt, int flags) case TCPOPT_SACK: if (optlen <= 2 || (optlen - 2) % TCPOLEN_SACK != 0) continue; + if (flags & TO_SYN) + continue; to->to_flags |= TOF_SACK; to->to_nsacks = (optlen - 2) / TCPOLEN_SACK; to->to_sacks = cp + 2; diff --git a/sys/netinet/tcp_reass.c b/sys/netinet/tcp_reass.c index e37b656cc2d..5277c46b73e 100644 --- a/sys/netinet/tcp_reass.c +++ b/sys/netinet/tcp_reass.c @@ -2748,6 +2748,8 @@ tcp_dooptions(struct tcpopt *to, u_char *cp, int cnt, int flags) case TCPOPT_SACK: if (optlen <= 2 || (optlen - 2) % TCPOLEN_SACK != 0) continue; + if (flags & TO_SYN) + continue; to->to_flags |= TOF_SACK; to->to_nsacks = (optlen - 2) / TCPOLEN_SACK; to->to_sacks = cp + 2;