libfs: fix get_stashed_dentry()
authorChristian Brauner <brauner@kernel.org>
Fri, 6 Sep 2024 16:22:22 +0000 (18:22 +0200)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 6 Sep 2024 18:08:58 +0000 (11:08 -0700)
commit4e32c25b58b945f976435bbe51f39b32d714052e
tree3fbe16437b77046889ff6aa620f74acb2c66689e
parentb831f83e40a24f07c8dcba5be408d93beedc820f
libfs: fix get_stashed_dentry()

get_stashed_dentry() tries to optimistically retrieve a stashed dentry
from a provided location.  It needs to ensure to hold rcu lock before it
dereference the stashed location to prevent UAF issues.  Use
rcu_dereference() instead of READ_ONCE() it's effectively equivalent
with some lockdep bells and whistles and it communicates clearly that
this expects rcu protection.

Link: https://lore.kernel.org/r/20240906-vfs-hotfix-5959800ffa68@brauner
Fixes: 07fd7c329839 ("libfs: add path_from_stashed()")
Reported-by: syzbot+f82b36bffae7ef78b6a7@syzkaller.appspotmail.com
Fixes: syzbot+f82b36bffae7ef78b6a7@syzkaller.appspotmail.com
Reported-by: syzbot+cbe4b96e1194b0e34db6@syzkaller.appspotmail.com
Fixes: syzbot+cbe4b96e1194b0e34db6@syzkaller.appspotmail.com
Signed-off-by: Christian Brauner <brauner@kernel.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
fs/libfs.c