Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
[linux-2.6-block.git] / net / ipv4 / raw.c
index bc35f1842512bef8e4d87e76542d7bf11f8946fa..8d22de74080c81f9dd71e1681fb80041b08b8441 100644 (file)
@@ -93,7 +93,7 @@ static struct raw_hashinfo raw_v4_hashinfo = {
        .lock = __RW_LOCK_UNLOCKED(raw_v4_hashinfo.lock),
 };
 
-void raw_hash_sk(struct sock *sk)
+int raw_hash_sk(struct sock *sk)
 {
        struct raw_hashinfo *h = sk->sk_prot->h.raw_hash;
        struct hlist_head *head;
@@ -104,6 +104,8 @@ void raw_hash_sk(struct sock *sk)
        sk_add_node(sk, head);
        sock_prot_inuse_add(sock_net(sk), sk->sk_prot, 1);
        write_unlock_bh(&h->lock);
+
+       return 0;
 }
 EXPORT_SYMBOL_GPL(raw_hash_sk);
 
@@ -547,8 +549,10 @@ static int raw_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
 
        if (msg->msg_controllen) {
                err = ip_cmsg_send(net, msg, &ipc, false);
-               if (err)
+               if (unlikely(err)) {
+                       kfree(ipc.opt);
                        goto out;
+               }
                if (ipc.opt)
                        free = 1;
        }