aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/netinet/sctp_pcb.c1
-rw-r--r--sys/netinet/sctp_usrreq.c3
2 files changed, 4 insertions, 0 deletions
diff --git a/sys/netinet/sctp_pcb.c b/sys/netinet/sctp_pcb.c
index de7e96e4c5dd..31c4bc0d5ed4 100644
--- a/sys/netinet/sctp_pcb.c
+++ b/sys/netinet/sctp_pcb.c
@@ -521,6 +521,7 @@ sctp_tcb_special_locate(struct sctp_inpcb **inp_p, struct sockaddr *from,
continue;
}
if (lport != inp->sctp_lport) {
+ SCTP_INP_RUNLOCK(inp);
continue;
}
if (inp->def_vrf_id != vrf_id) {
diff --git a/sys/netinet/sctp_usrreq.c b/sys/netinet/sctp_usrreq.c
index 8e558cb9023b..c187933fc16e 100644
--- a/sys/netinet/sctp_usrreq.c
+++ b/sys/netinet/sctp_usrreq.c
@@ -513,7 +513,10 @@ sctp_attach(struct socket *so, int proto, struct thread *p)
#ifdef SCTP_LOG_CLOSING
sctp_log_closing(inp, NULL, 15);
#endif
+ SCTP_INP_WUNLOCK(inp);
sctp_inpcb_free(inp, 1, 0);
+ } else {
+ SCTP_INP_WUNLOCK(inp);
}
return error;
}