- Fixes a case where doing a sysctl would leave locks held
when coping out association data. - Fixes a small bug that prevented the SCTP_UNORDERED indication from going up to the app on a recv in the sinfo_flags field.
This commit is contained in:
parent
34a1405271
commit
5f26a41d17
@ -192,6 +192,8 @@ copy_out_local_addresses(struct sctp_inpcb *inp, struct sctp_tcb *stcb, struct s
|
||||
|
||||
/* neither Mac OS X nor FreeBSD support mulitple routing functions */
|
||||
if ((vrf = sctp_find_vrf(inp->def_vrf_id)) == NULL) {
|
||||
SCTP_INP_RUNLOCK(inp);
|
||||
SCTP_INP_INFO_RUNLOCK();
|
||||
return (-1);
|
||||
}
|
||||
if (inp->sctp_flags & SCTP_PCB_FLAGS_BOUNDALL) {
|
||||
@ -273,11 +275,18 @@ copy_out_local_addresses(struct sctp_inpcb *inp, struct sctp_tcb *stcb, struct s
|
||||
}
|
||||
memset((void *)&xladdr, 0, sizeof(union sctp_sockstore));
|
||||
xladdr.last = 1;
|
||||
SCTP_INP_RUNLOCK(inp);
|
||||
SCTP_INP_INFO_RUNLOCK();
|
||||
error = SYSCTL_OUT(req, &xladdr, sizeof(struct xsctp_laddr));
|
||||
|
||||
if (error)
|
||||
return (error);
|
||||
else
|
||||
|
||||
else {
|
||||
SCTP_INP_INFO_RLOCK();
|
||||
SCTP_INP_RLOCK(inp);
|
||||
return (0);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -5027,6 +5027,9 @@ sctp_sorecvmsg(struct socket *so,
|
||||
* there.
|
||||
*/
|
||||
sinfo->sinfo_flags &= 0x00ff;
|
||||
if ((control->sinfo_flags >> 8) & SCTP_DATA_UNORDERED) {
|
||||
sinfo->sinfo_flags |= SCTP_UNORDERED;
|
||||
}
|
||||
}
|
||||
if (fromlen && from) {
|
||||
struct sockaddr *to;
|
||||
|
Loading…
Reference in New Issue
Block a user