diff options
author | codeworkx <codeworkx@cyanogenmod.org> | 2013-03-16 15:25:02 +0000 |
---|---|---|
committer | codeworkx <codeworkx@cyanogenmod.org> | 2013-03-16 15:25:02 +0000 |
commit | cba07183cc76b06a5ef2b20eef70d203dc5bcd5d (patch) | |
tree | e9847236fac724bbe929a5f2da2ad074ac47f120 /net/sctp/socket.c | |
parent | 1fb968ea5a15b9ff31c6345c3c4aad523985e024 (diff) | |
parent | 44655588a0b361afa15761b5c58f5a558c1c181c (diff) | |
download | kernel_samsung_smdk4412-cba07183cc76b06a5ef2b20eef70d203dc5bcd5d.zip kernel_samsung_smdk4412-cba07183cc76b06a5ef2b20eef70d203dc5bcd5d.tar.gz kernel_samsung_smdk4412-cba07183cc76b06a5ef2b20eef70d203dc5bcd5d.tar.bz2 |
Merge branch 'cm-10.1-experimental' into HEAD
Diffstat (limited to 'net/sctp/socket.c')
-rw-r--r-- | net/sctp/socket.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/net/sctp/socket.c b/net/sctp/socket.c index 4434853..6b766cd 100644 --- a/net/sctp/socket.c +++ b/net/sctp/socket.c @@ -1160,8 +1160,14 @@ out_free: SCTP_DEBUG_PRINTK("About to exit __sctp_connect() free asoc: %p" " kaddrs: %p err: %d\n", asoc, kaddrs, err); - if (asoc) + if (asoc) { + /* sctp_primitive_ASSOCIATE may have added this association + * To the hash table, try to unhash it, just in case, its a noop + * if it wasn't hashed so we're safe + */ + sctp_unhash_established(asoc); sctp_association_free(asoc); + } return err; } @@ -1831,8 +1837,8 @@ SCTP_STATIC int sctp_sendmsg(struct kiocb *iocb, struct sock *sk, /* Break the message into multiple chunks of maximum size. */ datamsg = sctp_datamsg_from_user(asoc, sinfo, msg, msg_len); - if (!datamsg) { - err = -ENOMEM; + if (IS_ERR(datamsg)) { + err = PTR_ERR(datamsg); goto out_free; } @@ -1871,8 +1877,10 @@ SCTP_STATIC int sctp_sendmsg(struct kiocb *iocb, struct sock *sk, goto out_unlock; out_free: - if (new_asoc) + if (new_asoc) { + sctp_unhash_established(asoc); sctp_association_free(asoc); + } out_unlock: sctp_release_sock(sk); @@ -3296,7 +3304,7 @@ static int sctp_setsockopt_auth_key(struct sock *sk, ret = sctp_auth_set_key(sctp_sk(sk)->ep, asoc, authkey); out: - kfree(authkey); + kzfree(authkey); return ret; } |