svn commit: r332203 - stable/11/sys/netinet
Michael Tuexen
tuexen at FreeBSD.org
Sat Apr 7 19:17:32 UTC 2018
Author: tuexen
Date: Sat Apr 7 19:17:31 2018
New Revision: 332203
URL: https://svnweb.freebsd.org/changeset/base/332203
Log:
MFC r323904:
Add missing locking. Found by Coverity while scanning the usrsctp
library.
Modified:
stable/11/sys/netinet/sctp_input.c
Directory Properties:
stable/11/ (props changed)
Modified: stable/11/sys/netinet/sctp_input.c
==============================================================================
--- stable/11/sys/netinet/sctp_input.c Sat Apr 7 19:16:06 2018 (r332202)
+++ stable/11/sys/netinet/sctp_input.c Sat Apr 7 19:17:31 2018 (r332203)
@@ -701,6 +701,14 @@ sctp_handle_nat_colliding_state(struct sctp_tcb *stcb)
*/
struct sctpasochead *head;
+ if ((SCTP_GET_STATE(&stcb->asoc) == SCTP_STATE_COOKIE_WAIT) ||
+ (SCTP_GET_STATE(&stcb->asoc) == SCTP_STATE_COOKIE_ECHOED)) {
+ atomic_add_int(&stcb->asoc.refcnt, 1);
+ SCTP_TCB_UNLOCK(stcb);
+ SCTP_INP_INFO_WLOCK();
+ SCTP_TCB_LOCK(stcb);
+ atomic_subtract_int(&stcb->asoc.refcnt, 1);
+ }
if (SCTP_GET_STATE(&stcb->asoc) == SCTP_STATE_COOKIE_WAIT) {
/* generate a new vtag and send init */
LIST_REMOVE(stcb, sctp_asocs);
@@ -712,6 +720,7 @@ sctp_handle_nat_colliding_state(struct sctp_tcb *stcb)
*/
LIST_INSERT_HEAD(head, stcb, sctp_asocs);
sctp_send_initiate(stcb->sctp_ep, stcb, SCTP_SO_NOT_LOCKED);
+ SCTP_INP_INFO_WUNLOCK();
return (1);
}
if (SCTP_GET_STATE(&stcb->asoc) == SCTP_STATE_COOKIE_ECHOED) {
@@ -733,6 +742,7 @@ sctp_handle_nat_colliding_state(struct sctp_tcb *stcb)
*/
LIST_INSERT_HEAD(head, stcb, sctp_asocs);
sctp_send_initiate(stcb->sctp_ep, stcb, SCTP_SO_NOT_LOCKED);
+ SCTP_INP_INFO_WUNLOCK();
return (1);
}
return (0);
More information about the svn-src-stable-11
mailing list