summaryrefslogtreecommitdiffstats
path: root/sys/netinet
diff options
context:
space:
mode:
authorrwatson <rwatson@FreeBSD.org>2004-07-12 19:28:07 +0000
committerrwatson <rwatson@FreeBSD.org>2004-07-12 19:28:07 +0000
commit9d5e898163c7c5084f30c9675cf5f557a969e666 (patch)
tree86957ec8b07268f7283d186d9336ee22f1919c4c /sys/netinet
parent9183ed533a6a59e2febbded3d383cd619c86b214 (diff)
downloadFreeBSD-src-9d5e898163c7c5084f30c9675cf5f557a969e666.zip
FreeBSD-src-9d5e898163c7c5084f30c9675cf5f557a969e666.tar.gz
After each label in tcp_input(), assert the inpcbinfo and inpcb lock
state that we expect.
Diffstat (limited to 'sys/netinet')
-rw-r--r--sys/netinet/tcp_input.c18
-rw-r--r--sys/netinet/tcp_reass.c18
2 files changed, 34 insertions, 2 deletions
diff --git a/sys/netinet/tcp_input.c b/sys/netinet/tcp_input.c
index 78b1fad..ffde973 100644
--- a/sys/netinet/tcp_input.c
+++ b/sys/netinet/tcp_input.c
@@ -985,6 +985,8 @@ findpcb:
goto drop;
}
after_listen:
+ KASSERT(headlocked, ("tcp_input(): after_listen head is not locked"));
+ INP_LOCK_ASSERT(inp);
/* XXX temp debugging */
/* should not happen - syncache should pick up these connections */
@@ -1472,6 +1474,10 @@ after_listen:
}
trimthenstep6:
+ KASSERT(headlocked,
+ ("tcp_input(): trimthenstep6 head is not locked"));
+ INP_LOCK_ASSERT(inp);
+
/*
* Advance th->th_seq to correspond to first data byte.
* If data, trim to stay within window,
@@ -2081,6 +2087,10 @@ trimthenstep6:
}
process_ACK:
+ KASSERT(headlocked,
+ ("tcp_input(): process_ACK head is not locked"));
+ INP_LOCK_ASSERT(inp);
+
acked = th->th_ack - tp->snd_una;
tcpstat.tcps_rcvackpack++;
tcpstat.tcps_rcvackbyte += acked;
@@ -2261,6 +2271,9 @@ process_ACK:
}
step6:
+ KASSERT(headlocked, ("tcp_input(): step6 head is not locked"));
+ INP_LOCK_ASSERT(inp);
+
/*
* Update window information.
* Don't look at window if no ACK: TAC's send garbage on first SYN.
@@ -2343,7 +2356,9 @@ step6:
tp->rcv_up = tp->rcv_nxt;
}
dodata: /* XXX */
- KASSERT(headlocked, ("headlocked"));
+ KASSERT(headlocked, ("tcp_input(): dodata head is not locked"));
+ INP_LOCK_ASSERT(inp);
+
/*
* Process the segment text, merging it into the TCP sequencing queue,
* and arranging for acknowledgment of receipt if necessary.
@@ -2479,6 +2494,7 @@ dodata: /* XXX */
(void) tcp_output(tp);
check_delack:
+ INP_LOCK_ASSERT(inp);
if (tp->t_flags & TF_DELACK) {
tp->t_flags &= ~TF_DELACK;
callout_reset(tp->tt_delack, tcp_delacktime,
diff --git a/sys/netinet/tcp_reass.c b/sys/netinet/tcp_reass.c
index 78b1fad..ffde973 100644
--- a/sys/netinet/tcp_reass.c
+++ b/sys/netinet/tcp_reass.c
@@ -985,6 +985,8 @@ findpcb:
goto drop;
}
after_listen:
+ KASSERT(headlocked, ("tcp_input(): after_listen head is not locked"));
+ INP_LOCK_ASSERT(inp);
/* XXX temp debugging */
/* should not happen - syncache should pick up these connections */
@@ -1472,6 +1474,10 @@ after_listen:
}
trimthenstep6:
+ KASSERT(headlocked,
+ ("tcp_input(): trimthenstep6 head is not locked"));
+ INP_LOCK_ASSERT(inp);
+
/*
* Advance th->th_seq to correspond to first data byte.
* If data, trim to stay within window,
@@ -2081,6 +2087,10 @@ trimthenstep6:
}
process_ACK:
+ KASSERT(headlocked,
+ ("tcp_input(): process_ACK head is not locked"));
+ INP_LOCK_ASSERT(inp);
+
acked = th->th_ack - tp->snd_una;
tcpstat.tcps_rcvackpack++;
tcpstat.tcps_rcvackbyte += acked;
@@ -2261,6 +2271,9 @@ process_ACK:
}
step6:
+ KASSERT(headlocked, ("tcp_input(): step6 head is not locked"));
+ INP_LOCK_ASSERT(inp);
+
/*
* Update window information.
* Don't look at window if no ACK: TAC's send garbage on first SYN.
@@ -2343,7 +2356,9 @@ step6:
tp->rcv_up = tp->rcv_nxt;
}
dodata: /* XXX */
- KASSERT(headlocked, ("headlocked"));
+ KASSERT(headlocked, ("tcp_input(): dodata head is not locked"));
+ INP_LOCK_ASSERT(inp);
+
/*
* Process the segment text, merging it into the TCP sequencing queue,
* and arranging for acknowledgment of receipt if necessary.
@@ -2479,6 +2494,7 @@ dodata: /* XXX */
(void) tcp_output(tp);
check_delack:
+ INP_LOCK_ASSERT(inp);
if (tp->t_flags & TF_DELACK) {
tp->t_flags &= ~TF_DELACK;
callout_reset(tp->tt_delack, tcp_delacktime,
OpenPOWER on IntegriCloud