ipv4: convert fib_num_tclassid_users to atomic_t
Before commitfaa041a40b("ipv4: Create cleanup helper for fib_nh") changes to net->ipv4.fib_num_tclassid_users were protected by RTNL. After the change, this is no longer the case, as free_fib_info_rcu() runs after rcu grace period, without rtnl being held. Fixes:faa041a40b("ipv4: Create cleanup helper for fib_nh") Signed-off-by: Eric Dumazet <edumazet@google.com> Cc: David Ahern <dsahern@kernel.org> Reviewed-by: David Ahern <dsahern@kernel.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
a37a0ee4d2
commit
213f5f8f31
@@ -264,7 +264,7 @@ static int fib4_rule_configure(struct fib_rule *rule, struct sk_buff *skb,
|
||||
if (tb[FRA_FLOW]) {
|
||||
rule4->tclassid = nla_get_u32(tb[FRA_FLOW]);
|
||||
if (rule4->tclassid)
|
||||
net->ipv4.fib_num_tclassid_users++;
|
||||
atomic_inc(&net->ipv4.fib_num_tclassid_users);
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -296,7 +296,7 @@ static int fib4_rule_delete(struct fib_rule *rule)
|
||||
|
||||
#ifdef CONFIG_IP_ROUTE_CLASSID
|
||||
if (((struct fib4_rule *)rule)->tclassid)
|
||||
net->ipv4.fib_num_tclassid_users--;
|
||||
atomic_dec(&net->ipv4.fib_num_tclassid_users);
|
||||
#endif
|
||||
net->ipv4.fib_has_custom_rules = true;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user