* [syzbot] [fs?] WARNING in nsproxy_ns_active_put
@ 2025-11-06 1:36 syzbot
2025-11-07 10:14 ` Forwarded: [PATCH] fs/nsfs: skip dropping active refs on initial namespaces syzbot
` (5 more replies)
0 siblings, 6 replies; 20+ messages in thread
From: syzbot @ 2025-11-06 1:36 UTC (permalink / raw)
To: brauner, jack, linux-fsdevel, linux-kernel, syzkaller-bugs, viro
Hello,
syzbot found the following issue on:
HEAD commit: 84d39fb9d529 Add linux-next specific files for 20251105
git tree: linux-next
console output: https://syzkaller.appspot.com/x/log.txt?x=122ec0b4580000
kernel config: https://syzkaller.appspot.com/x/.config?x=413cf24e78b667b9
dashboard link: https://syzkaller.appspot.com/bug?extid=0b2e79f91ff6579bfa5b
compiler: Debian clang version 20.1.8 (++20250708063551+0c9f909b7976-1~exp1~20250708183702.136), Debian LLD 20.1.8
syz repro: https://syzkaller.appspot.com/x/repro.syz?x=12e09342580000
C reproducer: https://syzkaller.appspot.com/x/repro.c?x=14126114580000
Downloadable assets:
disk image: https://storage.googleapis.com/syzbot-assets/49de85e8d717/disk-84d39fb9.raw.xz
vmlinux: https://storage.googleapis.com/syzbot-assets/4fd90ea7659f/vmlinux-84d39fb9.xz
kernel image: https://storage.googleapis.com/syzbot-assets/235e0ee874fe/bzImage-84d39fb9.xz
IMPORTANT: if you fix the issue, please add the following tag to the commit:
Reported-by: syzbot+0b2e79f91ff6579bfa5b@syzkaller.appspotmail.com
------------[ cut here ]------------
WARNING: ./include/linux/ns_common.h:311 at __ns_ref_active_put include/linux/ns_common.h:311 [inline], CPU#0: syz.2.29/6060
WARNING: ./include/linux/ns_common.h:311 at nsproxy_ns_active_put+0xa19/0xd30 fs/nsfs.c:707, CPU#0: syz.2.29/6060
Modules linked in:
CPU: 0 UID: 0 PID: 6060 Comm: syz.2.29 Not tainted syzkaller #0 PREEMPT(full)
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/02/2025
RIP: 0010:__ns_ref_active_put include/linux/ns_common.h:311 [inline]
RIP: 0010:nsproxy_ns_active_put+0xa19/0xd30 fs/nsfs.c:707
Code: 0f 0b 90 e9 71 fc ff ff e8 54 52 77 ff 90 0f 0b 90 e9 ab fc ff ff e8 46 52 77 ff 90 0f 0b 90 e9 41 fd ff ff e8 38 52 77 ff 90 <0f> 0b 90 e9 64 fd ff ff e8 2a 52 77 ff 90 0f 0b 90 e9 98 fd ff ff
RSP: 0018:ffffc900033f7d38 EFLAGS: 00010293
RAX: ffffffff824a1b88 RBX: ffff88805876a750 RCX: ffff88807e148000
RDX: 0000000000000000 RSI: 00000000effffff8 RDI: 00000000effffff8
RBP: 00000000effffff8 R08: ffffffff8e36cb4b R09: 1ffffffff1c6d969
R10: dffffc0000000000 R11: fffffbfff1c6d96a R12: dffffc0000000000
R13: 1ffffffff1c6d955 R14: ffffffff8e36ca80 R15: ffffffff8e36caa8
FS: 00005555653d3500(0000) GS:ffff888125a8b000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 0000001b30163fff CR3: 0000000076924000 CR4: 00000000003526f0
Call Trace:
<TASK>
free_nsproxy+0x26/0x560 kernel/nsproxy.c:190
put_nsset kernel/nsproxy.c:341 [inline]
__do_sys_setns kernel/nsproxy.c:594 [inline]
__se_sys_setns+0x1268/0x17d0 kernel/nsproxy.c:559
do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
do_syscall_64+0xfa/0xfa0 arch/x86/entry/syscall_64.c:94
entry_SYSCALL_64_after_hwframe+0x77/0x7f
---
This report is generated by a bot. It may contain errors.
See https://goo.gl/tpsmEJ for more information about syzbot.
syzbot engineers can be reached at syzkaller@googlegroups.com.
syzbot will keep track of this issue. See:
https://goo.gl/tpsmEJ#status for how to communicate with syzbot.
If the report is already addressed, let syzbot know by replying with:
#syz fix: exact-commit-title
If you want syzbot to run the reproducer, reply with:
#syz test: git://repo/address.git branch-or-commit-hash
If you attach or paste a git patch, syzbot will apply it before testing.
If you want to overwrite report's subsystems, reply with:
#syz set subsystems: new-subsystem
(See the list of subsystem names on the web dashboard)
If the report is a duplicate of another one, reply with:
#syz dup: exact-subject-of-another-report
If you want to undo deduplication, reply with:
#syz undup
^ permalink raw reply [flat|nested] 20+ messages in thread
* Forwarded: [PATCH] fs/nsfs: skip dropping active refs on initial namespaces
2025-11-06 1:36 [syzbot] [fs?] WARNING in nsproxy_ns_active_put syzbot
@ 2025-11-07 10:14 ` syzbot
2025-11-07 11:16 ` Forwarded: [PATCH] ns: skip active reference management " syzbot
` (4 subsequent siblings)
5 siblings, 0 replies; 20+ messages in thread
From: syzbot @ 2025-11-07 10:14 UTC (permalink / raw)
To: linux-kernel, syzkaller-bugs
For archival purposes, forwarding an incoming command email to
linux-kernel@vger.kernel.org, syzkaller-bugs@googlegroups.com.
***
Subject: [PATCH] fs/nsfs: skip dropping active refs on initial namespaces
Author: kartikey406@gmail.com
#syz test: git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
Initial namespaces (init_net, init_uts_ns, init_ipc_ns, etc.) are
statically allocated and exist for the entire lifetime of the system.
They should never go through the normal namespace cleanup and release
paths.
When setns() is called with a file descriptor pointing to an initial
namespace, the kernel creates a temporary nsproxy structure during the
operation. In the cleanup path, nsproxy_ns_active_put() was blindly
dropping active references on all namespaces in the nsproxy, including
initial namespaces. This caused the active reference count on initial
namespaces to hit zero, triggering a WARNING in __ns_ref_active_put().
The WARNING fired because when an active reference count reaches zero,
the code path assumes the namespace is being released, which should
never happen for initial namespaces.
Fix this by checking if each namespace is an initial namespace before
dropping its active reference in nsproxy_ns_active_put(). Initial
namespaces are skipped, preventing their active reference counts from
incorrectly reaching zero.
Reported-by: syzbot+0b2e79f91ff6579bfa5b@syzkaller.appspotmail.com
Signed-off-by: Deepanshu Kartikey <kartikey406@gmail.com>
---
fs/nsfs.c | 25 +++++++++++++++++--------
1 file changed, 17 insertions(+), 8 deletions(-)
diff --git a/fs/nsfs.c b/fs/nsfs.c
index ba6c8975c82e..ffe31c66d1d8 100644
--- a/fs/nsfs.c
+++ b/fs/nsfs.c
@@ -19,6 +19,7 @@
#include <linux/exportfs.h>
#include <linux/nstree.h>
#include <net/net_namespace.h>
+#include <linux/ns_common.h>
#include "mount.h"
#include "internal.h"
@@ -698,12 +699,20 @@ void nsproxy_ns_active_get(struct nsproxy *ns)
void nsproxy_ns_active_put(struct nsproxy *ns)
{
- ns_ref_active_put(ns->mnt_ns);
- ns_ref_active_put(ns->uts_ns);
- ns_ref_active_put(ns->ipc_ns);
- ns_ref_active_put(ns->pid_ns_for_children);
- ns_ref_active_put(ns->cgroup_ns);
- ns_ref_active_put(ns->net_ns);
- ns_ref_active_put(ns->time_ns);
- ns_ref_active_put(ns->time_ns_for_children);
+ if (ns->mnt_ns && !is_initial_namespace(&ns->mnt_ns->ns))
+ ns_ref_active_put(ns->mnt_ns);
+ if (ns->uts_ns && !is_initial_namespace(&ns->uts_ns->ns))
+ ns_ref_active_put(ns->uts_ns);
+ if (ns->ipc_ns && !is_initial_namespace(&ns->ipc_ns->ns))
+ ns_ref_active_put(ns->ipc_ns);
+ if (ns->pid_ns_for_children && !is_initial_namespace(&ns->pid_ns_for_children->ns))
+ ns_ref_active_put(ns->pid_ns_for_children);
+ if (ns->cgroup_ns && !is_initial_namespace(&ns->cgroup_ns->ns))
+ ns_ref_active_put(ns->cgroup_ns);
+ if (ns->net_ns && !is_initial_namespace(&ns->net_ns->ns))
+ ns_ref_active_put(ns->net_ns);
+ if (ns->time_ns && !is_initial_namespace(&ns->time_ns->ns))
+ ns_ref_active_put(ns->time_ns);
+ if (ns->time_ns_for_children && !is_initial_namespace(&ns->time_ns_for_children->ns))
+ ns_ref_active_put(ns->time_ns_for_children);
}
--
2.43.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* Forwarded: [PATCH] ns: skip active reference management on initial namespaces
2025-11-06 1:36 [syzbot] [fs?] WARNING in nsproxy_ns_active_put syzbot
2025-11-07 10:14 ` Forwarded: [PATCH] fs/nsfs: skip dropping active refs on initial namespaces syzbot
@ 2025-11-07 11:16 ` syzbot
2025-11-07 11:41 ` Forwarded: [PATCH] nsfs: " syzbot
` (3 subsequent siblings)
5 siblings, 0 replies; 20+ messages in thread
From: syzbot @ 2025-11-07 11:16 UTC (permalink / raw)
To: linux-kernel, syzkaller-bugs
For archival purposes, forwarding an incoming command email to
linux-kernel@vger.kernel.org, syzkaller-bugs@googlegroups.com.
***
Subject: [PATCH] ns: skip active reference management on initial namespaces
Author: kartikey406@gmail.com
#syz test: git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
Initial namespaces (init_net, init_uts_ns, init_pid_ns, etc.) are
statically allocated and exist for the entire lifetime of the system.
They should not participate in active reference counting.
Currently, when operations like setns() or process creation involve
initial namespaces, active references are being taken and dropped on
them. This causes the active reference count to become imbalanced,
leading to warnings when the count goes negative or hits zero.
Fix by modifying the ns_ref_active_put macro to check if the namespace
is an initial namespace before dropping the active reference. This
ensures initial namespaces are completely excluded from active
reference management at all call sites.
Reported-by: syzbot+0b2e79f91ff6579bfa5b@syzkaller.appspotmail.com
Signed-off-by: Deepanshu Kartikey <kartikey406@gmail.com>
---
include/linux/ns_common.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/include/linux/ns_common.h b/include/linux/ns_common.h
index bd4492ef6ffc..6353120e60be 100644
--- a/include/linux/ns_common.h
+++ b/include/linux/ns_common.h
@@ -314,7 +314,7 @@ static __always_inline void __ns_ref_active_put(struct ns_common *ns)
}
}
#define ns_ref_active_put(__ns) \
- do { if (__ns) __ns_ref_active_put(to_ns_common(__ns)); } while (0)
+ do { if ((__ns) && !is_initial_namespace(&(__ns)->ns)) __ns_ref_active_put(to_ns_common(__ns)); } while (0)
static __always_inline struct ns_common *__must_check ns_get_unless_inactive(struct ns_common *ns)
{
--
2.43.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* Forwarded: [PATCH] nsfs: skip active reference management on initial namespaces
2025-11-06 1:36 [syzbot] [fs?] WARNING in nsproxy_ns_active_put syzbot
2025-11-07 10:14 ` Forwarded: [PATCH] fs/nsfs: skip dropping active refs on initial namespaces syzbot
2025-11-07 11:16 ` Forwarded: [PATCH] ns: skip active reference management " syzbot
@ 2025-11-07 11:41 ` syzbot
2025-11-07 11:43 ` syzbot
` (2 subsequent siblings)
5 siblings, 0 replies; 20+ messages in thread
From: syzbot @ 2025-11-07 11:41 UTC (permalink / raw)
To: linux-kernel, syzkaller-bugs
For archival purposes, forwarding an incoming command email to
linux-kernel@vger.kernel.org, syzkaller-bugs@googlegroups.com.
***
Subject: [PATCH] nsfs: skip active reference management on initial namespaces
Author: kartikey406@gmail.com
#syz test: git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
Initial namespaces (init_net, init_uts_ns, init_pid_ns, etc.) are
statically allocated and exist for the entire lifetime of the system.
They should not participate in active reference counting.
When operations involve initial namespaces, both ns_ref_active_get()
and ns_ref_active_put() were managing active references on them.
This caused the active reference count to become imbalanced, leading
to warnings in __ns_ref_active_get() and __ns_ref_active_put().
Fix by adding is_initial_namespace() checks in both the
ns_ref_active_get and ns_ref_active_put macros. Initial namespaces
are now completely excluded from active reference management,
treating them as permanent kernel resources.
Reported-by: syzbot+0b2e79f91ff6579bfa5b@syzkaller.appspotmail.com
Signed-off-by: Deepanshu Kartikey <kartikey406@gmail.com>
---
include/linux/ns_common.h | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/include/linux/ns_common.h b/include/linux/ns_common.h
index bd4492ef6ffc..b22c692b5f38 100644
--- a/include/linux/ns_common.h
+++ b/include/linux/ns_common.h
@@ -289,7 +289,10 @@ static __always_inline void __ns_ref_active_get(struct ns_common *ns)
VFS_WARN_ON_ONCE(is_initial_namespace(ns) && __ns_ref_active_read(ns) <= 0);
}
#define ns_ref_active_get(__ns) \
- do { if (__ns) __ns_ref_active_get(to_ns_common(__ns)); } while (0)
+ do { \
+ if ((__ns) && !is_initial_namespace(&(__ns)->ns)) \
+ __ns_ref_active_get(to_ns_common(__ns)); \
+ } while (0)
static __always_inline bool __ns_ref_active_get_not_zero(struct ns_common *ns)
{
@@ -314,7 +317,10 @@ static __always_inline void __ns_ref_active_put(struct ns_common *ns)
}
}
#define ns_ref_active_put(__ns) \
- do { if (__ns) __ns_ref_active_put(to_ns_common(__ns)); } while (0)
+ do { \
+ if ((__ns) && !is_initial_namespace(&(__ns)->ns)) \
+ __ns_ref_active_put(to_ns_common(__ns)); \
+ } while (0)
static __always_inline struct ns_common *__must_check ns_get_unless_inactive(struct ns_common *ns)
{
--
2.43.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* Forwarded: [PATCH] nsfs: skip active reference management on initial namespaces
2025-11-06 1:36 [syzbot] [fs?] WARNING in nsproxy_ns_active_put syzbot
` (2 preceding siblings ...)
2025-11-07 11:41 ` Forwarded: [PATCH] nsfs: " syzbot
@ 2025-11-07 11:43 ` syzbot
2025-11-07 11:43 ` syzbot
2025-11-09 8:24 ` [syzbot] [fs?] WARNING in nsproxy_ns_active_put syzbot
5 siblings, 0 replies; 20+ messages in thread
From: syzbot @ 2025-11-07 11:43 UTC (permalink / raw)
To: linux-kernel, syzkaller-bugs
For archival purposes, forwarding an incoming command email to
linux-kernel@vger.kernel.org, syzkaller-bugs@googlegroups.com.
***
Subject: [PATCH] nsfs: skip active reference management on initial namespaces
Author: kartikey406@gmail.com
#syz test: git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
Initial namespaces (init_net, init_uts_ns, init_pid_ns, etc.) are
statically allocated and exist for the entire lifetime of the system.
They should not participate in active reference counting.
When operations involve initial namespaces, both ns_ref_active_get()
and ns_ref_active_put() were managing active references on them.
This caused the active reference count to become imbalanced, leading
to warnings in __ns_ref_active_get() and __ns_ref_active_put().
Fix by adding is_initial_namespace() checks in both the
ns_ref_active_get and ns_ref_active_put macros. Initial namespaces
are now completely excluded from active reference management,
treating them as permanent kernel resources.
Reported-by: syzbot+0b2e79f91ff6579bfa5b@syzkaller.appspotmail.com
Signed-off-by: Deepanshu Kartikey <kartikey406@gmail.com>
---
include/linux/ns_common.h | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/include/linux/ns_common.h b/include/linux/ns_common.h
index bd4492ef6ffc..b22c692b5f38 100644
--- a/include/linux/ns_common.h
+++ b/include/linux/ns_common.h
@@ -289,7 +289,10 @@ static __always_inline void __ns_ref_active_get(struct ns_common *ns)
VFS_WARN_ON_ONCE(is_initial_namespace(ns) && __ns_ref_active_read(ns) <= 0);
}
#define ns_ref_active_get(__ns) \
- do { if (__ns) __ns_ref_active_get(to_ns_common(__ns)); } while (0)
+ do { \
+ if ((__ns) && !is_initial_namespace(&(__ns)->ns)) \
+ __ns_ref_active_get(to_ns_common(__ns)); \
+ } while (0)
static __always_inline bool __ns_ref_active_get_not_zero(struct ns_common *ns)
{
@@ -314,7 +317,10 @@ static __always_inline void __ns_ref_active_put(struct ns_common *ns)
}
}
#define ns_ref_active_put(__ns) \
- do { if (__ns) __ns_ref_active_put(to_ns_common(__ns)); } while (0)
+ do { \
+ if ((__ns) && !is_initial_namespace(&(__ns)->ns)) \
+ __ns_ref_active_put(to_ns_common(__ns)); \
+ } while (0)
static __always_inline struct ns_common *__must_check ns_get_unless_inactive(struct ns_common *ns)
{
--
2.43.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* Forwarded: [PATCH] nsfs: skip active reference management on initial namespaces
2025-11-06 1:36 [syzbot] [fs?] WARNING in nsproxy_ns_active_put syzbot
` (3 preceding siblings ...)
2025-11-07 11:43 ` syzbot
@ 2025-11-07 11:43 ` syzbot
2025-11-09 8:24 ` [syzbot] [fs?] WARNING in nsproxy_ns_active_put syzbot
5 siblings, 0 replies; 20+ messages in thread
From: syzbot @ 2025-11-07 11:43 UTC (permalink / raw)
To: linux-kernel, syzkaller-bugs
For archival purposes, forwarding an incoming command email to
linux-kernel@vger.kernel.org, syzkaller-bugs@googlegroups.com.
***
Subject: [PATCH] nsfs: skip active reference management on initial namespaces
Author: kartikey406@gmail.com
#syz test: git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
Initial namespaces (init_net, init_uts_ns, init_pid_ns, etc.) are
statically allocated and exist for the entire lifetime of the system.
They should not participate in active reference counting.
When operations involve initial namespaces, both ns_ref_active_get()
and ns_ref_active_put() were managing active references on them.
This caused the active reference count to become imbalanced, leading
to warnings in __ns_ref_active_get() and __ns_ref_active_put().
Fix by adding is_initial_namespace() checks in both the
ns_ref_active_get and ns_ref_active_put macros. Initial namespaces
are now completely excluded from active reference management,
treating them as permanent kernel resources.
Reported-by: syzbot+0b2e79f91ff6579bfa5b@syzkaller.appspotmail.com
Signed-off-by: Deepanshu Kartikey <kartikey406@gmail.com>
---
include/linux/ns_common.h | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/include/linux/ns_common.h b/include/linux/ns_common.h
index bd4492ef6ffc..b22c692b5f38 100644
--- a/include/linux/ns_common.h
+++ b/include/linux/ns_common.h
@@ -289,7 +289,10 @@ static __always_inline void __ns_ref_active_get(struct ns_common *ns)
VFS_WARN_ON_ONCE(is_initial_namespace(ns) && __ns_ref_active_read(ns) <= 0);
}
#define ns_ref_active_get(__ns) \
- do { if (__ns) __ns_ref_active_get(to_ns_common(__ns)); } while (0)
+ do { \
+ if ((__ns) && !is_initial_namespace(&(__ns)->ns)) \
+ __ns_ref_active_get(to_ns_common(__ns)); \
+ } while (0)
static __always_inline bool __ns_ref_active_get_not_zero(struct ns_common *ns)
{
@@ -314,7 +317,10 @@ static __always_inline void __ns_ref_active_put(struct ns_common *ns)
}
}
#define ns_ref_active_put(__ns) \
- do { if (__ns) __ns_ref_active_put(to_ns_common(__ns)); } while (0)
+ do { \
+ if ((__ns) && !is_initial_namespace(&(__ns)->ns)) \
+ __ns_ref_active_put(to_ns_common(__ns)); \
+ } while (0)
static __always_inline struct ns_common *__must_check ns_get_unless_inactive(struct ns_common *ns)
{
--
2.43.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* Forwarded: [PATCH] nsfs: skip active reference management on initial namespaces
2025-11-06 1:35 [syzbot] [fs?] WARNING in nsproxy_ns_active_get syzbot
@ 2025-11-07 11:44 ` syzbot
0 siblings, 0 replies; 20+ messages in thread
From: syzbot @ 2025-11-07 11:44 UTC (permalink / raw)
To: linux-kernel, syzkaller-bugs
For archival purposes, forwarding an incoming command email to
linux-kernel@vger.kernel.org, syzkaller-bugs@googlegroups.com.
***
Subject: [PATCH] nsfs: skip active reference management on initial namespaces
Author: kartikey406@gmail.com
#syz test: git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
Initial namespaces (init_net, init_uts_ns, init_pid_ns, etc.) are
statically allocated and exist for the entire lifetime of the system.
They should not participate in active reference counting.
When operations involve initial namespaces, both ns_ref_active_get()
and ns_ref_active_put() were managing active references on them.
This caused the active reference count to become imbalanced, leading
to warnings in __ns_ref_active_get() and __ns_ref_active_put().
Fix by adding is_initial_namespace() checks in both the
ns_ref_active_get and ns_ref_active_put macros. Initial namespaces
are now completely excluded from active reference management,
treating them as permanent kernel resources.
Reported-by: syzbot+0a8655a80e189278487e@syzkaller.appspotmail.com
Signed-off-by: Deepanshu Kartikey <kartikey406@gmail.com>
---
include/linux/ns_common.h | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/include/linux/ns_common.h b/include/linux/ns_common.h
index bd4492ef6ffc..b22c692b5f38 100644
--- a/include/linux/ns_common.h
+++ b/include/linux/ns_common.h
@@ -289,7 +289,10 @@ static __always_inline void __ns_ref_active_get(struct ns_common *ns)
VFS_WARN_ON_ONCE(is_initial_namespace(ns) && __ns_ref_active_read(ns) <= 0);
}
#define ns_ref_active_get(__ns) \
- do { if (__ns) __ns_ref_active_get(to_ns_common(__ns)); } while (0)
+ do { \
+ if ((__ns) && !is_initial_namespace(&(__ns)->ns)) \
+ __ns_ref_active_get(to_ns_common(__ns)); \
+ } while (0)
static __always_inline bool __ns_ref_active_get_not_zero(struct ns_common *ns)
{
@@ -314,7 +317,10 @@ static __always_inline void __ns_ref_active_put(struct ns_common *ns)
}
}
#define ns_ref_active_put(__ns) \
- do { if (__ns) __ns_ref_active_put(to_ns_common(__ns)); } while (0)
+ do { \
+ if ((__ns) && !is_initial_namespace(&(__ns)->ns)) \
+ __ns_ref_active_put(to_ns_common(__ns)); \
+ } while (0)
static __always_inline struct ns_common *__must_check ns_get_unless_inactive(struct ns_common *ns)
{
--
2.43.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* Re: [syzbot] [fs?] WARNING in nsproxy_ns_active_put
2025-11-06 1:36 [syzbot] [fs?] WARNING in nsproxy_ns_active_put syzbot
` (4 preceding siblings ...)
2025-11-07 11:43 ` syzbot
@ 2025-11-09 8:24 ` syzbot
2025-11-11 9:24 ` Christian Brauner
5 siblings, 1 reply; 20+ messages in thread
From: syzbot @ 2025-11-09 8:24 UTC (permalink / raw)
To: Liam.Howlett, Liam.Howlett, akpm, bpf, brauner, bsegall, david,
dietmar.eggemann, jack, jsavitz, juri.lelli, kartikey406, kees,
linux-fsdevel, linux-kernel, linux-mm, linux-security-module,
lorenzo.stoakes, mgorman, mhocko, mingo, mjguzik, oleg, paul,
peterz, rostedt, rppt, sergeh, surenb, syzkaller-bugs, vbabka,
vincent.guittot, viro, vschneid
syzbot has bisected this issue to:
commit 3a18f809184bc5a1cfad7cde5b8b026e2ff61587
Author: Christian Brauner <brauner@kernel.org>
Date: Wed Oct 29 12:20:24 2025 +0000
ns: add active reference count
bisection log: https://syzkaller.appspot.com/x/bisect.txt?x=11a350b4580000
start commit: 9c0826a5d9aa Add linux-next specific files for 20251107
git tree: linux-next
final oops: https://syzkaller.appspot.com/x/report.txt?x=13a350b4580000
console output: https://syzkaller.appspot.com/x/log.txt?x=15a350b4580000
kernel config: https://syzkaller.appspot.com/x/.config?x=f2ebeee52bf052b8
dashboard link: https://syzkaller.appspot.com/bug?extid=0b2e79f91ff6579bfa5b
syz repro: https://syzkaller.appspot.com/x/repro.syz?x=1639d084580000
C reproducer: https://syzkaller.appspot.com/x/repro.c?x=1625aa92580000
Reported-by: syzbot+0b2e79f91ff6579bfa5b@syzkaller.appspotmail.com
Fixes: 3a18f809184b ("ns: add active reference count")
For information about bisection process see: https://goo.gl/tpsmEJ#bisection
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [syzbot] [fs?] WARNING in nsproxy_ns_active_put
2025-11-09 8:24 ` [syzbot] [fs?] WARNING in nsproxy_ns_active_put syzbot
@ 2025-11-11 9:24 ` Christian Brauner
2025-11-11 9:46 ` syzbot
0 siblings, 1 reply; 20+ messages in thread
From: Christian Brauner @ 2025-11-11 9:24 UTC (permalink / raw)
To: syzbot
Cc: Liam.Howlett, akpm, bpf, bsegall, david, dietmar.eggemann, jack,
jsavitz, juri.lelli, kartikey406, kees, linux-fsdevel,
linux-kernel, linux-mm, linux-security-module, lorenzo.stoakes,
mgorman, mhocko, mingo, mjguzik, oleg, paul, peterz, rostedt,
rppt, sergeh, surenb, syzkaller-bugs, vbabka, vincent.guittot,
viro, vschneid
On Sun, Nov 09, 2025 at 12:24:02AM -0800, syzbot wrote:
> syzbot has bisected this issue to:
>
> commit 3a18f809184bc5a1cfad7cde5b8b026e2ff61587
> Author: Christian Brauner <brauner@kernel.org>
> Date: Wed Oct 29 12:20:24 2025 +0000
>
> ns: add active reference count
>
> bisection log: https://syzkaller.appspot.com/x/bisect.txt?x=11a350b4580000
> start commit: 9c0826a5d9aa Add linux-next specific files for 20251107
> git tree: linux-next
> final oops: https://syzkaller.appspot.com/x/report.txt?x=13a350b4580000
> console output: https://syzkaller.appspot.com/x/log.txt?x=15a350b4580000
> kernel config: https://syzkaller.appspot.com/x/.config?x=f2ebeee52bf052b8
> dashboard link: https://syzkaller.appspot.com/bug?extid=0b2e79f91ff6579bfa5b
> syz repro: https://syzkaller.appspot.com/x/repro.syz?x=1639d084580000
> C reproducer: https://syzkaller.appspot.com/x/repro.c?x=1625aa92580000
>
> Reported-by: syzbot+0b2e79f91ff6579bfa5b@syzkaller.appspotmail.com
> Fixes: 3a18f809184b ("ns: add active reference count")
>
> For information about bisection process see: https://goo.gl/tpsmEJ#bisection
#syz test: https://github.com/brauner/linux.git namespace-6.19
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [syzbot] [fs?] WARNING in nsproxy_ns_active_put
2025-11-11 9:24 ` Christian Brauner
@ 2025-11-11 9:46 ` syzbot
2025-11-11 10:26 ` Christian Brauner
0 siblings, 1 reply; 20+ messages in thread
From: syzbot @ 2025-11-11 9:46 UTC (permalink / raw)
To: akpm, bpf, brauner, bsegall, david, dietmar.eggemann, jack,
jsavitz, juri.lelli, kartikey406, kees, liam.howlett,
linux-fsdevel, linux-kernel, linux-mm, linux-security-module,
lorenzo.stoakes, mgorman, mhocko, mingo, mjguzik, oleg, paul,
peterz, rostedt, rppt, sergeh, surenb, syzkaller-bugs, vbabka,
vincent.guittot, viro, vschneid
Hello,
syzbot has tested the proposed patch but the reproducer is still triggering an issue:
WARNING in __ns_ref_active_put
------------[ cut here ]------------
WARNING: CPU: 0 PID: 6489 at kernel/nscommon.c:171 __ns_ref_active_put+0x3d7/0x450 kernel/nscommon.c:171
Modules linked in:
CPU: 0 UID: 0 PID: 6489 Comm: syz.0.18 Not tainted syzkaller #0 PREEMPT(full)
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/02/2025
RIP: 0010:__ns_ref_active_put+0x3d7/0x450 kernel/nscommon.c:171
Code: 4d 8b 3e e9 1b fd ff ff e8 b6 61 32 00 90 0f 0b 90 e9 29 fd ff ff e8 a8 61 32 00 90 0f 0b 90 e9 59 fd ff ff e8 9a 61 32 00 90 <0f> 0b 90 e9 72 ff ff ff e8 8c 61 32 00 90 0f 0b 90 e9 64 ff ff ff
RSP: 0018:ffffc90003457d50 EFLAGS: 00010293
RAX: ffffffff818e5b86 RBX: 00000000ffffffff RCX: ffff88802cc69e40
RDX: 0000000000000000 RSI: 00000000ffffffff RDI: 0000000000000000
RBP: ffffc90003457e00 R08: ffff8880320be42b R09: 1ffff11006417c85
R10: dffffc0000000000 R11: ffffed1006417c86 R12: dffffc0000000000
R13: 1ffff11006417c84 R14: ffff8880320be420 R15: ffff8880320be428
FS: 00007fe11c3746c0(0000) GS:ffff888125cf3000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 0000001b2d863fff CR3: 000000007798c000 CR4: 00000000003526f0
Call Trace:
<TASK>
nsproxy_ns_active_put+0x4a/0x200 fs/nsfs.c:701
free_nsproxy+0x21/0x140 kernel/nsproxy.c:190
put_nsset kernel/nsproxy.c:341 [inline]
__do_sys_setns kernel/nsproxy.c:594 [inline]
__se_sys_setns+0x1459/0x1c60 kernel/nsproxy.c:559
do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
do_syscall_64+0xfa/0xfa0 arch/x86/entry/syscall_64.c:94
entry_SYSCALL_64_after_hwframe+0x77/0x7f
RIP: 0033:0x7fe11b590ef7
Code: 73 01 c3 48 c7 c1 a8 ff ff ff f7 d8 64 89 01 48 83 c8 ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 b8 34 01 00 00 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 a8 ff ff ff f7 d8 64 89 01 48
RSP: 002b:00007fe11c373fd8 EFLAGS: 00000246 ORIG_RAX: 0000000000000134
RAX: ffffffffffffffda RBX: 0000000000000003 RCX: 00007fe11b590ef7
RDX: 0000000000000000 RSI: 0000000000000000 RDI: 00000000000000c9
RBP: 00007fe11b611f91 R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 00007fe11b7e6038 R14: 00007fe11b7e5fa0 R15: 00007ffcd9b83d18
</TASK>
Tested on:
commit: 18b5c400 Merge patch series "ns: header cleanups and i..
git tree: https://github.com/brauner/linux.git namespace-6.19
console output: https://syzkaller.appspot.com/x/log.txt?x=12c08658580000
kernel config: https://syzkaller.appspot.com/x/.config?x=59952e73920025e4
dashboard link: https://syzkaller.appspot.com/bug?extid=0b2e79f91ff6579bfa5b
compiler: Debian clang version 20.1.8 (++20250708063551+0c9f909b7976-1~exp1~20250708183702.136), Debian LLD 20.1.8
Note: no patches were applied.
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [syzbot] [fs?] WARNING in nsproxy_ns_active_put
2025-11-11 9:46 ` syzbot
@ 2025-11-11 10:26 ` Christian Brauner
2025-11-11 11:02 ` syzbot
0 siblings, 1 reply; 20+ messages in thread
From: Christian Brauner @ 2025-11-11 10:26 UTC (permalink / raw)
To: syzbot
Cc: akpm, bpf, bsegall, david, dietmar.eggemann, jack, jsavitz,
juri.lelli, kartikey406, kees, liam.howlett, linux-fsdevel,
linux-kernel, linux-mm, linux-security-module, lorenzo.stoakes,
mgorman, mhocko, mingo, mjguzik, oleg, paul, peterz, rostedt,
rppt, sergeh, surenb, syzkaller-bugs, vbabka, vincent.guittot,
viro, vschneid
On Tue, Nov 11, 2025 at 01:46:03AM -0800, syzbot wrote:
> Hello,
>
> syzbot has tested the proposed patch but the reproducer is still triggering an issue:
> WARNING in __ns_ref_active_put
#syz test: https://github.com/brauner/linux.git namespace-6.19.fixes
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [syzbot] [fs?] WARNING in nsproxy_ns_active_put
2025-11-11 10:26 ` Christian Brauner
@ 2025-11-11 11:02 ` syzbot
2025-11-11 11:23 ` Christian Brauner
0 siblings, 1 reply; 20+ messages in thread
From: syzbot @ 2025-11-11 11:02 UTC (permalink / raw)
To: akpm, bpf, brauner, bsegall, david, dietmar.eggemann, jack,
jsavitz, juri.lelli, kartikey406, kees, liam.howlett,
linux-fsdevel, linux-kernel, linux-mm, linux-security-module,
lorenzo.stoakes, mgorman, mhocko, mingo, mjguzik, oleg, paul,
peterz, rostedt, rppt, sergeh, surenb, syzkaller-bugs, vbabka,
vincent.guittot, viro, vschneid
Hello,
syzbot tried to test the proposed patch but the build/boot failed:
SYZFAIL: failed to recv rpc
SYZFAIL: failed to recv rpc
Warning: Permanently added '10.128.1.29' (ED25519) to the list of known hosts.
2025/11/11 11:01:12 parsed 1 programs
[ 92.366829][ T894] cfg80211: failed to load regulatory.db
[ 94.101317][ T5831] cgroup: Unknown subsys name 'net'
[ 94.208868][ T5831] cgroup: Unknown subsys name 'cpuset'
[ 94.218695][ T5831] cgroup: Unknown subsys name 'rlimit'
Setting up swapspace version 1, size = 127995904 bytes
[ 95.913996][ T5831] Adding 124996k swap on ./swap-file. Priority:0 extents:1 across:124996k
[ 99.210494][ T5845] soft_limit_in_bytes is deprecated and will be removed. Please report your usecase to linux-mm@kvack.org if you depend on this functionality.
[ 99.368014][ T52] Bluetooth: hci0: unexpected cc 0x0c03 length: 249 > 1
[ 99.376801][ T52] Bluetooth: hci0: unexpected cc 0x1003 length: 249 > 9
[ 99.385991][ T52] Bluetooth: hci0: unexpected cc 0x1001 length: 249 > 9
[ 99.394090][ T52] Bluetooth: hci0: unexpected cc 0x0c23 length: 249 > 4
[ 99.403295][ T52] Bluetooth: hci0: unexpected cc 0x0c38 length: 249 > 2
[ 99.760048][ T67] wlan0: Created IBSS using preconfigured BSSID 50:50:50:50:50:50
[ 99.769465][ T67] wlan0: Creating new IBSS network, BSSID 50:50:50:50:50:50
[ 99.812956][ T13] wlan1: Created IBSS using preconfigured BSSID 50:50:50:50:50:50
[ 99.820978][ T13] wlan1: Creating new IBSS network, BSSID 50:50:50:50:50:50
[ 101.094305][ T5880] chnl_net:caif_netlink_parms(): no params data found
[ 101.244059][ T5880] bridge0: port 1(bridge_slave_0) entered blocking state
[ 101.252746][ T5880] bridge0: port 1(bridge_slave_0) entered disabled state
[ 101.261818][ T5880] bridge_slave_0: entered allmulticast mode
[ 101.270392][ T5880] bridge_slave_0: entered promiscuous mode
[ 101.283473][ T5880] bridge0: port 2(bridge_slave_1) entered blocking state
[ 101.291198][ T5880] bridge0: port 2(bridge_slave_1) entered disabled state
[ 101.298667][ T5880] bridge_slave_1: entered allmulticast mode
[ 101.307108][ T5880] bridge_slave_1: entered promiscuous mode
[ 101.360560][ T5880] bond0: (slave bond_slave_0): Enslaving as an active interface with an up link
[ 101.373330][ T5880] bond0: (slave bond_slave_1): Enslaving as an active interface with an up link
[ 101.413565][ T5880] team0: Port device team_slave_0 added
[ 101.422832][ T5880] team0: Port device team_slave_1 added
[ 101.463069][ T5880] batman_adv: batadv0: Adding interface: batadv_slave_0
[ 101.470261][ T5880] batman_adv: batadv0: The MTU of interface batadv_slave_0 is too small (1500) to handle the transport of batman-adv packets. Packets going over this interface will be fragmented on layer2 which could impact the performance. Setting the MTU to 1532 would solve the problem.
[ 101.497282][ T5880] batman_adv: batadv0: Not using interface batadv_slave_0 (retrying later): interface not active
[ 101.511788][ T5880] batman_adv: batadv0: Adding interface: batadv_slave_1
[ 101.518889][ T5880] batman_adv: batadv0: The MTU of interface batadv_slave_1 is too small (1500) to handle the transport of batman-adv packets. Packets going over this interface will be fragmented on layer2 which could impact the performance. Setting the MTU to 1532 would solve the problem.
[ 101.545058][ T5880] batman_adv: batadv0: Not using interface batadv_slave_1 (retrying later): interface not active
[ 101.590841][ T5880] hsr_slave_0: entered promiscuous mode
[ 101.597434][ T5880] hsr_slave_1: entered promiscuous mode
[ 101.741572][ T5880] netdevsim netdevsim0 netdevsim0: renamed from eth0
[ 101.754163][ T5880] netdevsim netdevsim0 netdevsim1: renamed from eth1
[ 101.764799][ T5880] netdevsim netdevsim0 netdevsim2: renamed from eth2
[ 101.774770][ T5880] netdevsim netdevsim0 netdevsim3: renamed from eth3
[ 101.805511][ T5880] bridge0: port 2(bridge_slave_1) entered blocking state
[ 101.812788][ T5880] bridge0: port 2(bridge_slave_1) entered forwarding state
[ 101.820983][ T5880] bridge0: port 1(bridge_slave_0) entered blocking state
[ 101.828371][ T5880] bridge0: port 1(bridge_slave_0) entered forwarding state
[ 101.843110][ T13] bridge0: port 1(bridge_slave_0) entered disabled state
[ 101.851795][ T13] bridge0: port 2(bridge_slave_1) entered disabled state
[ 101.904027][ T5880] 8021q: adding VLAN 0 to HW filter on device bond0
[ 101.928006][ T5880] 8021q: adding VLAN 0 to HW filter on device team0
[ 101.942529][ T3448] bridge0: port 1(bridge_slave_0) entered blocking state
[ 101.950392][ T3448] bridge0: port 1(bridge_slave_0) entered forwarding state
[ 101.964563][ T13] bridge0: port 2(bridge_slave_1) entered blocking state
[ 101.971799][ T13] bridge0: port 2(bridge_slave_1) entered forwarding state
[ 102.152983][ T5880] 8021q: adding VLAN 0 to HW filter on device batadv0
[ 102.197805][ T5880] veth0_vlan: entered promiscuous mode
[ 102.210102][ T5880] veth1_vlan: entered promiscuous mode
[ 102.244663][ T5880] veth0_macvtap: entered promiscuous mode
[ 102.254634][ T5880] veth1_macvtap: entered promiscuous mode
[ 102.273656][ T5880] batman_adv: batadv0: Interface activated: batadv_slave_0
[ 102.289496][ T5880] batman_adv: batadv0: Interface activated: batadv_slave_1
[ 102.304731][ T67] netdevsim netdevsim0 netdevsim0: set [1, 0] type 2 family 0 port 6081 - 0
[ 102.314238][ T67] netdevsim netdevsim0 netdevsim1: set [1, 0] type 2 family 0 port 6081 - 0
[ 102.324278][ T67] netdevsim netdevsim0 netdevsim2: set [1, 0] type 2 family 0 port 6081 - 0
[ 102.334159][ T67] netdevsim netdevsim0 netdevsim3: set [1, 0] type 2 family 0 port 6081 - 0
[ 102.469673][ T67] netdevsim netdevsim0 netdevsim3 (unregistering): unset [1, 0] type 2 family 0 port 6081 - 0
[ 102.543054][ T67] netdevsim netdevsim0 netdevsim2 (unregistering): unset [1, 0] type 2 family 0 port 6081 - 0
[ 102.622429][ T67] netdevsim netdevsim0 netdevsim1 (unregistering): unset [1, 0] type 2 family 0 port 6081 - 0
[ 102.698368][ T67] netdevsim netdevsim0 netdevsim0 (unregistering): unset [1, 0] type 2 family 0 port 6081 - 0
2025/11/11 11:01:26 executed programs: 0
[ 104.788606][ T52] Bluetooth: hci0: unexpected cc 0x0c03 length: 249 > 1
[ 104.799432][ T52] Bluetooth: hci0: unexpected cc 0x1003 length: 249 > 9
[ 104.807512][ T52] Bluetooth: hci0: unexpected cc 0x1001 length: 249 > 9
[ 104.816410][ T52] Bluetooth: hci0: unexpected cc 0x0c23 length: 249 > 4
[ 104.824560][ T52] Bluetooth: hci0: unexpected cc 0x0c38 length: 249 > 2
[ 104.982601][ T5940] chnl_net:caif_netlink_parms(): no params data found
[ 105.059249][ T5940] bridge0: port 1(bridge_slave_0) entered blocking state
[ 105.066542][ T5940] bridge0: port 1(bridge_slave_0) entered disabled state
[ 105.073685][ T5940] bridge_slave_0: entered allmulticast mode
[ 105.081124][ T5940] bridge_slave_0: entered promiscuous mode
[ 105.089124][ T5940] bridge0: port 2(bridge_slave_1) entered blocking state
[ 105.096583][ T5940] bridge0: port 2(bridge_slave_1) entered disabled state
[ 105.104018][ T5940] bridge_slave_1: entered allmulticast mode
[ 105.111771][ T5940] bridge_slave_1: entered promiscuous mode
[ 105.143334][ T5940] bond0: (slave bond_slave_0): Enslaving as an active interface with an up link
[ 105.155734][ T5940] bond0: (slave bond_slave_1): Enslaving as an active interface with an up link
[ 105.191407][ T5940] team0: Port device team_slave_0 added
[ 105.201031][ T5940] team0: Port device team_slave_1 added
[ 105.235802][ T5940] batman_adv: batadv0: Adding interface: batadv_slave_0
[ 105.242802][ T5940] batman_adv: batadv0: The MTU of interface batadv_slave_0 is too small (1500) to handle the transport of batman-adv packets. Packets going over this interface will be fragmented on layer2 which could impact the performance. Setting the MTU to 1532 would solve the problem.
[ 105.269608][ T5940] batman_adv: batadv0: Not using interface batadv_slave_0 (retrying later): interface not active
[ 105.296300][ T5940] batman_adv: batadv0: Adding interface: batadv_slave_1
[ 105.303516][ T5940] batman_adv: batadv0: The MTU of interface batadv_slave_1 is too small (1500) to handle the transport of batman-adv packets. Packets going over this interface will be fragmented on layer2 which could impact the performance. Setting the MTU to 1532 would solve the problem.
[ 105.331738][ T5940] batman_adv: batadv0: Not using interface batadv_slave_1 (retrying later): interface not active
[ 105.417552][ T5940] hsr_slave_0: entered promiscuous mode
[ 105.424204][ T5940] hsr_slave_1: entered promiscuous mode
[ 105.430828][ T5940] debugfs: 'hsr0' already exists in 'hsr'
[ 105.437317][ T5940] Cannot create hsr debugfs directory
[ 105.454873][ T67] bridge_slave_1: left allmulticast mode
[ 105.460813][ T67] bridge_slave_1: left promiscuous mode
[ 105.467853][ T67] bridge0: port 2(bridge_slave_1) entered disabled state
[ 105.479304][ T67] bridge_slave_0: left allmulticast mode
[ 105.485065][ T67] bridge_slave_0: left promiscuous mode
[ 105.491001][ T67] bridge0: port 1(bridge_slave_0) entered disabled state
[ 105.729562][ T67] bond0 (unregistering): (slave bond_slave_0): Releasing backup interface
[ 105.741503][ T67] bond0 (unregistering): (slave bond_slave_1): Releasing backup interface
[ 105.752583][ T67] bond0 (unregistering): Released all slaves
[ 105.835828][ T67] hsr_slave_0: left promiscuous mode
[ 105.842862][ T67] hsr_slave_1: left promiscuous mode
[ 105.849433][ T67] batman_adv: batadv0: Interface deactivated: batadv_slave_0
[ 105.857469][ T67] batman_adv: batadv0: Removing interface: batadv_slave_0
[ 105.865850][ T67] batman_adv: batadv0: Interface deactivated: batadv_slave_1
[ 105.873344][ T67] batman_adv: batadv0: Removing interface: batadv_slave_1
[ 105.890846][ T67] veth1_macvtap: left promiscuous mode
[ 105.897610][ T67] veth0_macvtap: left promiscuous mode
[ 105.903553][ T67] veth1_vlan: left promiscuous mode
[ 105.910171][ T67] veth0_vlan: left promiscuous mode
[ 106.222498][ T67] team0 (unregistering): Port device team_slave_1 removed
[ 106.255035][ T67] team0 (unregistering): Port device team_slave_0 removed
[ 106.849861][ T52] Bluetooth: hci0: command tx timeout
[ 107.366951][ T5940] netdevsim netdevsim0 netdevsim0: renamed from eth0
[ 107.390747][ T5940] netdevsim netdevsim0 netdevsim1: renamed from eth1
[ 107.409101][ T5940] netdevsim netdevsim0 netdevsim2: renamed from eth2
[ 107.429220][ T5940] netdevsim netdevsim0 netdevsim3: renamed from eth3
[ 107.687917][ T5940] 8021q: adding VLAN 0 to HW filter on device bond0
[ 107.729157][ T5940] 8021q: adding VLAN 0 to HW filter on device team0
[ 107.757652][ T1309] bridge0: port 1(bridge_slave_0) entered blocking state
[ 107.764863][ T1309] bridge0: port 1(bridge_slave_0) entered forwarding state
[ 107.814393][ T1309] bridge0: port 2(bridge_slave_1) entered blocking state
[ 107.821819][ T1309] bridge0: port 2(bridge_slave_1) entered forwarding state
[ 108.188295][ T5940] 8021q: adding VLAN 0 to HW filter on device batadv0
[ 108.234481][ T5940] veth0_vlan: entered promiscuous mode
[ 108.246943][ T5940] veth1_vlan: entered promiscuous mode
[ 108.277479][ T5940] veth0_macvtap: entered promiscuous mode
[ 108.288108][ T5940] veth1_macvtap: entered promiscuous mode
[ 108.306578][ T5940] batman_adv: batadv0: Interface activated: batadv_slave_0
[ 108.321859][ T5940] batman_adv: batadv0: Interface activated: batadv_slave_1
[ 108.336901][ T1322] netdevsim netdevsim0 netdevsim0: set [1, 0] type 2 family 0 port 6081 - 0
[ 108.346834][ T1322] netdevsim netdevsim0 netdevsim1: set [1, 0] type 2 family 0 port 6081 - 0
[ 108.358941][ T1322] netdevsim netdevsim0 netdevsim2: set [1, 0] type 2 family 0 port 6081 - 0
[ 108.368475][ T1322] netdevsim netdevsim0 netdevsim3: set [1, 0] type 2 family 0 port 6081 - 0
[ 108.430497][ T1309] wlan0: Created IBSS using preconfigured BSSID 50:50:50:50:50:50
[ 108.438794][ T1309] wlan0: Creating new IBSS network, BSSID 50:50:50:50:50:50
[ 108.474331][ T67] wlan1: Created IBSS using preconfigured BSSID 50:50:50:50:50:50
[ 108.484170][ T67] wlan1: Creating new IBSS network, BSSID 50:50:50:50:50:50
SYZFAIL: failed to recv rpc
syzkaller build log:
go env (err=<nil>)
AR='ar'
CC='gcc'
CGO_CFLAGS='-O2 -g'
CGO_CPPFLAGS=''
CGO_CXXFLAGS='-O2 -g'
CGO_ENABLED='1'
CGO_FFLAGS='-O2 -g'
CGO_LDFLAGS='-O2 -g'
CXX='g++'
GCCGO='gccgo'
GO111MODULE='auto'
GOAMD64='v1'
GOARCH='amd64'
GOAUTH='netrc'
GOBIN=''
GOCACHE='/syzkaller/.cache/go-build'
GOCACHEPROG=''
GODEBUG=''
GOENV='/syzkaller/.config/go/env'
GOEXE=''
GOEXPERIMENT=''
GOFIPS140='off'
GOFLAGS=''
GOGCCFLAGS='-fPIC -m64 -pthread -Wl,--no-gc-sections -fmessage-length=0 -ffile-prefix-map=/tmp/go-build3388558029=/tmp/go-build -gno-record-gcc-switches'
GOHOSTARCH='amd64'
GOHOSTOS='linux'
GOINSECURE=''
GOMOD='/syzkaller/jobs/linux/gopath/src/github.com/google/syzkaller/go.mod'
GOMODCACHE='/syzkaller/jobs/linux/gopath/pkg/mod'
GONOPROXY=''
GONOSUMDB=''
GOOS='linux'
GOPATH='/syzkaller/jobs/linux/gopath'
GOPRIVATE=''
GOPROXY='https://proxy.golang.org,direct'
GOROOT='/usr/local/go'
GOSUMDB='sum.golang.org'
GOTELEMETRY='local'
GOTELEMETRYDIR='/syzkaller/.config/go/telemetry'
GOTMPDIR=''
GOTOOLCHAIN='auto'
GOTOOLDIR='/usr/local/go/pkg/tool/linux_amd64'
GOVCS=''
GOVERSION='go1.24.4'
GOWORK=''
PKG_CONFIG='pkg-config'
git status (err=<nil>)
HEAD detached at 4e1406b4def
nothing to commit, working tree clean
tput: No value for $TERM and no -T specified
tput: No value for $TERM and no -T specified
Makefile:31: run command via tools/syz-env for best compatibility, see:
Makefile:32: https://github.com/google/syzkaller/blob/master/docs/contributing.md#using-syz-env
go list -f '{{.Stale}}' -ldflags="-s -w -X github.com/google/syzkaller/prog.GitRevision=4e1406b4defac0e2a9d9424c70706f79a7750cf3 -X github.com/google/syzkaller/prog.gitRevisionDate=20251106-151142" ./sys/syz-sysgen | grep -q false || go install -ldflags="-s -w -X github.com/google/syzkaller/prog.GitRevision=4e1406b4defac0e2a9d9424c70706f79a7750cf3 -X github.com/google/syzkaller/prog.gitRevisionDate=20251106-151142" ./sys/syz-sysgen
make .descriptions
tput: No value for $TERM and no -T specified
tput: No value for $TERM and no -T specified
Makefile:31: run command via tools/syz-env for best compatibility, see:
Makefile:32: https://github.com/google/syzkaller/blob/master/docs/contributing.md#using-syz-env
bin/syz-sysgen
touch .descriptions
GOOS=linux GOARCH=amd64 go build -ldflags="-s -w -X github.com/google/syzkaller/prog.GitRevision=4e1406b4defac0e2a9d9424c70706f79a7750cf3 -X github.com/google/syzkaller/prog.gitRevisionDate=20251106-151142" -o ./bin/linux_amd64/syz-execprog github.com/google/syzkaller/tools/syz-execprog
mkdir -p ./bin/linux_amd64
g++ -o ./bin/linux_amd64/syz-executor executor/executor.cc \
-m64 -O2 -pthread -Wall -Werror -Wparentheses -Wunused-const-variable -Wframe-larger-than=16384 -Wno-stringop-overflow -Wno-array-bounds -Wno-format-overflow -Wno-unused-but-set-variable -Wno-unused-command-line-argument -static-pie -std=c++17 -I. -Iexecutor/_include -DGOOS_linux=1 -DGOARCH_amd64=1 \
-DHOSTGOOS_linux=1 -DGIT_REVISION=\"4e1406b4defac0e2a9d9424c70706f79a7750cf3\"
/usr/bin/ld: /tmp/ccimHo7N.o: in function `Connection::Connect(char const*, char const*)':
executor.cc:(.text._ZN10Connection7ConnectEPKcS1_[_ZN10Connection7ConnectEPKcS1_]+0x104): warning: Using 'gethostbyname' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
./tools/check-syzos.sh 2>/dev/null
Tested on:
commit: ae901e5e Merge patch series "ns: fixes for namespace i..
git tree: https://github.com/brauner/linux.git namespace-6.19.fixes
kernel config: https://syzkaller.appspot.com/x/.config?x=7b0bf36f88602817
dashboard link: https://syzkaller.appspot.com/bug?extid=0b2e79f91ff6579bfa5b
compiler: Debian clang version 20.1.8 (++20250708063551+0c9f909b7976-1~exp1~20250708183702.136), Debian LLD 20.1.8
Note: no patches were applied.
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [syzbot] [fs?] WARNING in nsproxy_ns_active_put
2025-11-11 11:02 ` syzbot
@ 2025-11-11 11:23 ` Christian Brauner
2025-11-11 11:38 ` Christian Brauner
0 siblings, 1 reply; 20+ messages in thread
From: Christian Brauner @ 2025-11-11 11:23 UTC (permalink / raw)
To: syzbot
Cc: akpm, bpf, bsegall, david, dietmar.eggemann, jack, jsavitz,
juri.lelli, kartikey406, kees, liam.howlett, linux-fsdevel,
linux-kernel, linux-mm, linux-security-module, lorenzo.stoakes,
mgorman, mhocko, mingo, mjguzik, oleg, paul, peterz, rostedt,
rppt, sergeh, surenb, syzkaller-bugs, vbabka, vincent.guittot,
viro, vschneid
On Tue, Nov 11, 2025 at 03:02:03AM -0800, syzbot wrote:
> Hello,
>
> syzbot tried to test the proposed patch but the build/boot failed:
I think that's unrelated. Anyway, I managed to point this to the wrong
branch. I'll send another test request in a bit.
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [syzbot] [fs?] WARNING in nsproxy_ns_active_put
2025-11-11 11:23 ` Christian Brauner
@ 2025-11-11 11:38 ` Christian Brauner
2025-11-11 13:03 ` syzbot
0 siblings, 1 reply; 20+ messages in thread
From: Christian Brauner @ 2025-11-11 11:38 UTC (permalink / raw)
To: syzbot
Cc: akpm, bpf, bsegall, david, dietmar.eggemann, jack, jsavitz,
juri.lelli, kartikey406, kees, liam.howlett, linux-fsdevel,
linux-kernel, linux-mm, linux-security-module, lorenzo.stoakes,
mgorman, mhocko, mingo, mjguzik, oleg, paul, peterz, rostedt,
rppt, sergeh, surenb, syzkaller-bugs, vbabka, vincent.guittot,
viro, vschneid
On Tue, Nov 11, 2025 at 12:23:18PM +0100, Christian Brauner wrote:
> On Tue, Nov 11, 2025 at 03:02:03AM -0800, syzbot wrote:
> > Hello,
> >
> > syzbot tried to test the proposed patch but the build/boot failed:
>
> I think that's unrelated. Anyway, I managed to point this to the wrong
> branch. I'll send another test request in a bit.
#syz test: https://github.com/brauner/linux.git namespace-6.19
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [syzbot] [fs?] WARNING in nsproxy_ns_active_put
2025-11-11 11:38 ` Christian Brauner
@ 2025-11-11 13:03 ` syzbot
2025-11-11 15:07 ` Christian Brauner
0 siblings, 1 reply; 20+ messages in thread
From: syzbot @ 2025-11-11 13:03 UTC (permalink / raw)
To: akpm, bpf, brauner, bsegall, david, dietmar.eggemann, jack,
jsavitz, juri.lelli, kartikey406, kees, liam.howlett,
linux-fsdevel, linux-kernel, linux-mm, linux-security-module,
lorenzo.stoakes, mgorman, mhocko, mingo, mjguzik, oleg, paul,
peterz, rostedt, rppt, sergeh, surenb, syzkaller-bugs, vbabka,
vincent.guittot, viro, vschneid
Hello,
syzbot has tested the proposed patch but the reproducer is still triggering an issue:
WARNING in __ns_ref_active_put
------------[ cut here ]------------
WARNING: CPU: 0 PID: 6581 at kernel/nscommon.c:171 __ns_ref_active_put+0x3d7/0x450 kernel/nscommon.c:171
Modules linked in:
CPU: 0 UID: 0 PID: 6581 Comm: syz.0.18 Not tainted syzkaller #0 PREEMPT(full)
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/02/2025
RIP: 0010:__ns_ref_active_put+0x3d7/0x450 kernel/nscommon.c:171
Code: 4d 8b 3e e9 1b fd ff ff e8 76 62 32 00 90 0f 0b 90 e9 29 fd ff ff e8 68 62 32 00 90 0f 0b 90 e9 59 fd ff ff e8 5a 62 32 00 90 <0f> 0b 90 e9 72 ff ff ff e8 4c 62 32 00 90 0f 0b 90 e9 64 ff ff ff
RSP: 0018:ffffc9000238fd68 EFLAGS: 00010293
RAX: ffffffff818e5946 RBX: 00000000ffffffff RCX: ffff8880302ebc80
RDX: 0000000000000000 RSI: 00000000ffffffff RDI: 0000000000000000
RBP: ffffc9000238fe00 R08: ffff888078968c2b R09: 1ffff1100f12d185
R10: dffffc0000000000 R11: ffffed100f12d186 R12: dffffc0000000000
R13: 1ffff1100f12d184 R14: ffff888078968c20 R15: ffff888078968c28
FS: 00007efc0fd536c0(0000) GS:ffff888125cf3000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 0000001b33263fff CR3: 0000000030876000 CR4: 00000000003526f0
Call Trace:
<TASK>
nsproxy_ns_active_put+0x4a/0x200 fs/nsfs.c:701
free_nsproxy kernel/nsproxy.c:80 [inline]
put_nsset kernel/nsproxy.c:316 [inline]
__do_sys_setns kernel/nsproxy.c:-1 [inline]
__se_sys_setns+0x1349/0x1b60 kernel/nsproxy.c:534
do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
do_syscall_64+0xfa/0xfa0 arch/x86/entry/syscall_64.c:94
entry_SYSCALL_64_after_hwframe+0x77/0x7f
RIP: 0033:0x7efc0ef90ef7
Code: 73 01 c3 48 c7 c1 a8 ff ff ff f7 d8 64 89 01 48 83 c8 ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 b8 34 01 00 00 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 a8 ff ff ff f7 d8 64 89 01 48
RSP: 002b:00007efc0fd52fd8 EFLAGS: 00000246 ORIG_RAX: 0000000000000134
RAX: ffffffffffffffda RBX: 0000000000000003 RCX: 00007efc0ef90ef7
RDX: 0000000000000000 RSI: 0000000000000000 RDI: 00000000000000c9
RBP: 00007efc0f011f91 R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 00007efc0f1e6038 R14: 00007efc0f1e5fa0 R15: 00007fff5692b648
</TASK>
Tested on:
commit: cc719c88 nsproxy: fix free_nsproxy() and simplify crea..
git tree: https://github.com/brauner/linux.git namespace-6.19
console output: https://syzkaller.appspot.com/x/log.txt?x=1613f17c580000
kernel config: https://syzkaller.appspot.com/x/.config?x=59952e73920025e4
dashboard link: https://syzkaller.appspot.com/bug?extid=0b2e79f91ff6579bfa5b
compiler: Debian clang version 20.1.8 (++20250708063551+0c9f909b7976-1~exp1~20250708183702.136), Debian LLD 20.1.8
Note: no patches were applied.
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [syzbot] [fs?] WARNING in nsproxy_ns_active_put
2025-11-11 13:03 ` syzbot
@ 2025-11-11 15:07 ` Christian Brauner
2025-11-11 16:14 ` syzbot
0 siblings, 1 reply; 20+ messages in thread
From: Christian Brauner @ 2025-11-11 15:07 UTC (permalink / raw)
To: syzbot
Cc: akpm, bpf, bsegall, david, dietmar.eggemann, jack, jsavitz,
juri.lelli, kartikey406, kees, liam.howlett, linux-fsdevel,
linux-kernel, linux-mm, linux-security-module, lorenzo.stoakes,
mgorman, mhocko, mingo, mjguzik, oleg, paul, peterz, rostedt,
rppt, sergeh, surenb, syzkaller-bugs, vbabka, vincent.guittot,
viro, vschneid
On Tue, Nov 11, 2025 at 05:03:03AM -0800, syzbot wrote:
> Hello,
>
> syzbot has tested the proposed patch but the reproducer is still triggering an issue:
> WARNING in __ns_ref_active_put
#syz test: https://github.com/brauner/linux.git namespace-6.19
Groan, forgot the actual important bit after the cleanup:
* Called from unshare. Unshare all the namespaces part of nsproxy.
* On success, returns the new nsproxy.
@@ -338,7 +313,7 @@ static void put_nsset(struct nsset *nsset)
if (nsset->fs && (flags & CLONE_NEWNS) && (flags & ~CLONE_NEWNS))
free_fs_struct(nsset->fs);
if (nsset->nsproxy)
- free_nsproxy(nsset->nsproxy);
+ nsproxy_free(nsset->nsproxy);
}
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [syzbot] [fs?] WARNING in nsproxy_ns_active_put
2025-11-11 15:07 ` Christian Brauner
@ 2025-11-11 16:14 ` syzbot
2025-11-11 21:29 ` [PATCH] nsproxy: fix free_nsproxy() and simplify create_new_namespaces() Christian Brauner
0 siblings, 1 reply; 20+ messages in thread
From: syzbot @ 2025-11-11 16:14 UTC (permalink / raw)
To: akpm, bpf, brauner, bsegall, david, dietmar.eggemann, jack,
jsavitz, juri.lelli, kartikey406, kees, liam.howlett,
linux-fsdevel, linux-kernel, linux-mm, linux-security-module,
lorenzo.stoakes, mgorman, mhocko, mingo, mjguzik, oleg, paul,
peterz, rostedt, rppt, sergeh, surenb, syzkaller-bugs, vbabka,
vincent.guittot, viro, vschneid
Hello,
syzbot has tested the proposed patch and the reproducer did not trigger any issue:
Reported-by: syzbot+0b2e79f91ff6579bfa5b@syzkaller.appspotmail.com
Tested-by: syzbot+0b2e79f91ff6579bfa5b@syzkaller.appspotmail.com
Tested on:
commit: d2bab7f2 nsproxy: fix free_nsproxy() and simplify crea..
git tree: https://github.com/brauner/linux.git namespace-6.19
console output: https://syzkaller.appspot.com/x/log.txt?x=123a8658580000
kernel config: https://syzkaller.appspot.com/x/.config?x=59952e73920025e4
dashboard link: https://syzkaller.appspot.com/bug?extid=0b2e79f91ff6579bfa5b
compiler: Debian clang version 20.1.8 (++20250708063551+0c9f909b7976-1~exp1~20250708183702.136), Debian LLD 20.1.8
Note: no patches were applied.
Note: testing is done by a robot and is best-effort only.
^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH] nsproxy: fix free_nsproxy() and simplify create_new_namespaces()
2025-11-11 16:14 ` syzbot
@ 2025-11-11 21:29 ` Christian Brauner
2025-11-13 11:19 ` Jan Kara
0 siblings, 1 reply; 20+ messages in thread
From: Christian Brauner @ 2025-11-11 21:29 UTC (permalink / raw)
To: syzbot
Cc: Christian Brauner, akpm, bpf, bsegall, david, dietmar.eggemann,
jack, jsavitz, juri.lelli, kartikey406, kees, liam.howlett,
linux-fsdevel, linux-kernel, linux-mm, linux-security-module,
lorenzo.stoakes, mgorman, mhocko, mingo, mjguzik, oleg, paul,
peterz, rostedt, rppt, sergeh, surenb, syzkaller-bugs, vbabka,
vincent.guittot, viro, vschneid, syzbot+0a8655a80e189278487e
Make it possible to handle NULL being passed to the reference count
helpers instead of forcing the caller to handle this. Afterwards we can
nicely allow a cleanup guard to handle nsproxy freeing.
Active reference count handling is not done in nsproxy_free() but rather
in free_nsproxy() as nsproxy_free() is also called from setns() failure
paths where a new nsproxy has been prepared but has not been marked as
active via switch_task_namespaces().
Fixes: 3c9820d5c64a ("ns: add active reference count")
Reported-by: syzbot+0b2e79f91ff6579bfa5b@syzkaller.appspotmail.com
Reported-by: syzbot+0a8655a80e189278487e@syzkaller.appspotmail.com
Link: https://lore.kernel.org/690bfb9e.050a0220.2e3c35.0013.GAE@google.com
Signed-off-by: Christian Brauner <brauner@kernel.org>
---
include/linux/ns_common.h | 11 ++--
kernel/nsproxy.c | 107 +++++++++++++++-----------------------
2 files changed, 48 insertions(+), 70 deletions(-)
diff --git a/include/linux/ns_common.h b/include/linux/ns_common.h
index 136f6a322e53..825f5865bfc5 100644
--- a/include/linux/ns_common.h
+++ b/include/linux/ns_common.h
@@ -114,11 +114,14 @@ static __always_inline __must_check bool __ns_ref_dec_and_lock(struct ns_common
}
#define ns_ref_read(__ns) __ns_ref_read(to_ns_common((__ns)))
-#define ns_ref_inc(__ns) __ns_ref_inc(to_ns_common((__ns)))
-#define ns_ref_get(__ns) __ns_ref_get(to_ns_common((__ns)))
-#define ns_ref_put(__ns) __ns_ref_put(to_ns_common((__ns)))
+#define ns_ref_inc(__ns) \
+ do { if (__ns) __ns_ref_inc(to_ns_common((__ns))); } while (0)
+#define ns_ref_get(__ns) \
+ ((__ns) ? __ns_ref_get(to_ns_common((__ns))) : false)
+#define ns_ref_put(__ns) \
+ ((__ns) ? __ns_ref_put(to_ns_common((__ns))) : false)
#define ns_ref_put_and_lock(__ns, __ns_lock) \
- __ns_ref_dec_and_lock(to_ns_common((__ns)), __ns_lock)
+ ((__ns) ? __ns_ref_dec_and_lock(to_ns_common((__ns)), __ns_lock) : false)
#define ns_ref_active_read(__ns) \
((__ns) ? __ns_ref_active_read(to_ns_common(__ns)) : 0)
diff --git a/kernel/nsproxy.c b/kernel/nsproxy.c
index 94c2cfe0afa1..2c94452dc793 100644
--- a/kernel/nsproxy.c
+++ b/kernel/nsproxy.c
@@ -60,6 +60,27 @@ static inline struct nsproxy *create_nsproxy(void)
return nsproxy;
}
+static inline void nsproxy_free(struct nsproxy *ns)
+{
+ put_mnt_ns(ns->mnt_ns);
+ put_uts_ns(ns->uts_ns);
+ put_ipc_ns(ns->ipc_ns);
+ put_pid_ns(ns->pid_ns_for_children);
+ put_time_ns(ns->time_ns);
+ put_time_ns(ns->time_ns_for_children);
+ put_cgroup_ns(ns->cgroup_ns);
+ put_net(ns->net_ns);
+ kmem_cache_free(nsproxy_cachep, ns);
+}
+
+DEFINE_FREE(nsproxy_free, struct nsproxy *, if (_T) nsproxy_free(_T))
+
+void free_nsproxy(struct nsproxy *ns)
+{
+ nsproxy_ns_active_put(ns);
+ nsproxy_free(ns);
+}
+
/*
* Create new nsproxy and all of its the associated namespaces.
* Return the newly created nsproxy. Do not attach this to the task,
@@ -69,76 +90,45 @@ static struct nsproxy *create_new_namespaces(u64 flags,
struct task_struct *tsk, struct user_namespace *user_ns,
struct fs_struct *new_fs)
{
- struct nsproxy *new_nsp;
- int err;
+ struct nsproxy *new_nsp __free(nsproxy_free) = NULL;
new_nsp = create_nsproxy();
if (!new_nsp)
return ERR_PTR(-ENOMEM);
new_nsp->mnt_ns = copy_mnt_ns(flags, tsk->nsproxy->mnt_ns, user_ns, new_fs);
- if (IS_ERR(new_nsp->mnt_ns)) {
- err = PTR_ERR(new_nsp->mnt_ns);
- goto out_ns;
- }
+ if (IS_ERR(new_nsp->mnt_ns))
+ return ERR_CAST(new_nsp->mnt_ns);
new_nsp->uts_ns = copy_utsname(flags, user_ns, tsk->nsproxy->uts_ns);
- if (IS_ERR(new_nsp->uts_ns)) {
- err = PTR_ERR(new_nsp->uts_ns);
- goto out_uts;
- }
+ if (IS_ERR(new_nsp->uts_ns))
+ return ERR_CAST(new_nsp->uts_ns);
new_nsp->ipc_ns = copy_ipcs(flags, user_ns, tsk->nsproxy->ipc_ns);
- if (IS_ERR(new_nsp->ipc_ns)) {
- err = PTR_ERR(new_nsp->ipc_ns);
- goto out_ipc;
- }
+ if (IS_ERR(new_nsp->ipc_ns))
+ return ERR_CAST(new_nsp->ipc_ns);
- new_nsp->pid_ns_for_children =
- copy_pid_ns(flags, user_ns, tsk->nsproxy->pid_ns_for_children);
- if (IS_ERR(new_nsp->pid_ns_for_children)) {
- err = PTR_ERR(new_nsp->pid_ns_for_children);
- goto out_pid;
- }
+ new_nsp->pid_ns_for_children = copy_pid_ns(flags, user_ns,
+ tsk->nsproxy->pid_ns_for_children);
+ if (IS_ERR(new_nsp->pid_ns_for_children))
+ return ERR_CAST(new_nsp->pid_ns_for_children);
new_nsp->cgroup_ns = copy_cgroup_ns(flags, user_ns,
tsk->nsproxy->cgroup_ns);
- if (IS_ERR(new_nsp->cgroup_ns)) {
- err = PTR_ERR(new_nsp->cgroup_ns);
- goto out_cgroup;
- }
+ if (IS_ERR(new_nsp->cgroup_ns))
+ return ERR_CAST(new_nsp->cgroup_ns);
new_nsp->net_ns = copy_net_ns(flags, user_ns, tsk->nsproxy->net_ns);
- if (IS_ERR(new_nsp->net_ns)) {
- err = PTR_ERR(new_nsp->net_ns);
- goto out_net;
- }
+ if (IS_ERR(new_nsp->net_ns))
+ return ERR_CAST(new_nsp->net_ns);
new_nsp->time_ns_for_children = copy_time_ns(flags, user_ns,
- tsk->nsproxy->time_ns_for_children);
- if (IS_ERR(new_nsp->time_ns_for_children)) {
- err = PTR_ERR(new_nsp->time_ns_for_children);
- goto out_time;
- }
+ tsk->nsproxy->time_ns_for_children);
+ if (IS_ERR(new_nsp->time_ns_for_children))
+ return ERR_CAST(new_nsp->time_ns_for_children);
new_nsp->time_ns = get_time_ns(tsk->nsproxy->time_ns);
- return new_nsp;
-
-out_time:
- put_net(new_nsp->net_ns);
-out_net:
- put_cgroup_ns(new_nsp->cgroup_ns);
-out_cgroup:
- put_pid_ns(new_nsp->pid_ns_for_children);
-out_pid:
- put_ipc_ns(new_nsp->ipc_ns);
-out_ipc:
- put_uts_ns(new_nsp->uts_ns);
-out_uts:
- put_mnt_ns(new_nsp->mnt_ns);
-out_ns:
- kmem_cache_free(nsproxy_cachep, new_nsp);
- return ERR_PTR(err);
+ return no_free_ptr(new_nsp);
}
/*
@@ -185,21 +175,6 @@ int copy_namespaces(u64 flags, struct task_struct *tsk)
return 0;
}
-void free_nsproxy(struct nsproxy *ns)
-{
- nsproxy_ns_active_put(ns);
-
- put_mnt_ns(ns->mnt_ns);
- put_uts_ns(ns->uts_ns);
- put_ipc_ns(ns->ipc_ns);
- put_pid_ns(ns->pid_ns_for_children);
- put_time_ns(ns->time_ns);
- put_time_ns(ns->time_ns_for_children);
- put_cgroup_ns(ns->cgroup_ns);
- put_net(ns->net_ns);
- kmem_cache_free(nsproxy_cachep, ns);
-}
-
/*
* Called from unshare. Unshare all the namespaces part of nsproxy.
* On success, returns the new nsproxy.
@@ -338,7 +313,7 @@ static void put_nsset(struct nsset *nsset)
if (nsset->fs && (flags & CLONE_NEWNS) && (flags & ~CLONE_NEWNS))
free_fs_struct(nsset->fs);
if (nsset->nsproxy)
- free_nsproxy(nsset->nsproxy);
+ nsproxy_free(nsset->nsproxy);
}
static int prepare_nsset(unsigned flags, struct nsset *nsset)
--
2.47.3
^ permalink raw reply related [flat|nested] 20+ messages in thread
* Re: [PATCH] nsproxy: fix free_nsproxy() and simplify create_new_namespaces()
2025-11-11 21:29 ` [PATCH] nsproxy: fix free_nsproxy() and simplify create_new_namespaces() Christian Brauner
@ 2025-11-13 11:19 ` Jan Kara
2025-11-13 13:05 ` Christian Brauner
0 siblings, 1 reply; 20+ messages in thread
From: Jan Kara @ 2025-11-13 11:19 UTC (permalink / raw)
To: Christian Brauner
Cc: syzbot, akpm, bpf, bsegall, david, dietmar.eggemann, jack,
jsavitz, juri.lelli, kartikey406, kees, liam.howlett,
linux-fsdevel, linux-kernel, linux-mm, linux-security-module,
lorenzo.stoakes, mgorman, mhocko, mingo, mjguzik, oleg, paul,
peterz, rostedt, rppt, sergeh, surenb, syzkaller-bugs, vbabka,
vincent.guittot, viro, vschneid, syzbot+0a8655a80e189278487e
On Tue 11-11-25 22:29:44, Christian Brauner wrote:
> Make it possible to handle NULL being passed to the reference count
> helpers instead of forcing the caller to handle this. Afterwards we can
> nicely allow a cleanup guard to handle nsproxy freeing.
>
> Active reference count handling is not done in nsproxy_free() but rather
> in free_nsproxy() as nsproxy_free() is also called from setns() failure
> paths where a new nsproxy has been prepared but has not been marked as
> active via switch_task_namespaces().
>
> Fixes: 3c9820d5c64a ("ns: add active reference count")
> Reported-by: syzbot+0b2e79f91ff6579bfa5b@syzkaller.appspotmail.com
> Reported-by: syzbot+0a8655a80e189278487e@syzkaller.appspotmail.com
> Link: https://lore.kernel.org/690bfb9e.050a0220.2e3c35.0013.GAE@google.com
> Signed-off-by: Christian Brauner <brauner@kernel.org>
I believe having free_nsproxy() and nsproxy_free() functions with
the same signature and slightly different semantics is making things too
easy to get wrong. Maybe call free_nsproxy() say deactivate_nsproxy()?
Otherwise the patch looks correct to me. Feel free to add:
Reviewed-by: Jan Kara <jack@suse.cz>
Honza
> ---
> include/linux/ns_common.h | 11 ++--
> kernel/nsproxy.c | 107 +++++++++++++++-----------------------
> 2 files changed, 48 insertions(+), 70 deletions(-)
>
> diff --git a/include/linux/ns_common.h b/include/linux/ns_common.h
> index 136f6a322e53..825f5865bfc5 100644
> --- a/include/linux/ns_common.h
> +++ b/include/linux/ns_common.h
> @@ -114,11 +114,14 @@ static __always_inline __must_check bool __ns_ref_dec_and_lock(struct ns_common
> }
>
> #define ns_ref_read(__ns) __ns_ref_read(to_ns_common((__ns)))
> -#define ns_ref_inc(__ns) __ns_ref_inc(to_ns_common((__ns)))
> -#define ns_ref_get(__ns) __ns_ref_get(to_ns_common((__ns)))
> -#define ns_ref_put(__ns) __ns_ref_put(to_ns_common((__ns)))
> +#define ns_ref_inc(__ns) \
> + do { if (__ns) __ns_ref_inc(to_ns_common((__ns))); } while (0)
> +#define ns_ref_get(__ns) \
> + ((__ns) ? __ns_ref_get(to_ns_common((__ns))) : false)
> +#define ns_ref_put(__ns) \
> + ((__ns) ? __ns_ref_put(to_ns_common((__ns))) : false)
> #define ns_ref_put_and_lock(__ns, __ns_lock) \
> - __ns_ref_dec_and_lock(to_ns_common((__ns)), __ns_lock)
> + ((__ns) ? __ns_ref_dec_and_lock(to_ns_common((__ns)), __ns_lock) : false)
>
> #define ns_ref_active_read(__ns) \
> ((__ns) ? __ns_ref_active_read(to_ns_common(__ns)) : 0)
> diff --git a/kernel/nsproxy.c b/kernel/nsproxy.c
> index 94c2cfe0afa1..2c94452dc793 100644
> --- a/kernel/nsproxy.c
> +++ b/kernel/nsproxy.c
> @@ -60,6 +60,27 @@ static inline struct nsproxy *create_nsproxy(void)
> return nsproxy;
> }
>
> +static inline void nsproxy_free(struct nsproxy *ns)
> +{
> + put_mnt_ns(ns->mnt_ns);
> + put_uts_ns(ns->uts_ns);
> + put_ipc_ns(ns->ipc_ns);
> + put_pid_ns(ns->pid_ns_for_children);
> + put_time_ns(ns->time_ns);
> + put_time_ns(ns->time_ns_for_children);
> + put_cgroup_ns(ns->cgroup_ns);
> + put_net(ns->net_ns);
> + kmem_cache_free(nsproxy_cachep, ns);
> +}
> +
> +DEFINE_FREE(nsproxy_free, struct nsproxy *, if (_T) nsproxy_free(_T))
> +
> +void free_nsproxy(struct nsproxy *ns)
> +{
> + nsproxy_ns_active_put(ns);
> + nsproxy_free(ns);
> +}
> +
> /*
> * Create new nsproxy and all of its the associated namespaces.
> * Return the newly created nsproxy. Do not attach this to the task,
> @@ -69,76 +90,45 @@ static struct nsproxy *create_new_namespaces(u64 flags,
> struct task_struct *tsk, struct user_namespace *user_ns,
> struct fs_struct *new_fs)
> {
> - struct nsproxy *new_nsp;
> - int err;
> + struct nsproxy *new_nsp __free(nsproxy_free) = NULL;
>
> new_nsp = create_nsproxy();
> if (!new_nsp)
> return ERR_PTR(-ENOMEM);
>
> new_nsp->mnt_ns = copy_mnt_ns(flags, tsk->nsproxy->mnt_ns, user_ns, new_fs);
> - if (IS_ERR(new_nsp->mnt_ns)) {
> - err = PTR_ERR(new_nsp->mnt_ns);
> - goto out_ns;
> - }
> + if (IS_ERR(new_nsp->mnt_ns))
> + return ERR_CAST(new_nsp->mnt_ns);
>
> new_nsp->uts_ns = copy_utsname(flags, user_ns, tsk->nsproxy->uts_ns);
> - if (IS_ERR(new_nsp->uts_ns)) {
> - err = PTR_ERR(new_nsp->uts_ns);
> - goto out_uts;
> - }
> + if (IS_ERR(new_nsp->uts_ns))
> + return ERR_CAST(new_nsp->uts_ns);
>
> new_nsp->ipc_ns = copy_ipcs(flags, user_ns, tsk->nsproxy->ipc_ns);
> - if (IS_ERR(new_nsp->ipc_ns)) {
> - err = PTR_ERR(new_nsp->ipc_ns);
> - goto out_ipc;
> - }
> + if (IS_ERR(new_nsp->ipc_ns))
> + return ERR_CAST(new_nsp->ipc_ns);
>
> - new_nsp->pid_ns_for_children =
> - copy_pid_ns(flags, user_ns, tsk->nsproxy->pid_ns_for_children);
> - if (IS_ERR(new_nsp->pid_ns_for_children)) {
> - err = PTR_ERR(new_nsp->pid_ns_for_children);
> - goto out_pid;
> - }
> + new_nsp->pid_ns_for_children = copy_pid_ns(flags, user_ns,
> + tsk->nsproxy->pid_ns_for_children);
> + if (IS_ERR(new_nsp->pid_ns_for_children))
> + return ERR_CAST(new_nsp->pid_ns_for_children);
>
> new_nsp->cgroup_ns = copy_cgroup_ns(flags, user_ns,
> tsk->nsproxy->cgroup_ns);
> - if (IS_ERR(new_nsp->cgroup_ns)) {
> - err = PTR_ERR(new_nsp->cgroup_ns);
> - goto out_cgroup;
> - }
> + if (IS_ERR(new_nsp->cgroup_ns))
> + return ERR_CAST(new_nsp->cgroup_ns);
>
> new_nsp->net_ns = copy_net_ns(flags, user_ns, tsk->nsproxy->net_ns);
> - if (IS_ERR(new_nsp->net_ns)) {
> - err = PTR_ERR(new_nsp->net_ns);
> - goto out_net;
> - }
> + if (IS_ERR(new_nsp->net_ns))
> + return ERR_CAST(new_nsp->net_ns);
>
> new_nsp->time_ns_for_children = copy_time_ns(flags, user_ns,
> - tsk->nsproxy->time_ns_for_children);
> - if (IS_ERR(new_nsp->time_ns_for_children)) {
> - err = PTR_ERR(new_nsp->time_ns_for_children);
> - goto out_time;
> - }
> + tsk->nsproxy->time_ns_for_children);
> + if (IS_ERR(new_nsp->time_ns_for_children))
> + return ERR_CAST(new_nsp->time_ns_for_children);
> new_nsp->time_ns = get_time_ns(tsk->nsproxy->time_ns);
>
> - return new_nsp;
> -
> -out_time:
> - put_net(new_nsp->net_ns);
> -out_net:
> - put_cgroup_ns(new_nsp->cgroup_ns);
> -out_cgroup:
> - put_pid_ns(new_nsp->pid_ns_for_children);
> -out_pid:
> - put_ipc_ns(new_nsp->ipc_ns);
> -out_ipc:
> - put_uts_ns(new_nsp->uts_ns);
> -out_uts:
> - put_mnt_ns(new_nsp->mnt_ns);
> -out_ns:
> - kmem_cache_free(nsproxy_cachep, new_nsp);
> - return ERR_PTR(err);
> + return no_free_ptr(new_nsp);
> }
>
> /*
> @@ -185,21 +175,6 @@ int copy_namespaces(u64 flags, struct task_struct *tsk)
> return 0;
> }
>
> -void free_nsproxy(struct nsproxy *ns)
> -{
> - nsproxy_ns_active_put(ns);
> -
> - put_mnt_ns(ns->mnt_ns);
> - put_uts_ns(ns->uts_ns);
> - put_ipc_ns(ns->ipc_ns);
> - put_pid_ns(ns->pid_ns_for_children);
> - put_time_ns(ns->time_ns);
> - put_time_ns(ns->time_ns_for_children);
> - put_cgroup_ns(ns->cgroup_ns);
> - put_net(ns->net_ns);
> - kmem_cache_free(nsproxy_cachep, ns);
> -}
> -
> /*
> * Called from unshare. Unshare all the namespaces part of nsproxy.
> * On success, returns the new nsproxy.
> @@ -338,7 +313,7 @@ static void put_nsset(struct nsset *nsset)
> if (nsset->fs && (flags & CLONE_NEWNS) && (flags & ~CLONE_NEWNS))
> free_fs_struct(nsset->fs);
> if (nsset->nsproxy)
> - free_nsproxy(nsset->nsproxy);
> + nsproxy_free(nsset->nsproxy);
> }
>
> static int prepare_nsset(unsigned flags, struct nsset *nsset)
> --
> 2.47.3
>
--
Jan Kara <jack@suse.com>
SUSE Labs, CR
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH] nsproxy: fix free_nsproxy() and simplify create_new_namespaces()
2025-11-13 11:19 ` Jan Kara
@ 2025-11-13 13:05 ` Christian Brauner
0 siblings, 0 replies; 20+ messages in thread
From: Christian Brauner @ 2025-11-13 13:05 UTC (permalink / raw)
To: Jan Kara
Cc: syzbot, akpm, bpf, bsegall, david, dietmar.eggemann, jsavitz,
juri.lelli, kartikey406, kees, liam.howlett, linux-fsdevel,
linux-kernel, linux-mm, linux-security-module, lorenzo.stoakes,
mgorman, mhocko, mingo, mjguzik, oleg, paul, peterz, rostedt,
rppt, sergeh, surenb, syzkaller-bugs, vbabka, vincent.guittot,
viro, vschneid, syzbot+0a8655a80e189278487e
On Thu, Nov 13, 2025 at 12:19:40PM +0100, Jan Kara wrote:
> On Tue 11-11-25 22:29:44, Christian Brauner wrote:
> > Make it possible to handle NULL being passed to the reference count
> > helpers instead of forcing the caller to handle this. Afterwards we can
> > nicely allow a cleanup guard to handle nsproxy freeing.
> >
> > Active reference count handling is not done in nsproxy_free() but rather
> > in free_nsproxy() as nsproxy_free() is also called from setns() failure
> > paths where a new nsproxy has been prepared but has not been marked as
> > active via switch_task_namespaces().
> >
> > Fixes: 3c9820d5c64a ("ns: add active reference count")
> > Reported-by: syzbot+0b2e79f91ff6579bfa5b@syzkaller.appspotmail.com
> > Reported-by: syzbot+0a8655a80e189278487e@syzkaller.appspotmail.com
> > Link: https://lore.kernel.org/690bfb9e.050a0220.2e3c35.0013.GAE@google.com
> > Signed-off-by: Christian Brauner <brauner@kernel.org>
>
> I believe having free_nsproxy() and nsproxy_free() functions with
> the same signature and slightly different semantics is making things too
> easy to get wrong. Maybe call free_nsproxy() say deactivate_nsproxy()?
Good idea, I'll rename to that!
>
> Otherwise the patch looks correct to me. Feel free to add:
>
> Reviewed-by: Jan Kara <jack@suse.cz>
>
> Honza
>
> > ---
> > include/linux/ns_common.h | 11 ++--
> > kernel/nsproxy.c | 107 +++++++++++++++-----------------------
> > 2 files changed, 48 insertions(+), 70 deletions(-)
> >
> > diff --git a/include/linux/ns_common.h b/include/linux/ns_common.h
> > index 136f6a322e53..825f5865bfc5 100644
> > --- a/include/linux/ns_common.h
> > +++ b/include/linux/ns_common.h
> > @@ -114,11 +114,14 @@ static __always_inline __must_check bool __ns_ref_dec_and_lock(struct ns_common
> > }
> >
> > #define ns_ref_read(__ns) __ns_ref_read(to_ns_common((__ns)))
> > -#define ns_ref_inc(__ns) __ns_ref_inc(to_ns_common((__ns)))
> > -#define ns_ref_get(__ns) __ns_ref_get(to_ns_common((__ns)))
> > -#define ns_ref_put(__ns) __ns_ref_put(to_ns_common((__ns)))
> > +#define ns_ref_inc(__ns) \
> > + do { if (__ns) __ns_ref_inc(to_ns_common((__ns))); } while (0)
> > +#define ns_ref_get(__ns) \
> > + ((__ns) ? __ns_ref_get(to_ns_common((__ns))) : false)
> > +#define ns_ref_put(__ns) \
> > + ((__ns) ? __ns_ref_put(to_ns_common((__ns))) : false)
> > #define ns_ref_put_and_lock(__ns, __ns_lock) \
> > - __ns_ref_dec_and_lock(to_ns_common((__ns)), __ns_lock)
> > + ((__ns) ? __ns_ref_dec_and_lock(to_ns_common((__ns)), __ns_lock) : false)
> >
> > #define ns_ref_active_read(__ns) \
> > ((__ns) ? __ns_ref_active_read(to_ns_common(__ns)) : 0)
> > diff --git a/kernel/nsproxy.c b/kernel/nsproxy.c
> > index 94c2cfe0afa1..2c94452dc793 100644
> > --- a/kernel/nsproxy.c
> > +++ b/kernel/nsproxy.c
> > @@ -60,6 +60,27 @@ static inline struct nsproxy *create_nsproxy(void)
> > return nsproxy;
> > }
> >
> > +static inline void nsproxy_free(struct nsproxy *ns)
> > +{
> > + put_mnt_ns(ns->mnt_ns);
> > + put_uts_ns(ns->uts_ns);
> > + put_ipc_ns(ns->ipc_ns);
> > + put_pid_ns(ns->pid_ns_for_children);
> > + put_time_ns(ns->time_ns);
> > + put_time_ns(ns->time_ns_for_children);
> > + put_cgroup_ns(ns->cgroup_ns);
> > + put_net(ns->net_ns);
> > + kmem_cache_free(nsproxy_cachep, ns);
> > +}
> > +
> > +DEFINE_FREE(nsproxy_free, struct nsproxy *, if (_T) nsproxy_free(_T))
> > +
> > +void free_nsproxy(struct nsproxy *ns)
> > +{
> > + nsproxy_ns_active_put(ns);
> > + nsproxy_free(ns);
> > +}
> > +
> > /*
> > * Create new nsproxy and all of its the associated namespaces.
> > * Return the newly created nsproxy. Do not attach this to the task,
> > @@ -69,76 +90,45 @@ static struct nsproxy *create_new_namespaces(u64 flags,
> > struct task_struct *tsk, struct user_namespace *user_ns,
> > struct fs_struct *new_fs)
> > {
> > - struct nsproxy *new_nsp;
> > - int err;
> > + struct nsproxy *new_nsp __free(nsproxy_free) = NULL;
> >
> > new_nsp = create_nsproxy();
> > if (!new_nsp)
> > return ERR_PTR(-ENOMEM);
> >
> > new_nsp->mnt_ns = copy_mnt_ns(flags, tsk->nsproxy->mnt_ns, user_ns, new_fs);
> > - if (IS_ERR(new_nsp->mnt_ns)) {
> > - err = PTR_ERR(new_nsp->mnt_ns);
> > - goto out_ns;
> > - }
> > + if (IS_ERR(new_nsp->mnt_ns))
> > + return ERR_CAST(new_nsp->mnt_ns);
> >
> > new_nsp->uts_ns = copy_utsname(flags, user_ns, tsk->nsproxy->uts_ns);
> > - if (IS_ERR(new_nsp->uts_ns)) {
> > - err = PTR_ERR(new_nsp->uts_ns);
> > - goto out_uts;
> > - }
> > + if (IS_ERR(new_nsp->uts_ns))
> > + return ERR_CAST(new_nsp->uts_ns);
> >
> > new_nsp->ipc_ns = copy_ipcs(flags, user_ns, tsk->nsproxy->ipc_ns);
> > - if (IS_ERR(new_nsp->ipc_ns)) {
> > - err = PTR_ERR(new_nsp->ipc_ns);
> > - goto out_ipc;
> > - }
> > + if (IS_ERR(new_nsp->ipc_ns))
> > + return ERR_CAST(new_nsp->ipc_ns);
> >
> > - new_nsp->pid_ns_for_children =
> > - copy_pid_ns(flags, user_ns, tsk->nsproxy->pid_ns_for_children);
> > - if (IS_ERR(new_nsp->pid_ns_for_children)) {
> > - err = PTR_ERR(new_nsp->pid_ns_for_children);
> > - goto out_pid;
> > - }
> > + new_nsp->pid_ns_for_children = copy_pid_ns(flags, user_ns,
> > + tsk->nsproxy->pid_ns_for_children);
> > + if (IS_ERR(new_nsp->pid_ns_for_children))
> > + return ERR_CAST(new_nsp->pid_ns_for_children);
> >
> > new_nsp->cgroup_ns = copy_cgroup_ns(flags, user_ns,
> > tsk->nsproxy->cgroup_ns);
> > - if (IS_ERR(new_nsp->cgroup_ns)) {
> > - err = PTR_ERR(new_nsp->cgroup_ns);
> > - goto out_cgroup;
> > - }
> > + if (IS_ERR(new_nsp->cgroup_ns))
> > + return ERR_CAST(new_nsp->cgroup_ns);
> >
> > new_nsp->net_ns = copy_net_ns(flags, user_ns, tsk->nsproxy->net_ns);
> > - if (IS_ERR(new_nsp->net_ns)) {
> > - err = PTR_ERR(new_nsp->net_ns);
> > - goto out_net;
> > - }
> > + if (IS_ERR(new_nsp->net_ns))
> > + return ERR_CAST(new_nsp->net_ns);
> >
> > new_nsp->time_ns_for_children = copy_time_ns(flags, user_ns,
> > - tsk->nsproxy->time_ns_for_children);
> > - if (IS_ERR(new_nsp->time_ns_for_children)) {
> > - err = PTR_ERR(new_nsp->time_ns_for_children);
> > - goto out_time;
> > - }
> > + tsk->nsproxy->time_ns_for_children);
> > + if (IS_ERR(new_nsp->time_ns_for_children))
> > + return ERR_CAST(new_nsp->time_ns_for_children);
> > new_nsp->time_ns = get_time_ns(tsk->nsproxy->time_ns);
> >
> > - return new_nsp;
> > -
> > -out_time:
> > - put_net(new_nsp->net_ns);
> > -out_net:
> > - put_cgroup_ns(new_nsp->cgroup_ns);
> > -out_cgroup:
> > - put_pid_ns(new_nsp->pid_ns_for_children);
> > -out_pid:
> > - put_ipc_ns(new_nsp->ipc_ns);
> > -out_ipc:
> > - put_uts_ns(new_nsp->uts_ns);
> > -out_uts:
> > - put_mnt_ns(new_nsp->mnt_ns);
> > -out_ns:
> > - kmem_cache_free(nsproxy_cachep, new_nsp);
> > - return ERR_PTR(err);
> > + return no_free_ptr(new_nsp);
> > }
> >
> > /*
> > @@ -185,21 +175,6 @@ int copy_namespaces(u64 flags, struct task_struct *tsk)
> > return 0;
> > }
> >
> > -void free_nsproxy(struct nsproxy *ns)
> > -{
> > - nsproxy_ns_active_put(ns);
> > -
> > - put_mnt_ns(ns->mnt_ns);
> > - put_uts_ns(ns->uts_ns);
> > - put_ipc_ns(ns->ipc_ns);
> > - put_pid_ns(ns->pid_ns_for_children);
> > - put_time_ns(ns->time_ns);
> > - put_time_ns(ns->time_ns_for_children);
> > - put_cgroup_ns(ns->cgroup_ns);
> > - put_net(ns->net_ns);
> > - kmem_cache_free(nsproxy_cachep, ns);
> > -}
> > -
> > /*
> > * Called from unshare. Unshare all the namespaces part of nsproxy.
> > * On success, returns the new nsproxy.
> > @@ -338,7 +313,7 @@ static void put_nsset(struct nsset *nsset)
> > if (nsset->fs && (flags & CLONE_NEWNS) && (flags & ~CLONE_NEWNS))
> > free_fs_struct(nsset->fs);
> > if (nsset->nsproxy)
> > - free_nsproxy(nsset->nsproxy);
> > + nsproxy_free(nsset->nsproxy);
> > }
> >
> > static int prepare_nsset(unsigned flags, struct nsset *nsset)
> > --
> > 2.47.3
> >
> --
> Jan Kara <jack@suse.com>
> SUSE Labs, CR
^ permalink raw reply [flat|nested] 20+ messages in thread
end of thread, other threads:[~2025-11-13 13:05 UTC | newest]
Thread overview: 20+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-11-06 1:36 [syzbot] [fs?] WARNING in nsproxy_ns_active_put syzbot
2025-11-07 10:14 ` Forwarded: [PATCH] fs/nsfs: skip dropping active refs on initial namespaces syzbot
2025-11-07 11:16 ` Forwarded: [PATCH] ns: skip active reference management " syzbot
2025-11-07 11:41 ` Forwarded: [PATCH] nsfs: " syzbot
2025-11-07 11:43 ` syzbot
2025-11-07 11:43 ` syzbot
2025-11-09 8:24 ` [syzbot] [fs?] WARNING in nsproxy_ns_active_put syzbot
2025-11-11 9:24 ` Christian Brauner
2025-11-11 9:46 ` syzbot
2025-11-11 10:26 ` Christian Brauner
2025-11-11 11:02 ` syzbot
2025-11-11 11:23 ` Christian Brauner
2025-11-11 11:38 ` Christian Brauner
2025-11-11 13:03 ` syzbot
2025-11-11 15:07 ` Christian Brauner
2025-11-11 16:14 ` syzbot
2025-11-11 21:29 ` [PATCH] nsproxy: fix free_nsproxy() and simplify create_new_namespaces() Christian Brauner
2025-11-13 11:19 ` Jan Kara
2025-11-13 13:05 ` Christian Brauner
-- strict thread matches above, loose matches on Subject: below --
2025-11-06 1:35 [syzbot] [fs?] WARNING in nsproxy_ns_active_get syzbot
2025-11-07 11:44 ` Forwarded: [PATCH] nsfs: skip active reference management on initial namespaces syzbot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox