]> www.infradead.org Git - users/jedix/linux-maple.git/commit
fs: add kern_path_locked_negative()
authorChristian Brauner <brauner@kernel.org>
Mon, 14 Apr 2025 20:13:33 +0000 (22:13 +0200)
committerChristian Brauner <brauner@kernel.org>
Tue, 15 Apr 2025 09:32:34 +0000 (11:32 +0200)
commitc86b300b1ea35959a6e2a63a6497226a6ea90b67
treea58eff52db91c26b171ad1485d0988ec1f8091cc
parentddee68c499f76ae47c011549df5be53db0057402
fs: add kern_path_locked_negative()

The audit code relies on the fact that kern_path_locked() returned a
path even for a negative dentry. If it doesn't find a valid dentry it
immediately calls:

    audit_find_parent(d_backing_inode(parent_path.dentry));

which assumes that parent_path.dentry is still valid. But it isn't since
kern_path_locked() has been changed to path_put() also for a negative
dentry.

Fix this by adding a helper that implements the required audit semantics
and allows us to fix the immediate bleeding. We can find a unified
solution for this afterwards.

Link: https://lore.kernel.org/20250414-rennt-wimmeln-f186c3a780f1@brauner
Fixes: 1c3cb50b58c3 ("VFS: change kern_path_locked() and user_path_locked_at() to never return negative dentry")
Reported-and-tested-by: Vlastimil Babka <vbabka@suse.cz>
Signed-off-by: Christian Brauner <brauner@kernel.org>
fs/namei.c
include/linux/namei.h
kernel/audit_watch.c