diff options
Diffstat (limited to 'net/ipv4/fib_trie.c')
| -rw-r--r-- | net/ipv4/fib_trie.c | 9 | 
1 files changed, 7 insertions, 2 deletions
diff --git a/net/ipv4/fib_trie.c b/net/ipv4/fib_trie.c index af5d8979286..c98f115fb0f 100644 --- a/net/ipv4/fib_trie.c +++ b/net/ipv4/fib_trie.c @@ -71,6 +71,7 @@  #include <linux/netlink.h>  #include <linux/init.h>  #include <linux/list.h> +#include <linux/slab.h>  #include <net/net_namespace.h>  #include <net/ip.h>  #include <net/protocol.h> @@ -208,7 +209,9 @@ static inline struct node *tnode_get_child_rcu(struct tnode *tn, unsigned int i)  {  	struct node *ret = tnode_get_child(tn, i); -	return rcu_dereference(ret); +	return rcu_dereference_check(ret, +				     rcu_read_lock_held() || +				     lockdep_rtnl_is_held());  }  static inline int tnode_child_length(const struct tnode *tn) @@ -961,7 +964,9 @@ fib_find_node(struct trie *t, u32 key)  	struct node *n;  	pos = 0; -	n = rcu_dereference(t->trie); +	n = rcu_dereference_check(t->trie, +				  rcu_read_lock_held() || +				  lockdep_rtnl_is_held());  	while (n != NULL &&  NODE_TYPE(n) == T_TNODE) {  		tn = (struct tnode *) n;  |