diff options
Diffstat (limited to 'net/sctp/socket.c')
| -rw-r--r-- | net/sctp/socket.c | 9 | 
1 files changed, 7 insertions, 2 deletions
diff --git a/net/sctp/socket.c b/net/sctp/socket.c index b91616f819de..cda8c2874691 100644 --- a/net/sctp/socket.c +++ b/net/sctp/socket.c @@ -1830,6 +1830,10 @@ static int sctp_sendmsg_to_asoc(struct sctp_association *asoc,  		err = sctp_wait_for_sndbuf(asoc, &timeo, msg_len);  		if (err)  			goto err; +		if (unlikely(sinfo->sinfo_stream >= asoc->stream.outcnt)) { +			err = -EINVAL; +			goto err; +		}  	}  	if (sctp_state(asoc, CLOSED)) { @@ -5188,10 +5192,11 @@ int sctp_get_sctp_info(struct sock *sk, struct sctp_association *asoc,  	info->sctpi_peer_rwnd = asoc->peer.rwnd;  	info->sctpi_peer_tag = asoc->c.peer_vtag; -	mask = asoc->peer.ecn_capable << 1; +	mask = asoc->peer.intl_capable << 1; +	mask = (mask | asoc->peer.ecn_capable) << 1;  	mask = (mask | asoc->peer.ipv4_address) << 1;  	mask = (mask | asoc->peer.ipv6_address) << 1; -	mask = (mask | asoc->peer.hostname_address) << 1; +	mask = (mask | asoc->peer.reconf_capable) << 1;  	mask = (mask | asoc->peer.asconf_capable) << 1;  	mask = (mask | asoc->peer.prsctp_capable) << 1;  	mask = (mask | asoc->peer.auth_capable);  |