diff options
author | Gao feng <gaofeng@cn.fujitsu.com> | 2013-06-12 22:05:38 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-06-13 03:45:48 -0400 |
commit | ca15febfe98f7c681ac345fc1d2ee1b8decaa493 (patch) | |
tree | a4a0e2abd432397ccca05b1e5144055cd6479649 /net/netlink | |
parent | e3d73bcedfdf66d21349fee00241b0931d28a943 (diff) |
netlink: make compare exist all the time
Commit da12c90e099789a63073fc82a19542ce54d4efb9
"netlink: Add compare function for netlink_table"
only set compare at the time we create kernel netlink,
and reset compare to NULL at the time we finially
release netlink socket, but netlink_lookup wants
the compare exist always.
So we should set compare after we allocate nl_table,
and never reset it. make comapre exist all the time.
Reported-by: Fengguang Wu <fengguang.wu@intel.com>
Signed-off-by: Gao feng <gaofeng@cn.fujitsu.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/netlink')
-rw-r--r-- | net/netlink/af_netlink.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c index 9b6b115e008f..8978755251f7 100644 --- a/net/netlink/af_netlink.c +++ b/net/netlink/af_netlink.c | |||
@@ -1174,7 +1174,6 @@ static int netlink_release(struct socket *sock) | |||
1174 | kfree_rcu(old, rcu); | 1174 | kfree_rcu(old, rcu); |
1175 | nl_table[sk->sk_protocol].module = NULL; | 1175 | nl_table[sk->sk_protocol].module = NULL; |
1176 | nl_table[sk->sk_protocol].bind = NULL; | 1176 | nl_table[sk->sk_protocol].bind = NULL; |
1177 | nl_table[sk->sk_protocol].compare = NULL; | ||
1178 | nl_table[sk->sk_protocol].flags = 0; | 1177 | nl_table[sk->sk_protocol].flags = 0; |
1179 | nl_table[sk->sk_protocol].registered = 0; | 1178 | nl_table[sk->sk_protocol].registered = 0; |
1180 | } | 1179 | } |
@@ -2326,7 +2325,6 @@ __netlink_kernel_create(struct net *net, int unit, struct module *module, | |||
2326 | rcu_assign_pointer(nl_table[unit].listeners, listeners); | 2325 | rcu_assign_pointer(nl_table[unit].listeners, listeners); |
2327 | nl_table[unit].cb_mutex = cb_mutex; | 2326 | nl_table[unit].cb_mutex = cb_mutex; |
2328 | nl_table[unit].module = module; | 2327 | nl_table[unit].module = module; |
2329 | nl_table[unit].compare = netlink_compare; | ||
2330 | if (cfg) { | 2328 | if (cfg) { |
2331 | nl_table[unit].bind = cfg->bind; | 2329 | nl_table[unit].bind = cfg->bind; |
2332 | nl_table[unit].flags = cfg->flags; | 2330 | nl_table[unit].flags = cfg->flags; |
@@ -2973,6 +2971,8 @@ static int __init netlink_proto_init(void) | |||
2973 | hash->shift = 0; | 2971 | hash->shift = 0; |
2974 | hash->mask = 0; | 2972 | hash->mask = 0; |
2975 | hash->rehash_time = jiffies; | 2973 | hash->rehash_time = jiffies; |
2974 | |||
2975 | nl_table[i].compare = netlink_compare; | ||
2976 | } | 2976 | } |
2977 | 2977 | ||
2978 | netlink_add_usersock_entry(); | 2978 | netlink_add_usersock_entry(); |