diff options
author | Christian Brauner <brauner@kernel.org> | 2025-05-06 13:55:54 +0200 |
---|---|---|
committer | Christian Brauner <brauner@kernel.org> | 2025-05-06 13:59:00 +0200 |
commit | db56723ceaec87aa5cf871e623f464934b266228 (patch) | |
tree | 8c15161edd419fa819fc7ab9eea44823dbdaf187 /kernel/pid.c | |
parent | 4dd6566b5a8ca1e8c9ff2652c2249715d6c64217 (diff) |
pidfs: detect refcount bugs
Now that we have pidfs_{get,register}_pid() that needs to be paired with
pidfs_put_pid() it's possible that someone pairs them with put_pid().
Thus freeing struct pid while it's still used by pidfs. Notice when that
happens. I'll also add a scheme to detect invalid uses of
pidfs_get_pid() and pidfs_put_pid() later.
Link: https://lore.kernel.org/20250506-uferbereich-guttun-7c8b1a0a431f@brauner
Signed-off-by: Christian Brauner <brauner@kernel.org>
Diffstat (limited to 'kernel/pid.c')
-rw-r--r-- | kernel/pid.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/kernel/pid.c b/kernel/pid.c index 26f1e136f017..8317bcbc7cf7 100644 --- a/kernel/pid.c +++ b/kernel/pid.c @@ -100,6 +100,7 @@ void put_pid(struct pid *pid) ns = pid->numbers[pid->level].ns; if (refcount_dec_and_test(&pid->count)) { + WARN_ON_ONCE(pid->stashed); kmem_cache_free(ns->pid_cachep, pid); put_pid_ns(ns); } |