Re: [PATCH v1 net] amt: Don't support cross-netns setup.
Taehee Yoo <[email protected]>
| Newsgroups | gmane.linux.network |
|---|---|
| Message-ID | <CAMArcTWHRtRVi0HthfsytpCLfC-E5UdoaR1DuzgcdZhDyKcfLA@mail.gmail.com> |
On Fri, Aug 7, 2026 at 11:03 AM Kuniyuki Iwashima <[email protected]> wrote: > Hi Kuniyuki, Thanks a lot for your work! > When a lower device is unregistered, amt_device_event() tries > to unregister its upper AMT device, but it has two problems. > > 1. amt_lookup_upper_dev() looks up an upper device in the > lower device's netns only > > 2. amt_device_event() unregisters a single upper device only > > If AMT device is created on a lower device in another netns, > removing the lower device triggers the splat below and gets > stuck until all upper devices are removed. [0] > > The cross-netns setup seems unintentional considering 1. and > the following points: > > * amt_link_setup() sets dev->netns_immutable to true > * skb_scrub_packet() is not called in the fast path > * iproute2 binary fails to find cross-netns lower device via > link-netns: > # ip -n ns1 link add amt0 link-netns ns2 type amt dev veth1 > Cannot find device "veth1" > > Instead of supporting it properly and preparing for per-netns > netdev unreg, let's forbid cross-netns setup. > > Note that the problem 2. needs a separate fix. > > [0]: > WARNING: net/core/dev.c:12518 at unregister_netdevice_many_notify+0x1cce/0x2250, CPU#48: ip/2031 > Modules linked in: > CPU: 48 UID: 0 PID: 2031 Comm: ip Not tainted 7.2.0-rc5+ #27 PREEMPT(full) > Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.17.0-debian-1.17.0-1 04/01/2014 > RIP: 0010:unregister_netdevice_many_notify (net/core/dev.c:12518) > Code: 89 ef e8 d5 52 ae fe e9 d0 f4 ff ff 48 8d 3d f9 3b 9c 02 48 c7 c6 c0 0b 63 84 ba ab 1f 00 00 67 48 0f b9 3a e9 65 ff ff ff 90 <0f> 0b 90 eb 81 48 8d 3d f6 3b 9c 02 48 c7 c6 c0 0b 63 84 ba e2 1f > RSP: 0018:ffffc90004abf160 EFLAGS: 00010212 > RAX: ffff888104d38260 RBX: ffff88800b0911b8 RCX: dffffc0000000000 > RDX: 0000000000000000 RSI: 0000000000000008 RDI: ffffffff85b9f880 > RBP: ffffc90004abf2d0 R08: ffffffff85b9f887 R09: 1ffffffff0b73f10 > R10: dffffc0000000000 R11: fffffbfff0b73f11 R12: ffff88800b091d08 > R13: ffff88800b091178 R14: dffffc0000000000 R15: ffff88800b091000 > FS: 00007f555b86c600(0000) GS:ffff8881942a0000(0000) knlGS:0000000000000000 > CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 > CR2: 0000562107d489c0 CR3: 0000000109a40002 CR4: 0000000000372ef0 > Call Trace: > <TASK> > rtnl_dellink (net/core/rtnetlink.c:3632 net/core/rtnetlink.c:3674) > rtnetlink_rcv_msg (net/core/rtnetlink.c:7112) > netlink_rcv_skb (net/netlink/af_netlink.c:2556) > netlink_unicast (net/netlink/af_netlink.c:1319) > netlink_sendmsg (net/netlink/af_netlink.c:1900) > ____sys_sendmsg (net/socket.c:775) > __sys_sendmsg (net/socket.c:2738) > do_syscall_64 (arch/x86/entry/syscall_64.c:63) > entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:121) > ... > unregister_netdevice: waiting for veth0 to become free. Usage count = 7 > ref_tracker: netdev@ffff88800d7496d8 has 3/3 users at > __netdev_adjacent_dev_insert (./include/linux/netdevice.h:4525 ./include/linux/netdevice.h:4554 net/core/dev.c:8791) > __netdev_upper_dev_link (net/core/dev.c:8879 net/core/dev.c:8963) > netdev_upper_dev_link (net/core/dev.c:9009) > amt_newlink (drivers/net/amt.c:3321) > Reviewed-by: Taehee Yoo <[email protected]> Thanks a lot! Taehee Yoo > Fixes: b9022b53adad ("amt: add control plane of amt interface") > Signed-off-by: Kuniyuki Iwashima <[email protected]> > --- > drivers/net/amt.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/drivers/net/amt.c b/drivers/net/amt.c > index 182a41d59a75..7645ce3a29ad 100644 > --- a/drivers/net/amt.c > +++ b/drivers/net/amt.c > @@ -3221,6 +3221,9 @@ static int amt_newlink(struct net_device *dev, > struct nlattr **tb = params->tb; > int err = -EINVAL; > > + if (!net_eq(link_net, dev_net(dev))) > + return err; > + > amt->net = link_net; > amt->mode = nla_get_u32(data[IFLA_AMT_MODE]); > > -- > 2.55.0.679.g6767b8d81c-goog >