On Mon, Mar 16, 2026 at 10:53 PM Jeff Layton <[email protected]> wrote: > > On Sat, 2026-03-07 at 20:06 +0600, Dorjoy Chowdhury wrote: > > This flag indicates the path should be opened if it's a regular file. > > This is useful to write secure programs that want to avoid being > > tricked into opening device nodes with special semantics while thinking > > they operate on regular files. This is a requested feature from the > > uapi-group[1]. > > > > A corresponding error code EFTYPE has been introduced. For example, if > > openat2 is called on path /dev/null with OPENAT2_REGULAR in the flag > > param, it will return -EFTYPE. EFTYPE is already used in BSD systems > > like FreeBSD, macOS. > > > > When used in combination with O_CREAT, either the regular file is > > created, or if the path already exists, it is opened if it's a regular > > file. Otherwise, -EFTYPE is returned. > > > > When OPENAT2_REGULAR is combined with O_DIRECTORY, -EINVAL is returned > > as it doesn't make sense to open a path that is both a directory and a > > regular file. > > > > [1]: > > https://uapi-group.org/kernel-features/#ability-to-only-open-regular-files > > > > Signed-off-by: Dorjoy Chowdhury <[email protected]> > > --- > > arch/alpha/include/uapi/asm/errno.h | 2 ++ > > arch/alpha/include/uapi/asm/fcntl.h | 1 + > > arch/mips/include/uapi/asm/errno.h | 2 ++ > > arch/parisc/include/uapi/asm/errno.h | 2 ++ > > arch/parisc/include/uapi/asm/fcntl.h | 1 + > > arch/sparc/include/uapi/asm/errno.h | 2 ++ > > arch/sparc/include/uapi/asm/fcntl.h | 1 + > > fs/ceph/file.c | 4 ++++ > > fs/gfs2/inode.c | 6 ++++++ > > fs/namei.c | 4 ++++ > > fs/nfs/dir.c | 4 ++++ > > fs/open.c | 4 +++- > > fs/smb/client/dir.c | 14 +++++++++++++- > > include/linux/fcntl.h | 2 ++ > > include/uapi/asm-generic/errno.h | 2 ++ > > include/uapi/asm-generic/fcntl.h | 4 ++++ > > tools/arch/alpha/include/uapi/asm/errno.h | 2 ++ > > tools/arch/mips/include/uapi/asm/errno.h | 2 ++ > > tools/arch/parisc/include/uapi/asm/errno.h | 2 ++ > > tools/arch/sparc/include/uapi/asm/errno.h | 2 ++ > > tools/include/uapi/asm-generic/errno.h | 2 ++ > > 21 files changed, 63 insertions(+), 2 deletions(-) > > > > > > I pointed Claude at this patch and got this back. Both issues that it > found will need to be fixed: > > Analysis Summary > > Commit: 7e7fa2653ca57 - openat2: new OPENAT2_REGULAR flag support > > This patch adds a new OPENAT2_REGULAR flag for openat2() that restricts > opens to regular files only, returning a new > EFTYPE errno for non-regular files. It adds filesystem-specific checks in > ceph, gfs2, nfs, and cifs atomic_open paths, > plus a VFS-level fallback in do_open(). > > Issues found: > > 1. OPENAT2_REGULAR leaks into f_flags - do_dentry_open() strips > open-time-only flags (O_CREAT|O_EXCL|O_NOCTTY|O_TRUNC) > but does not strip OPENAT2_REGULAR. When a regular file is successfully > opened via openat2() with this flag, the bit > persists in file->f_flags and will be returned by fcntl(fd, F_GETFL). > 2. BUILD_BUG_ON not updated - The compile-time guard checks > upper_32_bits(VALID_OPEN_FLAGS) but the code now accepts > VALID_OPENAT2_FLAGS. The guard should cover the expanded flag set. >
Good catches! I guess for issue 1 I need to modify the line in do_dentry_open implementation to f->f_flags &= ~(O_CREAT | O_EXCL | O_NOCTTY | O_TRUNC | OPENAT2_REGULAR); right? And for issue 2, I should change the VALID_OPEN_FLAGS to VALID_OPENAT2_FLAGS in both build_open_flags in fs/open.c and in fcntl_init in fs/fcntl.c, correct? Regards, Dorjoy

