git: 91ef9a745e10 - stable/13 - sctp: avoid LOR
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 22 Feb 2022 22:50:06 UTC
The branch stable/13 has been updated by tuexen:
URL: https://cgit.FreeBSD.org/src/commit/?id=91ef9a745e1043d5d932cd2de8876f338daa362a
commit 91ef9a745e1043d5d932cd2de8876f338daa362a
Author: Michael Tuexen <tuexen@FreeBSD.org>
AuthorDate: 2021-09-12 19:11:14 +0000
Commit: Michael Tuexen <tuexen@FreeBSD.org>
CommitDate: 2022-02-22 22:49:39 +0000
sctp: avoid LOR
Don't lock the inp-info lock while holding an stcb lock.
Differential Revision: https://reviews.freebsd.org/D31921
(cherry picked from commit 29545986bdf6c949671e61fc46ee3f2440b1535b)
---
sys/netinet/sctp_input.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/sys/netinet/sctp_input.c b/sys/netinet/sctp_input.c
index 84d2a303303d..aeef68899b5f 100644
--- a/sys/netinet/sctp_input.c
+++ b/sys/netinet/sctp_input.c
@@ -679,9 +679,6 @@ sctp_handle_nat_colliding_state(struct sctp_tcb *stcb)
if ((SCTP_GET_STATE(stcb) == SCTP_STATE_COOKIE_WAIT) ||
(SCTP_GET_STATE(stcb) == SCTP_STATE_COOKIE_ECHOED)) {
- SCTP_INP_INFO_RLOCK();
- new_vtag = sctp_select_a_tag(stcb->sctp_ep, stcb->sctp_ep->sctp_lport, stcb->rport, 1);
- SCTP_INP_INFO_RLOCK();
atomic_add_int(&stcb->asoc.refcnt, 1);
SCTP_TCB_UNLOCK(stcb);
SCTP_INP_INFO_WLOCK();
@@ -690,6 +687,7 @@ sctp_handle_nat_colliding_state(struct sctp_tcb *stcb)
} else {
return (0);
}
+ new_vtag = sctp_select_a_tag(stcb->sctp_ep, stcb->sctp_ep->sctp_lport, stcb->rport, 1);
if (SCTP_GET_STATE(stcb) == SCTP_STATE_COOKIE_WAIT) {
/* generate a new vtag and send init */
LIST_REMOVE(stcb, sctp_asocs);