]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
ovl: make use of ->layers safe in rcu pathwalk
authorAmir Goldstein <amir73il@gmail.com>
Mon, 2 Oct 2023 11:21:49 +0000 (14:21 +0300)
committerAmir Goldstein <amir73il@gmail.com>
Mon, 2 Oct 2023 14:45:02 +0000 (17:45 +0300)
commita535116d80339dbfe50b9b81b2f808c69eefbbc3
treed176b86fe0e19b12774c5564dc787ed2539b81a6
parentc54719c92aa3129f330cce81b88cf34f1627f756
ovl: make use of ->layers safe in rcu pathwalk

ovl_permission() accesses ->layers[...].mnt; we can't have ->layers
freed without an RCU delay on fs shutdown.

Fortunately, kern_unmount_array() that is used to drop those mounts
does include an RCU delay, so freeing is delayed; unfortunately, the
array passed to kern_unmount_array() is formed by mangling ->layers
contents and that happens without any delays.

The ->layers[...].name string entries are used to store the strings to
display in "lowerdir=..." by ovl_show_options().  Those entries are not
accessed in RCU walk.

Move the name strings into a separate array ofs->config.lowerdirs and
reuse the ofs->config.lowerdirs array as the temporary mount array to
pass to kern_unmount_array().

Reported-by: Al Viro <viro@zeniv.linux.org.uk>
Link: https://lore.kernel.org/r/20231002023711.GP3389589@ZenIV/
Acked-by: Miklos Szeredi <mszeredi@redhat.com>
Signed-off-by: Amir Goldstein <amir73il@gmail.com>
fs/overlayfs/ovl_entry.h
fs/overlayfs/params.c
fs/overlayfs/super.c