* [PATCH net, 0/2] net: Add llist_node init and fix hv_netvsc namespace error
@ 2025-07-22 23:50 Haiyang Zhang
2025-07-22 23:50 ` [PATCH net, 1/2] net: core: Fix missing init of llist_node in setup_net() Haiyang Zhang
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: Haiyang Zhang @ 2025-07-22 23:50 UTC (permalink / raw)
To: linux-hyperv, netdev
Cc: haiyangz, kys, wei.liu, decui, andrew+netdev, sd, viro,
chuck.lever, neil, edumazet, kuba, pabeni, horms, davem, kuniyu,
linux-kernel
From: Haiyang Zhang <haiyangz@microsoft.com>
Add llist_node init to setup_net(), so we can check if the node is on list.
Then, fix the namespace callback function in hv_netvsc.
Haiyang Zhang (2):
net: core: Fix missing init of llist_node in setup_net()
hv_netvsc: Fix panic during namespace deletion with VF
drivers/net/hyperv/netvsc_drv.c | 10 +++++++++-
net/core/net_namespace.c | 3 +++
2 files changed, 12 insertions(+), 1 deletion(-)
--
2.34.1
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH net, 1/2] net: core: Fix missing init of llist_node in setup_net()
2025-07-22 23:50 [PATCH net, 0/2] net: Add llist_node init and fix hv_netvsc namespace error Haiyang Zhang
@ 2025-07-22 23:50 ` Haiyang Zhang
2025-07-23 0:01 ` Kuniyuki Iwashima
2025-07-22 23:50 ` [PATCH net, 2/2] hv_netvsc: Fix panic during namespace deletion with VF Haiyang Zhang
2025-07-23 1:44 ` [PATCH net, 0/2] net: Add llist_node init and fix hv_netvsc namespace error Jakub Kicinski
2 siblings, 1 reply; 7+ messages in thread
From: Haiyang Zhang @ 2025-07-22 23:50 UTC (permalink / raw)
To: linux-hyperv, netdev
Cc: haiyangz, kys, wei.liu, decui, andrew+netdev, sd, viro,
chuck.lever, neil, edumazet, kuba, pabeni, horms, davem, kuniyu,
linux-kernel, stable
From: Haiyang Zhang <haiyangz@microsoft.com>
Add init_llist_node for lock-less list nodes in struct net in
setup_net(), so we can test if a node is on a list or not.
Cc: stable@vger.kernel.org
Fixes: d6b3358a2813 ("llist: add interface to check if a node is on a list.")
Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
---
net/core/net_namespace.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c
index ae54f26709ca..2a821849558f 100644
--- a/net/core/net_namespace.c
+++ b/net/core/net_namespace.c
@@ -434,6 +434,9 @@ static __net_init int setup_net(struct net *net)
LIST_HEAD(net_exit_list);
int error = 0;
+ init_llist_node(&net->defer_free_list);
+ init_llist_node(&net->cleanup_list);
+
preempt_disable();
net->net_cookie = gen_cookie_next(&net_cookie);
preempt_enable();
--
2.34.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH net, 2/2] hv_netvsc: Fix panic during namespace deletion with VF
2025-07-22 23:50 [PATCH net, 0/2] net: Add llist_node init and fix hv_netvsc namespace error Haiyang Zhang
2025-07-22 23:50 ` [PATCH net, 1/2] net: core: Fix missing init of llist_node in setup_net() Haiyang Zhang
@ 2025-07-22 23:50 ` Haiyang Zhang
2025-07-23 1:44 ` [PATCH net, 0/2] net: Add llist_node init and fix hv_netvsc namespace error Jakub Kicinski
2 siblings, 0 replies; 7+ messages in thread
From: Haiyang Zhang @ 2025-07-22 23:50 UTC (permalink / raw)
To: linux-hyperv, netdev
Cc: haiyangz, kys, wei.liu, decui, andrew+netdev, sd, viro,
chuck.lever, neil, edumazet, kuba, pabeni, horms, davem, kuniyu,
linux-kernel, stable
From: Haiyang Zhang <haiyangz@microsoft.com>
The existing code move the VF NIC to new namespace when NETDEV_REGISTER is
received on netvsc NIC. During deletion of the namespace,
default_device_exit_batch() >> default_device_exit_net() is called. When
netvsc NIC is moved back and registered to the default namespace, it
automatically brings VF NIC back to the default namespace. This will cause
the default_device_exit_net() >> for_each_netdev_safe loop unable to detect
the list end, and hit NULL ptr:
[ 231.449420] mana 7870:00:00.0 enP30832s1: Moved VF to namespace with: eth0
[ 231.449656] BUG: kernel NULL pointer dereference, address: 0000000000000010
[ 231.450246] #PF: supervisor read access in kernel mode
[ 231.450579] #PF: error_code(0x0000) - not-present page
[ 231.450916] PGD 17b8a8067 P4D 0
[ 231.451163] Oops: Oops: 0000 [#1] SMP NOPTI
[ 231.451450] CPU: 82 UID: 0 PID: 1394 Comm: kworker/u768:1 Not tainted 6.16.0-rc4+ #3 VOLUNTARY
[ 231.452042] Hardware name: Microsoft Corporation Virtual Machine/Virtual Machine, BIOS Hyper-V UEFI Release v4.1 11/21/2024
[ 231.452692] Workqueue: netns cleanup_net
[ 231.452947] RIP: 0010:default_device_exit_batch+0x16c/0x3f0
[ 231.453326] Code: c0 0c f5 b3 e8 d5 db fe ff 48 85 c0 74 15 48 c7 c2 f8 fd ca b2 be 10 00 00 00 48 8d 7d c0 e8 7b 77 25 00 49 8b 86 28 01 00 00 <48> 8b 50 10 4c 8b 2a 4c 8d 62 f0 49 83 ed 10 4c 39 e0 0f 84 d6 00
[ 231.454294] RSP: 0018:ff75fc7c9bf9fd00 EFLAGS: 00010246
[ 231.454610] RAX: 0000000000000000 RBX: 0000000000000002 RCX: 61c8864680b583eb
[ 231.455094] RDX: ff1fa9f71462d800 RSI: ff75fc7c9bf9fd38 RDI: 0000000030766564
[ 231.455686] RBP: ff75fc7c9bf9fd78 R08: 0000000000000000 R09: 0000000000000000
[ 231.456126] R10: 0000000000000001 R11: 0000000000000004 R12: ff1fa9f70088e340
[ 231.456621] R13: ff1fa9f70088e340 R14: ffffffffb3f50c20 R15: ff1fa9f7103e6340
[ 231.457161] FS: 0000000000000000(0000) GS:ff1faa6783a08000(0000) knlGS:0000000000000000
[ 231.457707] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 231.458031] CR2: 0000000000000010 CR3: 0000000179ab2006 CR4: 0000000000b73ef0
[ 231.458434] Call Trace:
[ 231.458600] <TASK>
[ 231.458777] ops_undo_list+0x100/0x220
[ 231.459015] cleanup_net+0x1b8/0x300
[ 231.459285] process_one_work+0x184/0x340
To fix it, skip the VF NIC's namespace change with netvsc when the VF
namespace is being cleaned up, because the default_device_exit_net() will
do it later.
Cc: stable@vger.kernel.org
Fixes: 4c262801ea60 ("hv_netvsc: Fix VF namespace also in synthetic NIC NETDEV_REGISTER event")
Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
---
drivers/net/hyperv/netvsc_drv.c | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
index 8be9bce66a4e..8fc05a8c0018 100644
--- a/drivers/net/hyperv/netvsc_drv.c
+++ b/drivers/net/hyperv/netvsc_drv.c
@@ -2788,13 +2788,21 @@ static void netvsc_event_set_vf_ns(struct net_device *ndev)
{
struct net_device_context *ndev_ctx = netdev_priv(ndev);
struct net_device *vf_netdev;
+ struct net *vfnet;
int ret;
vf_netdev = rtnl_dereference(ndev_ctx->vf_netdev);
if (!vf_netdev)
return;
- if (!net_eq(dev_net(ndev), dev_net(vf_netdev))) {
+ vfnet = dev_net(vf_netdev);
+ /* Do not move it now if its net is being cleaned up,
+ * net_cleanup_work will move it.
+ */
+ if (llist_on_list(&vfnet->cleanup_list))
+ return;
+
+ if (!net_eq(dev_net(ndev), vfnet)) {
ret = dev_change_net_namespace(vf_netdev, dev_net(ndev),
"eth%d");
if (ret)
--
2.34.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH net, 1/2] net: core: Fix missing init of llist_node in setup_net()
2025-07-22 23:50 ` [PATCH net, 1/2] net: core: Fix missing init of llist_node in setup_net() Haiyang Zhang
@ 2025-07-23 0:01 ` Kuniyuki Iwashima
2025-07-23 0:17 ` [EXTERNAL] " Haiyang Zhang
0 siblings, 1 reply; 7+ messages in thread
From: Kuniyuki Iwashima @ 2025-07-23 0:01 UTC (permalink / raw)
To: Haiyang Zhang
Cc: linux-hyperv, netdev, haiyangz, kys, wei.liu, decui,
andrew+netdev, sd, viro, chuck.lever, neil, edumazet, kuba,
pabeni, horms, davem, linux-kernel, stable
On Tue, Jul 22, 2025 at 4:51 PM Haiyang Zhang
<haiyangz@linux.microsoft.com> wrote:
>
> From: Haiyang Zhang <haiyangz@microsoft.com>
>
> Add init_llist_node for lock-less list nodes in struct net in
> setup_net(), so we can test if a node is on a list or not.
>
> Cc: stable@vger.kernel.org
> Fixes: d6b3358a2813 ("llist: add interface to check if a node is on a list.")
No Fixes tag is needed because we didn't have a need to
test if net is queued for destruction.
> Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
> ---
> net/core/net_namespace.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c
> index ae54f26709ca..2a821849558f 100644
> --- a/net/core/net_namespace.c
> +++ b/net/core/net_namespace.c
> @@ -434,6 +434,9 @@ static __net_init int setup_net(struct net *net)
> LIST_HEAD(net_exit_list);
> int error = 0;
>
> + init_llist_node(&net->defer_free_list);
> + init_llist_node(&net->cleanup_list);
> +
> preempt_disable();
> net->net_cookie = gen_cookie_next(&net_cookie);
> preempt_enable();
> --
> 2.34.1
>
^ permalink raw reply [flat|nested] 7+ messages in thread
* RE: [EXTERNAL] Re: [PATCH net, 1/2] net: core: Fix missing init of llist_node in setup_net()
2025-07-23 0:01 ` Kuniyuki Iwashima
@ 2025-07-23 0:17 ` Haiyang Zhang
0 siblings, 0 replies; 7+ messages in thread
From: Haiyang Zhang @ 2025-07-23 0:17 UTC (permalink / raw)
To: Kuniyuki Iwashima, Haiyang Zhang
Cc: linux-hyperv@vger.kernel.org, netdev@vger.kernel.org,
KY Srinivasan, wei.liu@kernel.org, Dexuan Cui,
andrew+netdev@lunn.ch, sd@queasysnail.net,
viro@zeniv.linux.org.uk, chuck.lever@oracle.com, neil@brown.name,
edumazet@google.com, kuba@kernel.org, pabeni@redhat.com,
horms@kernel.org, davem@davemloft.net,
linux-kernel@vger.kernel.org, stable@vger.kernel.org
> -----Original Message-----
> From: Kuniyuki Iwashima <kuniyu@google.com>
> Sent: Tuesday, July 22, 2025 8:02 PM
> To: Haiyang Zhang <haiyangz@linux.microsoft.com>
> Cc: linux-hyperv@vger.kernel.org; netdev@vger.kernel.org; Haiyang Zhang
> <haiyangz@microsoft.com>; KY Srinivasan <kys@microsoft.com>;
> wei.liu@kernel.org; Dexuan Cui <decui@microsoft.com>;
> andrew+netdev@lunn.ch; sd@queasysnail.net; viro@zeniv.linux.org.uk;
> chuck.lever@oracle.com; neil@brown.name; edumazet@google.com;
> kuba@kernel.org; pabeni@redhat.com; horms@kernel.org; davem@davemloft.net;
> linux-kernel@vger.kernel.org; stable@vger.kernel.org
> Subject: [EXTERNAL] Re: [PATCH net, 1/2] net: core: Fix missing init of
> llist_node in setup_net()
>
> [You don't often get email from kuniyu@google.com. Learn why this is
> important at https://aka.ms/LearnAboutSenderIdentification ]
>
> On Tue, Jul 22, 2025 at 4:51 PM Haiyang Zhang
> <haiyangz@linux.microsoft.com> wrote:
> >
> > From: Haiyang Zhang <haiyangz@microsoft.com>
> >
> > Add init_llist_node for lock-less list nodes in struct net in
> > setup_net(), so we can test if a node is on a list or not.
> >
> > Cc: stable@vger.kernel.org
> > Fixes: d6b3358a2813 ("llist: add interface to check if a node is on a
> list.")
>
> No Fixes tag is needed because we didn't have a need to
> test if net is queued for destruction.
I know the original patch wasn't buggy.
This tag is just for the stable backport version hint.
In another thread, Eric Dumazet recommended Fixes tag for patches for "stable":
https://patchwork.kernel.org/project/netdevbpf/patch/1752870014-28909-1-git-send-email-haiyangz@linux.microsoft.com/
Thanks,
- Haiyang
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH net, 0/2] net: Add llist_node init and fix hv_netvsc namespace error
2025-07-22 23:50 [PATCH net, 0/2] net: Add llist_node init and fix hv_netvsc namespace error Haiyang Zhang
2025-07-22 23:50 ` [PATCH net, 1/2] net: core: Fix missing init of llist_node in setup_net() Haiyang Zhang
2025-07-22 23:50 ` [PATCH net, 2/2] hv_netvsc: Fix panic during namespace deletion with VF Haiyang Zhang
@ 2025-07-23 1:44 ` Jakub Kicinski
2025-07-23 20:49 ` [EXTERNAL] " Haiyang Zhang
2 siblings, 1 reply; 7+ messages in thread
From: Jakub Kicinski @ 2025-07-23 1:44 UTC (permalink / raw)
To: Haiyang Zhang
Cc: linux-hyperv, netdev, haiyangz, kys, wei.liu, decui,
andrew+netdev, sd, viro, chuck.lever, neil, edumazet, pabeni,
horms, davem, kuniyu, linux-kernel
On Tue, 22 Jul 2025 16:50:46 -0700 Haiyang Zhang wrote:
> Add llist_node init to setup_net(), so we can check if the node is on list.
> Then, fix the namespace callback function in hv_netvsc.
Can you not do the moving from a workqueue? Schedule a work, let the
stack finish what it's doing, take rtnl_lock, do you your own moving?
--
pw-bot: cr
^ permalink raw reply [flat|nested] 7+ messages in thread
* RE: [EXTERNAL] Re: [PATCH net, 0/2] net: Add llist_node init and fix hv_netvsc namespace error
2025-07-23 1:44 ` [PATCH net, 0/2] net: Add llist_node init and fix hv_netvsc namespace error Jakub Kicinski
@ 2025-07-23 20:49 ` Haiyang Zhang
0 siblings, 0 replies; 7+ messages in thread
From: Haiyang Zhang @ 2025-07-23 20:49 UTC (permalink / raw)
To: Jakub Kicinski, Haiyang Zhang
Cc: linux-hyperv@vger.kernel.org, netdev@vger.kernel.org,
KY Srinivasan, wei.liu@kernel.org, Dexuan Cui,
andrew+netdev@lunn.ch, sd@queasysnail.net,
viro@zeniv.linux.org.uk, chuck.lever@oracle.com, neil@brown.name,
edumazet@google.com, pabeni@redhat.com, horms@kernel.org,
davem@davemloft.net, kuniyu@google.com,
linux-kernel@vger.kernel.org
> -----Original Message-----
> From: Jakub Kicinski <kuba@kernel.org>
> Sent: Tuesday, July 22, 2025 9:45 PM
> To: Haiyang Zhang <haiyangz@linux.microsoft.com>
> Cc: linux-hyperv@vger.kernel.org; netdev@vger.kernel.org; Haiyang Zhang
> <haiyangz@microsoft.com>; KY Srinivasan <kys@microsoft.com>;
> wei.liu@kernel.org; Dexuan Cui <decui@microsoft.com>;
> andrew+netdev@lunn.ch; sd@queasysnail.net; viro@zeniv.linux.org.uk;
> chuck.lever@oracle.com; neil@brown.name; edumazet@google.com;
> pabeni@redhat.com; horms@kernel.org; davem@davemloft.net;
> kuniyu@google.com; linux-kernel@vger.kernel.org
> Subject: [EXTERNAL] Re: [PATCH net, 0/2] net: Add llist_node init and fix
> hv_netvsc namespace error
>
> On Tue, 22 Jul 2025 16:50:46 -0700 Haiyang Zhang wrote:
> > Add llist_node init to setup_net(), so we can check if the node is on
> list.
> > Then, fix the namespace callback function in hv_netvsc.
>
> Can you not do the moving from a workqueue? Schedule a work, let the
> stack finish what it's doing, take rtnl_lock, do you your own moving?
Thanks for the suggestion! I will implement and test it.
- Haiyang
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2025-07-23 20:49 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-07-22 23:50 [PATCH net, 0/2] net: Add llist_node init and fix hv_netvsc namespace error Haiyang Zhang
2025-07-22 23:50 ` [PATCH net, 1/2] net: core: Fix missing init of llist_node in setup_net() Haiyang Zhang
2025-07-23 0:01 ` Kuniyuki Iwashima
2025-07-23 0:17 ` [EXTERNAL] " Haiyang Zhang
2025-07-22 23:50 ` [PATCH net, 2/2] hv_netvsc: Fix panic during namespace deletion with VF Haiyang Zhang
2025-07-23 1:44 ` [PATCH net, 0/2] net: Add llist_node init and fix hv_netvsc namespace error Jakub Kicinski
2025-07-23 20:49 ` [EXTERNAL] " Haiyang Zhang
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).