Page MenuHomeFreeBSD

D20374.diff
No OneTemporary

D20374.diff

Index: head/sys/netinet/tcp_syncache.c
===================================================================
--- head/sys/netinet/tcp_syncache.c
+++ head/sys/netinet/tcp_syncache.c
@@ -1142,6 +1142,28 @@
}
}
#endif /* TCP_SIGNATURE */
+
+ /*
+ * RFC 7323 PAWS: If we have a timestamp on this segment and
+ * it's less than ts_recent, drop it.
+ * XXXMT: RFC 7323 also requires to send an ACK.
+ * In tcp_input.c this is only done for TCP segments
+ * with user data, so be consistent here and just drop
+ * the segment.
+ */
+ if (sc->sc_flags & SCF_TIMESTAMP && to->to_flags & TOF_TS &&
+ TSTMP_LT(to->to_tsval, sc->sc_tsreflect)) {
+ SCH_UNLOCK(sch);
+ if ((s = tcp_log_addrs(inc, th, NULL, NULL))) {
+ log(LOG_DEBUG,
+ "%s; %s: SEG.TSval %u < TS.Recent %u, "
+ "segment dropped\n", s, __func__,
+ to->to_tsval, sc->sc_tsreflect);
+ free(s, M_TCPLOG);
+ }
+ return (-1); /* Do not send RST */
+ }
+
/*
* Pull out the entry to unlock the bucket row.
*

File Metadata

Mime Type
text/plain
Expires
Sat, Feb 1, 6:11 AM (21 h, 19 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
16376917
Default Alt Text
D20374.diff (1 KB)

Event Timeline