* [PATCH] fs: fix user path of nested backing files
@ 2026-08-04 3:42 Baokun Li
2026-08-04 17:00 ` Paul Moore
2026-08-12 7:27 ` Christian Brauner
0 siblings, 2 replies; 3+ messages in thread
From: Baokun Li @ 2026-08-04 3:42 UTC (permalink / raw)
To: linux-fsdevel
Cc: miklos, amir73il, viro, brauner, jack, paul, serge, linux-unionfs,
linux-kernel, stable
backing_file_open() derives the path to be stored in the new backing
file from user_file->f_path. This is incorrect when user_file itself
is a backing file, which is the case for nested stacking filesystems,
e.g. overlayfs mounts where the lowerdir of one overlayfs is the merged
directory of another. Since commit def3ae83da02 ("fs: store real path
instead of fake path in backing file f_path") the f_path of a backing
file holds the real path of the intermediate layer, not the path that
the user opened.
Commit 924577e4f6ca ("ovl: Fix nested backing file paths") fixed this
for such configurations by passing file_user_path() from
ovl_open_realfile(). However, commit 6af36aeb147a ("lsm: add
backing_file LSM hooks") changed the first argument of
backing_file_open() from the user path back to the user file and
derived the path from user_file->f_path again, silently re-introducing
the problem.
As a result, files mapped through a nested overlayfs show the wrong
path in /proc/<pid>/maps and in perf/ftrace mmap records. For example,
with two nested overlayfs mounts:
mkdir -p /ovl/{lower,upper,work,merged} /ovl/nested
echo hello > /ovl/lower/foo
mount -t overlay overlay \
-o lowerdir=/ovl/lower,upperdir=/ovl/upper,workdir=/ovl/work \
/ovl/merged
# at least two lowerdirs are needed when upperdir is nonexistent
mount -t overlay overlay \
-o lowerdir=/ovl/merged:/ovl/lower /ovl/nested
mapping /ovl/nested/foo shows a disconnected path instead of the user
path:
# readlink /proc/self/fd/3
/ovl/nested/foo
# grep foo /proc/self/maps
7f6e2c100000-7f6e2c101000 r--s 00000000 00:24 15813027 /foo
The bogus path is derived from the f_path of the intermediate backing
file, whose mount is a private clone that d_path() cannot resolve.
Fix this by using file_user_path(), which returns the outermost
user-visible path for backing files and falls back to
&user_file->f_path for regular files. This restores the behavior of
commit 924577e4f6ca ("ovl: Fix nested backing file paths") for
overlayfs and also fixes the same problem for the other
backing_file_open() callers, fuse passthrough and erofs ishare, when
their user file is itself a backing file.
backing_tmpfile_open() has the same pattern but is not affected: it is
only called by ovl_create_tmpfile() for the upper layer, and another
overlayfs is rejected as upperdir by the DCACHE_OP_REAL check in
ovl_mount_dir_check(), so its user_file can never be a backing file.
Fixes: 6af36aeb147a ("lsm: add backing_file LSM hooks")
Cc: stable@vger.kernel.org
Signed-off-by: Baokun Li <libaokun@linux.alibaba.com>
---
fs/backing-file.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/fs/backing-file.c b/fs/backing-file.c
index 080c99696cd0..cc101143f921 100644
--- a/fs/backing-file.c
+++ b/fs/backing-file.c
@@ -35,7 +35,7 @@ struct file *backing_file_open(const struct file *user_file, int flags,
const struct path *real_path,
const struct cred *cred)
{
- const struct path *user_path = &user_file->f_path;
+ const struct path *user_path = file_user_path(user_file);
struct file *f;
int error;
--
2.43.7
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] fs: fix user path of nested backing files
2026-08-04 3:42 [PATCH] fs: fix user path of nested backing files Baokun Li
@ 2026-08-04 17:00 ` Paul Moore
2026-08-12 7:27 ` Christian Brauner
1 sibling, 0 replies; 3+ messages in thread
From: Paul Moore @ 2026-08-04 17:00 UTC (permalink / raw)
To: Baokun Li
Cc: linux-fsdevel, miklos, amir73il, viro, brauner, jack, serge,
linux-unionfs, linux-kernel, stable, linux-security-module,
selinux
On Mon, Aug 3, 2026 at 11:42 PM Baokun Li <libaokun@linux.alibaba.com> wrote:
>
> backing_file_open() derives the path to be stored in the new backing
> file from user_file->f_path. This is incorrect when user_file itself
> is a backing file, which is the case for nested stacking filesystems,
> e.g. overlayfs mounts where the lowerdir of one overlayfs is the merged
> directory of another. Since commit def3ae83da02 ("fs: store real path
> instead of fake path in backing file f_path") the f_path of a backing
> file holds the real path of the intermediate layer, not the path that
> the user opened.
>
> Commit 924577e4f6ca ("ovl: Fix nested backing file paths") fixed this
> for such configurations by passing file_user_path() from
> ovl_open_realfile(). However, commit 6af36aeb147a ("lsm: add
> backing_file LSM hooks") changed the first argument of
> backing_file_open() from the user path back to the user file and
> derived the path from user_file->f_path again, silently re-introducing
> the problem.
>
> As a result, files mapped through a nested overlayfs show the wrong
> path in /proc/<pid>/maps and in perf/ftrace mmap records. For example,
> with two nested overlayfs mounts:
>
> mkdir -p /ovl/{lower,upper,work,merged} /ovl/nested
> echo hello > /ovl/lower/foo
> mount -t overlay overlay \
> -o lowerdir=/ovl/lower,upperdir=/ovl/upper,workdir=/ovl/work \
> /ovl/merged
> # at least two lowerdirs are needed when upperdir is nonexistent
> mount -t overlay overlay \
> -o lowerdir=/ovl/merged:/ovl/lower /ovl/nested
>
> mapping /ovl/nested/foo shows a disconnected path instead of the user
> path:
>
> # readlink /proc/self/fd/3
> /ovl/nested/foo
> # grep foo /proc/self/maps
> 7f6e2c100000-7f6e2c101000 r--s 00000000 00:24 15813027 /foo
>
> The bogus path is derived from the f_path of the intermediate backing
> file, whose mount is a private clone that d_path() cannot resolve.
>
> Fix this by using file_user_path(), which returns the outermost
> user-visible path for backing files and falls back to
> &user_file->f_path for regular files. This restores the behavior of
> commit 924577e4f6ca ("ovl: Fix nested backing file paths") for
> overlayfs and also fixes the same problem for the other
> backing_file_open() callers, fuse passthrough and erofs ishare, when
> their user file is itself a backing file.
>
> backing_tmpfile_open() has the same pattern but is not affected: it is
> only called by ovl_create_tmpfile() for the upper layer, and another
> overlayfs is rejected as upperdir by the DCACHE_OP_REAL check in
> ovl_mount_dir_check(), so its user_file can never be a backing file.
>
> Fixes: 6af36aeb147a ("lsm: add backing_file LSM hooks")
> Cc: stable@vger.kernel.org
> Signed-off-by: Baokun Li <libaokun@linux.alibaba.com>
> ---
> fs/backing-file.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
The selinux-testsuite runs clean with this patch applied.
Tested-by: Paul Moore <paul@paul-moore.com>
--
paul-moore.com
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] fs: fix user path of nested backing files
2026-08-04 3:42 [PATCH] fs: fix user path of nested backing files Baokun Li
2026-08-04 17:00 ` Paul Moore
@ 2026-08-12 7:27 ` Christian Brauner
1 sibling, 0 replies; 3+ messages in thread
From: Christian Brauner @ 2026-08-12 7:27 UTC (permalink / raw)
To: linux-fsdevel, Baokun Li
Cc: miklos, amir73il, viro, jack, paul, serge, linux-unionfs,
linux-kernel, stable
On Tue, 04 Aug 2026 11:42:04 +0800, Baokun Li wrote:
> fs: fix user path of nested backing files
Applied to the vfs-7.3.misc branch of the vfs/vfs.git tree.
Patches in the vfs-7.3.misc branch should appear in linux-next soon.
Please report any outstanding bugs that were missed during review in a
new review to the original patch series allowing us to drop it.
It's encouraged to provide Acked-bys and Reviewed-bys even though the
patch has now been applied. If possible patch trailers will be updated.
Note that commit hashes shown below are subject to change due to rebase,
trailer updates or similar. If in doubt, please check the listed branch.
tree: https://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs.git
branch: vfs-7.3.misc
[1/1] fs: fix user path of nested backing files
https://git.kernel.org/vfs/vfs/c/ffb5dde2f64a
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-08-12 7:27 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-04 3:42 [PATCH] fs: fix user path of nested backing files Baokun Li
2026-08-04 17:00 ` Paul Moore
2026-08-12 7:27 ` Christian Brauner
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).