Message ID | 20250213043354.91368-1-kuniyu@amazon.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 9593172d93b9f91c362baec4643003dc29802929 |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [v1,net] geneve: Fix use-after-free in geneve_find_dev(). | expand |
Hello: This patch was applied to netdev/net.git (main) by Jakub Kicinski <kuba@kernel.org>: On Thu, 13 Feb 2025 13:33:54 +0900 you wrote: > syzkaller reported a use-after-free in geneve_find_dev() [0] > without repro. > > geneve_configure() links struct geneve_dev.next to > net_generic(net, geneve_net_id)->geneve_list. > > The net here could differ from dev_net(dev) if IFLA_NET_NS_PID, > IFLA_NET_NS_FD, or IFLA_TARGET_NETNSID is set. > > [...] Here is the summary with links: - [v1,net] geneve: Fix use-after-free in geneve_find_dev(). https://git.kernel.org/netdev/net/c/9593172d93b9 You are awesome, thank you!
diff --git a/drivers/net/geneve.c b/drivers/net/geneve.c index 642155cb8315..a1f674539965 100644 --- a/drivers/net/geneve.c +++ b/drivers/net/geneve.c @@ -1907,16 +1907,11 @@ static void geneve_destroy_tunnels(struct net *net, struct list_head *head) /* gather any geneve devices that were moved into this ns */ for_each_netdev_safe(net, dev, aux) if (dev->rtnl_link_ops == &geneve_link_ops) - unregister_netdevice_queue(dev, head); + geneve_dellink(dev, head); /* now gather any other geneve devices that were created in this ns */ - list_for_each_entry_safe(geneve, next, &gn->geneve_list, next) { - /* If geneve->dev is in the same netns, it was already added - * to the list by the previous loop. - */ - if (!net_eq(dev_net(geneve->dev), net)) - unregister_netdevice_queue(geneve->dev, head); - } + list_for_each_entry_safe(geneve, next, &gn->geneve_list, next) + geneve_dellink(geneve->dev, head); } static void __net_exit geneve_exit_batch_rtnl(struct list_head *net_list,