--- work-2.6/net/netlink/af_netlink.c.orig 2004-07-01 08:56:55.000000000 +1000 +++ work-2.6/net/netlink/af_netlink.c 2004-07-01 08:59:14.000000000 +1000 @@ -425,21 +425,23 @@ sock = netlink_lookup(protocol, pid); if (!sock) - return ERR_PTR(-ECONNREFUSED); + goto err; /* Don't bother queuing skb if kernel socket has no input function */ nlk = nlk_sk(sock); - if (nlk->pid == 0 && !nlk->data_ready) { - sock_put(sock); - return ERR_PTR(-ECONNREFUSED); - } + if (nlk->pid == 0 && !nlk->data_ready) + goto err_sock; if (sock->sk_state == NETLINK_CONNECTED && - nlk->dst_pid != nlk_sk(ssk)->pid) { - sock_put(sock); - return ERR_PTR(-ECONNREFUSED); - } + nlk->dst_pid != nlk_sk(ssk)->pid) + goto err_sock; + return sock; + +err_sock: + sock_put(sock); +err: + return ERR_PTR(-ECONNREFUSED); } struct sock *netlink_getsockbyfilp(struct file *filp)