summaryrefslogtreecommitdiffstats
path: root/sys/netinet
diff options
context:
space:
mode:
authorwollman <wollman@FreeBSD.org>1995-10-03 16:54:17 +0000
committerwollman <wollman@FreeBSD.org>1995-10-03 16:54:17 +0000
commit3fc43db861e597f1130b985d780f0197ed473b13 (patch)
tree7ad9eaf1935c4be274c953c161f45e2d25f3433c /sys/netinet
parent6620dab5e12bef027febd61c323aedb2f252e1e6 (diff)
downloadFreeBSD-src-3fc43db861e597f1130b985d780f0197ed473b13.zip
FreeBSD-src-3fc43db861e597f1130b985d780f0197ed473b13.tar.gz
Finish 4.4-Lite-2 merge: randomize TCP initial sequence numbers
to make ISS-guessing spoofing attacks harder.
Diffstat (limited to 'sys/netinet')
-rw-r--r--sys/netinet/tcp_input.c14
-rw-r--r--sys/netinet/tcp_reass.c14
-rw-r--r--sys/netinet/tcp_seq.h29
-rw-r--r--sys/netinet/tcp_subr.c8
-rw-r--r--sys/netinet/tcp_timer.c24
-rw-r--r--sys/netinet/tcp_timewait.c8
6 files changed, 62 insertions, 35 deletions
diff --git a/sys/netinet/tcp_input.c b/sys/netinet/tcp_input.c
index 8e2bdf0..7762f81 100644
--- a/sys/netinet/tcp_input.c
+++ b/sys/netinet/tcp_input.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1982, 1986, 1988, 1990, 1993, 1994
+ * Copyright (c) 1982, 1986, 1988, 1990, 1993, 1994, 1995
* The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -30,8 +30,8 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * From: @(#)tcp_input.c 8.5 (Berkeley) 4/10/94
- * $Id: tcp_input.c,v 1.27 1995/07/10 15:39:13 wollman Exp $
+ * @(#)tcp_input.c 8.12 (Berkeley) 5/24/95
+ * $Id: tcp_input.c,v 1.28 1995/07/31 10:24:22 olah Exp $
*/
#ifndef TUBA_INCLUDE
@@ -45,6 +45,8 @@
#include <sys/errno.h>
#include <sys/queue.h>
+#include <machine/cpu.h> /* before tcp_seq.h, for tcp_random18() */
+
#include <net/if.h>
#include <net/route.h>
@@ -243,7 +245,7 @@ tcp_input(m, iphlen)
{
register struct tcpiphdr *ti;
register struct inpcb *inp;
- caddr_t optp = NULL;
+ u_char *optp = NULL;
int optlen = 0;
int len, tlen, off;
register struct tcpcb *tp = 0;
@@ -315,7 +317,7 @@ tcp_input(m, iphlen)
ti = mtod(m, struct tcpiphdr *);
}
optlen = off - sizeof (struct tcphdr);
- optp = mtod(m, caddr_t) + sizeof (struct tcpiphdr);
+ optp = mtod(m, u_char *) + sizeof (struct tcpiphdr);
/*
* Do quick retrieval of timestamp options ("options
* prediction?"). If timestamp is the only option and it's
@@ -650,7 +652,7 @@ findpcb:
tp->iss = iss;
else
tp->iss = tcp_iss;
- tcp_iss += TCP_ISSINCR/2;
+ tcp_iss += TCP_ISSINCR/4;
tp->irs = ti->ti_seq;
tcp_sendseqinit(tp);
tcp_rcvseqinit(tp);
diff --git a/sys/netinet/tcp_reass.c b/sys/netinet/tcp_reass.c
index 8e2bdf0..7762f81 100644
--- a/sys/netinet/tcp_reass.c
+++ b/sys/netinet/tcp_reass.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1982, 1986, 1988, 1990, 1993, 1994
+ * Copyright (c) 1982, 1986, 1988, 1990, 1993, 1994, 1995
* The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -30,8 +30,8 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * From: @(#)tcp_input.c 8.5 (Berkeley) 4/10/94
- * $Id: tcp_input.c,v 1.27 1995/07/10 15:39:13 wollman Exp $
+ * @(#)tcp_input.c 8.12 (Berkeley) 5/24/95
+ * $Id: tcp_input.c,v 1.28 1995/07/31 10:24:22 olah Exp $
*/
#ifndef TUBA_INCLUDE
@@ -45,6 +45,8 @@
#include <sys/errno.h>
#include <sys/queue.h>
+#include <machine/cpu.h> /* before tcp_seq.h, for tcp_random18() */
+
#include <net/if.h>
#include <net/route.h>
@@ -243,7 +245,7 @@ tcp_input(m, iphlen)
{
register struct tcpiphdr *ti;
register struct inpcb *inp;
- caddr_t optp = NULL;
+ u_char *optp = NULL;
int optlen = 0;
int len, tlen, off;
register struct tcpcb *tp = 0;
@@ -315,7 +317,7 @@ tcp_input(m, iphlen)
ti = mtod(m, struct tcpiphdr *);
}
optlen = off - sizeof (struct tcphdr);
- optp = mtod(m, caddr_t) + sizeof (struct tcpiphdr);
+ optp = mtod(m, u_char *) + sizeof (struct tcpiphdr);
/*
* Do quick retrieval of timestamp options ("options
* prediction?"). If timestamp is the only option and it's
@@ -650,7 +652,7 @@ findpcb:
tp->iss = iss;
else
tp->iss = tcp_iss;
- tcp_iss += TCP_ISSINCR/2;
+ tcp_iss += TCP_ISSINCR/4;
tp->irs = ti->ti_seq;
tcp_sendseqinit(tp);
tcp_rcvseqinit(tp);
diff --git a/sys/netinet/tcp_seq.h b/sys/netinet/tcp_seq.h
index 6f0532f..f2fff27 100644
--- a/sys/netinet/tcp_seq.h
+++ b/sys/netinet/tcp_seq.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1982, 1986, 1993
+ * Copyright (c) 1982, 1986, 1993, 1995
* The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -30,8 +30,8 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * @(#)tcp_seq.h 8.1 (Berkeley) 6/10/93
- * $Id: tcp_seq.h,v 1.4 1995/02/08 20:18:46 wollman Exp $
+ * @(#)tcp_seq.h 8.3 (Berkeley) 6/21/95
+ * $Id: tcp_seq.h,v 1.5 1995/02/14 02:35:17 wollman Exp $
*/
#ifndef _NETINET_TCP_SEQ_H_
@@ -75,13 +75,28 @@
(tp)->snd_una = (tp)->snd_nxt = (tp)->snd_max = (tp)->snd_up = \
(tp)->iss
-#define TCP_ISSINCR (125*1024) /* increment for tcp_iss each second */
-
#define TCP_PAWS_IDLE (24 * 24 * 60 * 60 * PR_SLOWHZ)
/* timestamp wrap-around time */
#ifdef KERNEL
-extern tcp_seq tcp_iss; /* tcp initial send seq # */
extern tcp_cc tcp_ccgen; /* global connection count */
+
+/*
+ * Increment for tcp_iss each second.
+ * This is designed to increment at the standard 250 KB/s,
+ * but with a random component averaging 128 KB.
+ * We also increment tcp_iss by a quarter of this amount
+ * each time we use the value for a new connection.
+ * If defined, the tcp_random18() macro should produce a
+ * number in the range [0-0x3ffff] that is hard to predict.
+ */
+#ifndef tcp_random18
+#define tcp_random18() ((random() >> 14) & 0x3ffff)
#endif
-#endif
+#define TCP_ISSINCR (122*1024 + tcp_random18())
+
+extern tcp_seq tcp_iss; /* tcp initial send seq # */
+#else
+#define TCP_ISSINCR (250*1024) /* increment for tcp_iss each second */
+#endif /* KERNEL */
+#endif /* _NETINET_TCP_SEQ_H_ */
diff --git a/sys/netinet/tcp_subr.c b/sys/netinet/tcp_subr.c
index a614854..d166bba 100644
--- a/sys/netinet/tcp_subr.c
+++ b/sys/netinet/tcp_subr.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1982, 1986, 1988, 1990, 1993
+ * Copyright (c) 1982, 1986, 1988, 1990, 1993, 1995
* The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -30,8 +30,8 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * @(#)tcp_subr.c 8.1 (Berkeley) 6/10/93
- * $Id: tcp_subr.c,v 1.15 1995/09/20 21:00:59 wollman Exp $
+ * @(#)tcp_subr.c 8.2 (Berkeley) 5/24/95
+ * $Id: tcp_subr.c,v 1.16 1995/09/22 17:43:37 wollman Exp $
*/
#include <sys/param.h>
@@ -87,7 +87,7 @@ void
tcp_init()
{
- tcp_iss = 1; /* wrong */
+ tcp_iss = random(); /* wrong, but better than a constant */
tcp_ccgen = 1;
tcp_cleartaocache();
LIST_INIT(&tcb);
diff --git a/sys/netinet/tcp_timer.c b/sys/netinet/tcp_timer.c
index 9badee0..c3da457 100644
--- a/sys/netinet/tcp_timer.c
+++ b/sys/netinet/tcp_timer.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1982, 1986, 1988, 1990, 1993
+ * Copyright (c) 1982, 1986, 1988, 1990, 1993, 1995
* The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -30,8 +30,8 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * @(#)tcp_timer.c 8.1 (Berkeley) 6/10/93
- * $Id: tcp_timer.c,v 1.7 1995/05/30 08:09:59 rgrimes Exp $
+ * @(#)tcp_timer.c 8.2 (Berkeley) 5/24/95
+ * $Id: tcp_timer.c,v 1.8 1995/07/29 18:48:43 davidg Exp $
*/
#ifndef TUBA_INCLUDE
@@ -45,6 +45,8 @@
#include <sys/errno.h>
#include <sys/queue.h>
+#include <machine/cpu.h> /* before tcp_seq.h, for tcp_random18() */
+
#include <net/if.h>
#include <net/route.h>
@@ -62,10 +64,14 @@
int tcp_keepidle = TCPTV_KEEP_IDLE;
int tcp_keepintvl = TCPTV_KEEPINTVL;
+int tcp_keepcnt = TCPTV_KEEPCNT; /* max idle probes */
+int tcp_maxpersistidle = TCPTV_KEEP_IDLE; /* max idle time in persist */
int tcp_maxidle;
-int tcp_maxpersistidle = TCPTV_KEEP_IDLE;
-int tcp_totbackoff = 511;
+#else /* TUBA_INCLUDE */
+
+extern int tcp_maxpersistidle;
#endif /* TUBA_INCLUDE */
+
/*
* Fast timeout routine for processing delayed acks
*/
@@ -105,7 +111,7 @@ tcp_slowtimo()
s = splnet();
- tcp_maxidle = TCPTV_KEEPCNT * tcp_keepintvl;
+ tcp_maxidle = tcp_keepcnt * tcp_keepintvl;
ip = tcb.lh_first;
if (ip == NULL) {
@@ -118,7 +124,7 @@ tcp_slowtimo()
for (; ip != NULL; ip = ipnxt) {
ipnxt = ip->inp_list.le_next;
tp = intotcpcb(ip);
- if (tp == 0)
+ if (tp == 0 || tp->t_state == TCPS_LISTEN)
continue;
for (i = 0; i < TCPT_NTIMERS; i++) {
if (tp->t_timer[i] && --tp->t_timer[i] == 0) {
@@ -138,7 +144,7 @@ tpgone:
tcp_iss += TCP_ISSINCR/PR_SLOWHZ; /* increment iss */
#ifdef TCP_COMPAT_42
if ((int)tcp_iss < 0)
- tcp_iss = 0; /* XXX */
+ tcp_iss = TCP_ISSINCR; /* XXX */
#endif
tcp_now++; /* for timestamps */
splx(s);
@@ -161,6 +167,8 @@ tcp_canceltimers(tp)
int tcp_backoff[TCP_MAXRXTSHIFT + 1] =
{ 1, 2, 4, 8, 16, 32, 64, 64, 64, 64, 64, 64, 64 };
+int tcp_totbackoff = 511; /* sum of tcp_backoff[] */
+
/*
* TCP timer processing.
*/
diff --git a/sys/netinet/tcp_timewait.c b/sys/netinet/tcp_timewait.c
index a614854..d166bba 100644
--- a/sys/netinet/tcp_timewait.c
+++ b/sys/netinet/tcp_timewait.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1982, 1986, 1988, 1990, 1993
+ * Copyright (c) 1982, 1986, 1988, 1990, 1993, 1995
* The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -30,8 +30,8 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * @(#)tcp_subr.c 8.1 (Berkeley) 6/10/93
- * $Id: tcp_subr.c,v 1.15 1995/09/20 21:00:59 wollman Exp $
+ * @(#)tcp_subr.c 8.2 (Berkeley) 5/24/95
+ * $Id: tcp_subr.c,v 1.16 1995/09/22 17:43:37 wollman Exp $
*/
#include <sys/param.h>
@@ -87,7 +87,7 @@ void
tcp_init()
{
- tcp_iss = 1; /* wrong */
+ tcp_iss = random(); /* wrong, but better than a constant */
tcp_ccgen = 1;
tcp_cleartaocache();
LIST_INIT(&tcb);
OpenPOWER on IntegriCloud