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 af5d89792860..c98f115fb0fd 100644 --- a/net/ipv4/fib_trie.c +++ b/net/ipv4/fib_trie.c | |||
@@ -71,6 +71,7 @@ | |||
71 | #include <linux/netlink.h> | 71 | #include <linux/netlink.h> |
72 | #include <linux/init.h> | 72 | #include <linux/init.h> |
73 | #include <linux/list.h> | 73 | #include <linux/list.h> |
74 | #include <linux/slab.h> | ||
74 | #include <net/net_namespace.h> | 75 | #include <net/net_namespace.h> |
75 | #include <net/ip.h> | 76 | #include <net/ip.h> |
76 | #include <net/protocol.h> | 77 | #include <net/protocol.h> |
@@ -208,7 +209,9 @@ static inline struct node *tnode_get_child_rcu(struct tnode *tn, unsigned int i) | |||
208 | { | 209 | { |
209 | struct node *ret = tnode_get_child(tn, i); | 210 | struct node *ret = tnode_get_child(tn, i); |
210 | 211 | ||
211 | return rcu_dereference(ret); | 212 | return rcu_dereference_check(ret, |
213 | rcu_read_lock_held() || | ||
214 | lockdep_rtnl_is_held()); | ||
212 | } | 215 | } |
213 | 216 | ||
214 | static inline int tnode_child_length(const struct tnode *tn) | 217 | static inline int tnode_child_length(const struct tnode *tn) |
@@ -961,7 +964,9 @@ fib_find_node(struct trie *t, u32 key) | |||
961 | struct node *n; | 964 | struct node *n; |
962 | 965 | ||
963 | pos = 0; | 966 | pos = 0; |
964 | n = rcu_dereference(t->trie); | 967 | n = rcu_dereference_check(t->trie, |
968 | rcu_read_lock_held() || | ||
969 | lockdep_rtnl_is_held()); | ||
965 | 970 | ||
966 | while (n != NULL && NODE_TYPE(n) == T_TNODE) { | 971 | while (n != NULL && NODE_TYPE(n) == T_TNODE) { |
967 | tn = (struct tnode *) n; | 972 | tn = (struct tnode *) n; |