pidfs: detect refcount bugs
authorChristian Brauner <brauner@kernel.org>
Tue, 6 May 2025 11:55:54 +0000 (13:55 +0200)
committerChristian Brauner <brauner@kernel.org>
Tue, 6 May 2025 11:59:00 +0000 (13:59 +0200)
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>
kernel/pid.c

index 26f1e136f01786df2e17682fdb172573f7d59328..8317bcbc7cf7daa88602bbd9ea912934ca2c4ca2 100644 (file)
@@ -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);
        }