From fe0bf623ad311f3aee6c729f327285b3baa24e34 Mon Sep 17 00:00:00 2001 From: rwatson Date: Wed, 1 Jun 2005 11:49:14 +0000 Subject: [PATCH] Assert the tcbinfo lock whenever tcp_close() is to be called by tcp_input(). MFC after: 7 days --- sys/netinet/tcp_input.c | 11 +++++++++++ sys/netinet/tcp_reass.c | 11 +++++++++++ 2 files changed, 22 insertions(+) diff --git a/sys/netinet/tcp_input.c b/sys/netinet/tcp_input.c index cbd40689732c..739261025cb0 100644 --- a/sys/netinet/tcp_input.c +++ b/sys/netinet/tcp_input.c @@ -1539,11 +1539,16 @@ tcp_input(m, off0) close: tp->t_state = TCPS_CLOSED; tcpstat.tcps_drops++; + KASSERT(headlocked, ("tcp_input: " + "trimthenstep6: tcp_close: head not " + "locked")); tp = tcp_close(tp); break; case TCPS_CLOSING: case TCPS_LAST_ACK: + KASSERT(headlocked, ("trimthenstep6: " + "tcp_close.2: head not locked")); tp = tcp_close(tp); break; @@ -1651,6 +1656,8 @@ tcp_input(m, off0) */ if ((so->so_state & SS_NOFDREF) && tp->t_state > TCPS_CLOSE_WAIT && tlen) { + KASSERT(headlocked, ("trimthenstep6: tcp_close.3: head not " + "locked")); tp = tcp_close(tp); tcpstat.tcps_rcvafterclose++; rstreason = BANDLIM_UNLIMITED; @@ -1676,6 +1683,8 @@ tcp_input(m, off0) if (thflags & TH_SYN && tp->t_state == TCPS_TIME_WAIT && SEQ_GT(th->th_seq, tp->rcv_nxt)) { + KASSERT(headlocked, ("trimthenstep6: " + "tcp_close.4: head not locked")); tp = tcp_close(tp); goto findpcb; } @@ -2178,6 +2187,8 @@ tcp_input(m, off0) */ case TCPS_LAST_ACK: if (ourfinisacked) { + KASSERT(headlocked, ("tcp_input: process_ACK:" + " tcp_close: head not locked")); tp = tcp_close(tp); goto drop; } diff --git a/sys/netinet/tcp_reass.c b/sys/netinet/tcp_reass.c index cbd40689732c..739261025cb0 100644 --- a/sys/netinet/tcp_reass.c +++ b/sys/netinet/tcp_reass.c @@ -1539,11 +1539,16 @@ tcp_input(m, off0) close: tp->t_state = TCPS_CLOSED; tcpstat.tcps_drops++; + KASSERT(headlocked, ("tcp_input: " + "trimthenstep6: tcp_close: head not " + "locked")); tp = tcp_close(tp); break; case TCPS_CLOSING: case TCPS_LAST_ACK: + KASSERT(headlocked, ("trimthenstep6: " + "tcp_close.2: head not locked")); tp = tcp_close(tp); break; @@ -1651,6 +1656,8 @@ tcp_input(m, off0) */ if ((so->so_state & SS_NOFDREF) && tp->t_state > TCPS_CLOSE_WAIT && tlen) { + KASSERT(headlocked, ("trimthenstep6: tcp_close.3: head not " + "locked")); tp = tcp_close(tp); tcpstat.tcps_rcvafterclose++; rstreason = BANDLIM_UNLIMITED; @@ -1676,6 +1683,8 @@ tcp_input(m, off0) if (thflags & TH_SYN && tp->t_state == TCPS_TIME_WAIT && SEQ_GT(th->th_seq, tp->rcv_nxt)) { + KASSERT(headlocked, ("trimthenstep6: " + "tcp_close.4: head not locked")); tp = tcp_close(tp); goto findpcb; } @@ -2178,6 +2187,8 @@ tcp_input(m, off0) */ case TCPS_LAST_ACK: if (ourfinisacked) { + KASSERT(headlocked, ("tcp_input: process_ACK:" + " tcp_close: head not locked")); tp = tcp_close(tp); goto drop; }