From 7f84dba21c67c46ef58e8e2183f350cb396e2579 Mon Sep 17 00:00:00 2001 From: "Denis V. Lunev" Date: Fri, 18 Jan 2008 23:53:31 -0800 Subject: [PATCH] --- yaml --- r: 79274 b: refs/heads/master c: 869e58f87094b1e8a0df49232e4a5172678d46c9 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/net/netlink/af_netlink.c | 10 +++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index 66f45aeab539..39e442d80fe5 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 7d460db953d6d205e4c8ecc2017aea1ec22b6c9a +refs/heads/master: 869e58f87094b1e8a0df49232e4a5172678d46c9 diff --git a/trunk/net/netlink/af_netlink.c b/trunk/net/netlink/af_netlink.c index 21f9e30184e2..29fef558aab6 100644 --- a/trunk/net/netlink/af_netlink.c +++ b/trunk/net/netlink/af_netlink.c @@ -498,9 +498,12 @@ static int netlink_release(struct socket *sock) netlink_table_grab(); if (netlink_is_kernel(sk)) { - kfree(nl_table[sk->sk_protocol].listeners); - nl_table[sk->sk_protocol].module = NULL; - nl_table[sk->sk_protocol].registered = 0; + BUG_ON(nl_table[sk->sk_protocol].registered == 0); + if (--nl_table[sk->sk_protocol].registered == 0) { + kfree(nl_table[sk->sk_protocol].listeners); + nl_table[sk->sk_protocol].module = NULL; + nl_table[sk->sk_protocol].registered = 0; + } } else if (nlk->subscriptions) netlink_update_listeners(sk); netlink_table_ungrab(); @@ -1389,6 +1392,7 @@ netlink_kernel_create(struct net *net, int unit, unsigned int groups, nl_table[unit].registered = 1; } else { kfree(listeners); + nl_table[unit].registered++; } netlink_table_ungrab();