Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Two cases of overlapping changes, nothing fancy. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -282,6 +282,9 @@ static enum sctp_xmit sctp_packet_bundle_sack(struct sctp_packet *pkt,
|
||||
sctp_chunk_free(sack);
|
||||
goto out;
|
||||
}
|
||||
SCTP_INC_STATS(sock_net(asoc->base.sk),
|
||||
SCTP_MIB_OUTCTRLCHUNKS);
|
||||
asoc->stats.octrlchunks++;
|
||||
asoc->peer.sack_needed = 0;
|
||||
if (del_timer(timer))
|
||||
sctp_association_put(asoc);
|
||||
|
@@ -4816,35 +4816,17 @@ out_nounlock:
|
||||
static int sctp_connect(struct sock *sk, struct sockaddr *addr,
|
||||
int addr_len, int flags)
|
||||
{
|
||||
struct inet_sock *inet = inet_sk(sk);
|
||||
struct sctp_af *af;
|
||||
int err = 0;
|
||||
int err = -EINVAL;
|
||||
|
||||
lock_sock(sk);
|
||||
|
||||
pr_debug("%s: sk:%p, sockaddr:%p, addr_len:%d\n", __func__, sk,
|
||||
addr, addr_len);
|
||||
|
||||
/* We may need to bind the socket. */
|
||||
if (!inet->inet_num) {
|
||||
if (sk->sk_prot->get_port(sk, 0)) {
|
||||
release_sock(sk);
|
||||
return -EAGAIN;
|
||||
}
|
||||
inet->inet_sport = htons(inet->inet_num);
|
||||
}
|
||||
|
||||
/* Validate addr_len before calling common connect/connectx routine. */
|
||||
af = addr_len < offsetofend(struct sockaddr, sa_family) ? NULL :
|
||||
sctp_get_af_specific(addr->sa_family);
|
||||
if (!af || addr_len < af->sockaddr_len) {
|
||||
err = -EINVAL;
|
||||
} else {
|
||||
/* Pass correct addr len to common routine (so it knows there
|
||||
* is only one address being passed.
|
||||
*/
|
||||
af = sctp_get_af_specific(addr->sa_family);
|
||||
if (af && addr_len >= af->sockaddr_len)
|
||||
err = __sctp_connect(sk, addr, af->sockaddr_len, flags, NULL);
|
||||
}
|
||||
|
||||
release_sock(sk);
|
||||
return err;
|
||||
|
@@ -153,13 +153,20 @@ out:
|
||||
int sctp_stream_init_ext(struct sctp_stream *stream, __u16 sid)
|
||||
{
|
||||
struct sctp_stream_out_ext *soute;
|
||||
int ret;
|
||||
|
||||
soute = kzalloc(sizeof(*soute), GFP_KERNEL);
|
||||
if (!soute)
|
||||
return -ENOMEM;
|
||||
SCTP_SO(stream, sid)->ext = soute;
|
||||
|
||||
return sctp_sched_init_sid(stream, sid, GFP_KERNEL);
|
||||
ret = sctp_sched_init_sid(stream, sid, GFP_KERNEL);
|
||||
if (ret) {
|
||||
kfree(SCTP_SO(stream, sid)->ext);
|
||||
SCTP_SO(stream, sid)->ext = NULL;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void sctp_stream_free(struct sctp_stream *stream)
|
||||
|
Reference in New Issue
Block a user