diff options
-rw-r--r-- | sys/netinet/sctp_pcb.c | 1 | ||||
-rw-r--r-- | sys/netinet/sctp_usrreq.c | 3 |
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; } |