summaryrefslogtreecommitdiffstats
path: root/net/netlink
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2014-12-22 18:56:38 +0100
committerDavid S. Miller <davem@davemloft.net>2014-12-27 02:20:23 -0500
commit7d68536bed72b09de03b07479dd707c5831b3b94 (patch)
tree79b9ce734d410cd60ee83c357d042d9d39dfb7a7 /net/netlink
parentb10dcb3b94010e3ac3951f68789400b1665effb1 (diff)
downloadlinux-7d68536bed72b09de03b07479dd707c5831b3b94.tar.gz
linux-7d68536bed72b09de03b07479dd707c5831b3b94.tar.bz2
linux-7d68536bed72b09de03b07479dd707c5831b3b94.zip
netlink: call unbind when releasing socket
Currently, netlink_unbind() is only called when the socket explicitly unbinds, which limits its usefulness (luckily there are no users of it yet anyway.) Call netlink_unbind() also when a socket is released, so it becomes possible to track listeners with this callback and without also implementing a netlink notifier (and checking netlink_has_listeners() in there.) Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/netlink')
-rw-r--r--net/netlink/af_netlink.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c
index 6a9fb7c489a8..f29b63fad932 100644
--- a/net/netlink/af_netlink.c
+++ b/net/netlink/af_netlink.c
@@ -1246,6 +1246,13 @@ static int netlink_release(struct socket *sock)
netlink_table_ungrab();
}
+ if (nlk->netlink_unbind) {
+ int i;
+
+ for (i = 0; i < nlk->ngroups; i++)
+ if (test_bit(i, nlk->groups))
+ nlk->netlink_unbind(i + 1);
+ }
kfree(nlk->groups);
nlk->groups = NULL;