]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
netdev-genl: report NAPI thread PID in the caller's pid namespace
authorMaoyi Xie <maoyixie.tju@gmail.com>
Mon, 15 Jun 2026 17:17:36 +0000 (01:17 +0800)
committerJakub Kicinski <kuba@kernel.org>
Wed, 17 Jun 2026 23:09:32 +0000 (16:09 -0700)
netdev_nl_napi_fill_one() reports the NAPI kthread PID in NETDEV_A_NAPI_PID
using task_pid_nr(), which returns the PID in the initial pid namespace.

NETDEV_CMD_NAPI_GET does not have GENL_ADMIN_PERM and the netdev genl family
is netnsok, so a caller in a child pid namespace can issue it. That caller
then sees the kthread's global PID, even though the kthread is not visible
in its pid namespace, where the value should be 0.

Translate the PID through the caller's pid namespace, the same way commit
3799c2570982 ("io_uring/fdinfo: translate SqThread PID through caller's
pid_ns") did for the io_uring SQPOLL thread. The doit and dumpit paths both
run synchronously in the caller's context, so task_active_pid_ns(current) is
the caller's pid namespace.

Fixes: db4704f4e4df ("netdev-genl: Add PID for the NAPI thread")
Cc: stable@vger.kernel.org
Signed-off-by: Maoyi Xie <maoyixie.tju@gmail.com>
Reviewed-by: Joe Damato <joe@dama.to>
Reviewed-by: Samiullah Khawaja <skhawaja@google.com>
Link: https://patch.msgid.link/20260615171736.1709318-1-maoyixie.tju@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/core/netdev-genl.c

index 11b0b91683d764017f90d0471f1dbd0eb16140b3..c15d8d4ca1f8fae0b9df70aa5203a2384809f12b 100644 (file)
@@ -2,6 +2,7 @@
 
 #include <linux/netdevice.h>
 #include <linux/notifier.h>
+#include <linux/pid_namespace.h>
 #include <linux/rtnetlink.h>
 #include <net/busy_poll.h>
 #include <net/net_namespace.h>
@@ -189,7 +190,8 @@ netdev_nl_napi_fill_one(struct sk_buff *rsp, struct napi_struct *napi,
                goto nla_put_failure;
 
        if (napi->thread) {
-               pid = task_pid_nr(napi->thread);
+               pid = task_pid_nr_ns(napi->thread,
+                                    task_active_pid_ns(current));
                if (nla_put_u32(rsp, NETDEV_A_NAPI_PID, pid))
                        goto nla_put_failure;
        }