Improve the locking when sending user messages.
First, keep a ref count on the stcb after looking it up, as done in the other lookup cases. Second, before looking again at sp, ensure that it is not freed, because the assoc is about to be freed. MFC after: 3 days
This commit is contained in:
parent
066d6cbcef
commit
7fcbd928f8
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=304579
@ -12639,7 +12639,10 @@ sctp_lower_sosend(struct socket *so,
|
||||
}
|
||||
SCTP_INP_RUNLOCK(inp);
|
||||
} else if (sinfo_assoc_id) {
|
||||
stcb = sctp_findassociation_ep_asocid(inp, sinfo_assoc_id, 0);
|
||||
stcb = sctp_findassociation_ep_asocid(inp, sinfo_assoc_id, 1);
|
||||
if (stcb != NULL) {
|
||||
hold_tcblock = 1;
|
||||
}
|
||||
} else if (addr) {
|
||||
/*-
|
||||
* Since we did not use findep we must
|
||||
@ -13404,6 +13407,10 @@ sctp_lower_sosend(struct socket *so,
|
||||
}
|
||||
}
|
||||
SCTP_TCB_SEND_LOCK(stcb);
|
||||
if (stcb->asoc.state & SCTP_STATE_ABOUT_TO_BE_FREED) {
|
||||
SCTP_TCB_SEND_UNLOCK(stcb);
|
||||
goto out_unlocked;
|
||||
}
|
||||
if (sp) {
|
||||
if (sp->msg_is_complete == 0) {
|
||||
strm->last_msg_incomplete = 1;
|
||||
|
Loading…
Reference in New Issue
Block a user