summaryrefslogtreecommitdiff
path: root/scripts/Makefile.thinlto
diff options
context:
space:
mode:
authorChris Mason <mason@kernel.org>2026-10-07 10:38:39 +0000
committerAmir Goldstein <amir73il@gmail.com>2026-10-29 13:21:58 +0100
commit0b691c3c59a58aa6a2fc3f87c10cc1e399f1d33f (patch)
treeb5ebe41e6be17e0bf2ab83f43e203c412b800ed2 /scripts/Makefile.thinlto
parent15c6bd5cf109471baca7fbe46e8f574569257a28 (diff)
downloadlinux-0b691c3c59a58aa6a2fc3f87c10cc1e399f1d33f.tar.gz
linux-0b691c3c59a58aa6a2fc3f87c10cc1e399f1d33f.zip
ovl: do not take a name snapshot in RCU walk
A path lookup on an overlay over FUSE loops in the kernel for ever and stalls RCU. take_dentry_name_snapshot() needs a dentry that the caller keeps alive, because for a dead dentry the refcount of an external name stays at zero and the function retries without end. In RCU walk ovl_revalidate_real() holds no reference on the real dentry, and the eviction of the overlay inode on another CPU can drop the last one. With a delay in ovl_revalidate_real(), a stat() loop on a 48 byte name in an overlay over FUSE, raced with drop_caches, spun for ever in take_dentry_name_snapshot() and stalled RCU. Fix this by using try_take_dentry_name_snapshot() in RCU walk, and by returning -ECHILD when it fails. Fixes: 5be1fa8abd7b ("Pass parent directory inode and expected name to ->d_revalidate()") Cc: stable@vger.kernel.org Signed-off-by: Chris Mason <mason@kernel.org> Signed-off-by: Josef Bacik <josef@toxicpanda.com> [amir: use try_take_dentry_name_snapshot() instead of open coded snapshot] Signed-off-by: Amir Goldstein <amir73il@gmail.com>
Diffstat (limited to 'scripts/Makefile.thinlto')
0 files changed, 0 insertions, 0 deletions