summaryrefslogtreecommitdiff
path: root/scripts/basic
diff options
context:
space:
mode:
authorChris Mason <mason@kernel.org>2026-10-07 10:53:10 +0000
committerAmir Goldstein <amir73il@gmail.com>2026-10-29 13:22:16 +0100
commit16d319e12328acafeafd3eecdf09c46d7fb43452 (patch)
treedad9dd29ae2dcf1b1b574136a85cb428c0ba75d5 /scripts/basic
parent4f61ff2ebfb3d2967b83b6a4d456242244d5a61f (diff)
downloadlinux-16d319e12328acafeafd3eecdf09c46d7fb43452.tar.gz
linux-16d319e12328acafeafd3eecdf09c46d7fb43452.zip
ovl: hold a reference on the parent in readdir
Listing a directory on an overlay uses a freed dentry and crashes the kernel when a lookup moves the directory at the same time. Code that can sleep may only use d_parent without a reference while something stops a move of the dentry. ovl_iterate_real(), ovl_need_adjust_d_ino() and ovl_cache_update() use the d_parent of the listed directory and hold only the lock of that directory. When a lookup finds the directory under another parent after a change to a layer, d_splice_alias() moves it without that lock and drops its reference on the old parent. With a delay in ovl_iterate_real(), getdents64 on an overlay directory raced a rename in the lower layer and a lookup that moved its dentry, and after an rmdir of the old parent KASAN reported a use-after-free in security_inode_getattr(). Fix this by using dget_parent() in the three functions. Fixes: b5efccbe0a12 ("ovl: constant d_ino across copy up") Cc: stable@vger.kernel.org Signed-off-by: Chris Mason <mason@kernel.org> Signed-off-by: Josef Bacik <josef@toxicpanda.com> [amir: fix comments in ovl_need_adjust_d_ino()] Signed-off-by: Amir Goldstein <amir73il@gmail.com>
Diffstat (limited to 'scripts/basic')
0 files changed, 0 insertions, 0 deletions