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(sock); + } - 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); } }