ipv4: convert fib_num_tclassid_users to atomic_t
commit 213f5f8f31f10aa1e83187ae20fb7fa4e626b724 upstream. 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> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
fa973bf5fd
commit
9a40a1e0eb
@@ -222,7 +222,7 @@ void fib_nh_release(struct net *net, struct fib_nh *fib_nh)
|
||||
{
|
||||
#ifdef CONFIG_IP_ROUTE_CLASSID
|
||||
if (fib_nh->nh_tclassid)
|
||||
net->ipv4.fib_num_tclassid_users--;
|
||||
atomic_dec(&net->ipv4.fib_num_tclassid_users);
|
||||
#endif
|
||||
fib_nh_common_release(&fib_nh->nh_common);
|
||||
}
|
||||
@@ -633,7 +633,7 @@ int fib_nh_init(struct net *net, struct fib_nh *nh,
|
||||
#ifdef CONFIG_IP_ROUTE_CLASSID
|
||||
nh->nh_tclassid = cfg->fc_flow;
|
||||
if (nh->nh_tclassid)
|
||||
net->ipv4.fib_num_tclassid_users++;
|
||||
atomic_inc(&net->ipv4.fib_num_tclassid_users);
|
||||
#endif
|
||||
#ifdef CONFIG_IP_ROUTE_MULTIPATH
|
||||
nh->fib_nh_weight = nh_weight;
|
||||
|
Reference in New Issue
Block a user