netdev
[Top] [All Lists]

Re: [PATCH] Improve behaviour of Netlink Sockets

To: Pablo Neira <pablo@xxxxxxxxxxx>
Subject: Re: [PATCH] Improve behaviour of Netlink Sockets
From: Pablo Neira <pablo@xxxxxxxxxxx>
Date: Sun, 19 Sep 2004 07:18:36 +0200
Cc: Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx>, "David S. Miller" <davem@xxxxxxxxxx>, netdev@xxxxxxxxxxx
In-reply-to: <414D0CCD.90209@xxxxxxxxxxx>
References: <E1C8cPd-0006K8-00@xxxxxxxxxxxxxxxxxxxxxxxx> <414D0CCD.90209@xxxxxxxxxxx>
Sender: netdev-bounce@xxxxxxxxxxx
User-agent: Mozilla/5.0 (X11; U; Linux i686; rv:1.6) Gecko/20040528 Debian/1.6-7
Pablo Neira wrote:

you are right, I missed that, but I prefer the patches attached to this email.


wrong 2.6 patch, consider this instead

regards,
Pablo
diff -u -r1.1.1.2 af_netlink.c
--- a/net/netlink/af_netlink.c  4 Sep 2004 17:34:06 -0000       1.1.1.2
+++ b/net/netlink/af_netlink.c  19 Sep 2004 03:57:20 -0000
@@ -629,18 +629,20 @@
                                kmalloc(sizeof(struct netlink_work), 
GFP_KERNEL);
 
                        if (!nlwork)
-                               return -1;
+                               return 0;
                
                        INIT_WORK(&nlwork->work, netlink_wq_handler, nlwork);
                        nlwork->sk = sk;
                        nlwork->len = skb->len;
                        queue_work(netlink_wq, &nlwork->work);
-               } else 
+               } else {
                        sk->sk_data_ready(sk, skb->len);
+                       sock_put(sk);
+               }
 
-               return 0;
+               return 1;
        }
-       return -1;
+       return 0;
 }
 
 int netlink_broadcast(struct sock *ssk, struct sk_buff *skb, u32 pid,
@@ -685,11 +687,11 @@
                        failure = 1;
                        sock_put(sk);
                } else if (netlink_broadcast_deliver(sk, skb2)) {
-                       netlink_overrun(sk);
-                       sock_put(sk);
-               } else {
                        delivered = 1;
                        skb2 = NULL;
+               } else {
+                       netlink_overrun(sk);
+                       sock_put(sk);
                }
        }
 
<Prev in Thread] Current Thread [Next in Thread>