diff options
author | Christian Brauner <brauner@kernel.org> | 2025-02-10 13:38:59 +0100 |
---|---|---|
committer | Christian Brauner <brauner@kernel.org> | 2025-02-12 10:02:10 +0100 |
commit | 0ff053b98a0f039e52c2bd8d0cb38f2831edfaf5 (patch) | |
tree | 2f2a5fd968924846c8c05746512abed23ae15ff2 | |
parent | 2cc0b7fd4bb0cd7f98fe75758e4c619f74873bd9 (diff) |
fs: support O_PATH fds with FSCONFIG_SET_FD
Let FSCONFIG_SET_FD handle O_PATH file descriptors. This is particularly
useful in the context of overlayfs where layers can be specified via
file descriptors instead of paths. But userspace must currently use
non-O_PATH file desriptors which is often pointless especially if
the file descriptors have been created via open_tree(OPEN_TREE_CLONE).
Link: https://lore.kernel.org/r/20250210-work-overlayfs-v2-1-ed2a949b674b@kernel.org
Fixes: a08557d19ef41 ("ovl: specify layers via file descriptors")
Reviewed-by: Amir Goldstein <amir73il@gmail.com>
Signed-off-by: Christian Brauner <brauner@kernel.org>
-rw-r--r-- | fs/autofs/autofs_i.h | 2 | ||||
-rw-r--r-- | fs/fsopen.c | 2 |
2 files changed, 3 insertions, 1 deletions
diff --git a/fs/autofs/autofs_i.h b/fs/autofs/autofs_i.h index 77c7991d89aa..23cea74f9933 100644 --- a/fs/autofs/autofs_i.h +++ b/fs/autofs/autofs_i.h @@ -218,6 +218,8 @@ void autofs_clean_ino(struct autofs_info *); static inline int autofs_check_pipe(struct file *pipe) { + if (pipe->f_mode & FMODE_PATH) + return -EINVAL; if (!(pipe->f_mode & FMODE_CAN_WRITE)) return -EINVAL; if (!S_ISFIFO(file_inode(pipe)->i_mode)) diff --git a/fs/fsopen.c b/fs/fsopen.c index 094a7f510edf..1aaf4cb2afb2 100644 --- a/fs/fsopen.c +++ b/fs/fsopen.c @@ -453,7 +453,7 @@ SYSCALL_DEFINE5(fsconfig, case FSCONFIG_SET_FD: param.type = fs_value_is_file; ret = -EBADF; - param.file = fget(aux); + param.file = fget_raw(aux); if (!param.file) goto out_key; param.dirfd = aux; |