git: 29545986bdf6 - main - sctp: avoid LOR

Michael Tuexen tuexen at FreeBSD.org
Sun Sep 12 19:13:24 UTC 2021


The branch main has been updated by tuexen:

URL: https://cgit.FreeBSD.org/src/commit/?id=29545986bdf6c949671e61fc46ee3f2440b1535b

commit 29545986bdf6c949671e61fc46ee3f2440b1535b
Author:     Michael Tuexen <tuexen at FreeBSD.org>
AuthorDate: 2021-09-12 19:11:14 +0000
Commit:     Michael Tuexen <tuexen at FreeBSD.org>
CommitDate: 2021-09-12 19:11:14 +0000

    sctp: avoid LOR
    
    Don't lock the inp-info lock while holding an stcb lock.
    
    MFC after:              1 week
    Differential Revision:  https://reviews.freebsd.org/D31921
---
 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 9e194d5fda78..6c4bb529fbb8 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);


More information about the dev-commits-src-all mailing list