mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-12-27 13:30:45 -05:00
ipv4: fib: Hold rtnl_net_lock() for ip_fib_net_exit().
ip_fib_net_exit() requires RTNL and is called from fib_net_init() and fib_net_exit_batch(). Let's hold rtnl_net_lock() before ip_fib_net_exit(). Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com> Reviewed-by: Eric Dumazet <edumazet@google.com> Reviewed-by: David Ahern <dsahern@kernel.org> Link: https://patch.msgid.link/20250228042328.96624-10-kuniyu@amazon.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
9f7f3ebeba
commit
af5cd2a8f0
@@ -1575,7 +1575,7 @@ static void ip_fib_net_exit(struct net *net)
|
||||
{
|
||||
int i;
|
||||
|
||||
ASSERT_RTNL();
|
||||
ASSERT_RTNL_NET(net);
|
||||
#ifdef CONFIG_IP_MULTIPLE_TABLES
|
||||
RCU_INIT_POINTER(net->ipv4.fib_main, NULL);
|
||||
RCU_INIT_POINTER(net->ipv4.fib_default, NULL);
|
||||
@@ -1635,9 +1635,9 @@ static int __net_init fib_net_init(struct net *net)
|
||||
out_nlfl:
|
||||
fib4_semantics_exit(net);
|
||||
out_semantics:
|
||||
rtnl_lock();
|
||||
rtnl_net_lock(net);
|
||||
ip_fib_net_exit(net);
|
||||
rtnl_unlock();
|
||||
rtnl_net_unlock(net);
|
||||
goto out;
|
||||
}
|
||||
|
||||
@@ -1652,9 +1652,11 @@ static void __net_exit fib_net_exit_batch(struct list_head *net_list)
|
||||
struct net *net;
|
||||
|
||||
rtnl_lock();
|
||||
list_for_each_entry(net, net_list, exit_list)
|
||||
list_for_each_entry(net, net_list, exit_list) {
|
||||
__rtnl_net_lock(net);
|
||||
ip_fib_net_exit(net);
|
||||
|
||||
__rtnl_net_unlock(net);
|
||||
}
|
||||
rtnl_unlock();
|
||||
|
||||
list_for_each_entry(net, net_list, exit_list)
|
||||
|
||||
Reference in New Issue
Block a user