summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorandre <andre@FreeBSD.org>2007-04-04 14:39:49 +0000
committerandre <andre@FreeBSD.org>2007-04-04 14:39:49 +0000
commit37b70e01e6fd621bdd54d46df7cc80b7b5eacb7c (patch)
tree0cf6e08e19d9c170168c857e7e1bd45e29b31239
parent1b7b9ce89e71aa655fa0c0589ff9352b5100c6e7 (diff)
downloadFreeBSD-src-37b70e01e6fd621bdd54d46df7cc80b7b5eacb7c.zip
FreeBSD-src-37b70e01e6fd621bdd54d46df7cc80b7b5eacb7c.tar.gz
In tcp_dooptions() skip over SACK options if it is a SYN segment.
-rw-r--r--sys/netinet/tcp_input.c2
-rw-r--r--sys/netinet/tcp_reass.c2
2 files changed, 4 insertions, 0 deletions
diff --git a/sys/netinet/tcp_input.c b/sys/netinet/tcp_input.c
index e37b656..5277c46 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 e37b656..5277c46 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;
OpenPOWER on IntegriCloud