OPENAT2_REGULAR flag support for openat2
| From: | Dorjoy Chowdhury <dorjoychy111-AT-gmail.com> | |
| To: | linux-fsdevel-AT-vger.kernel.org | |
| Subject: | [PATCH v6 0/4] OPENAT2_REGULAR flag support for openat2 | |
| Date: | Sat, 28 Mar 2026 23:22:21 +0600 | |
| Message-ID: | <20260328172314.45807-1-dorjoychy111@gmail.com> | |
| Cc: | linux-kernel-AT-vger.kernel.org, linux-api-AT-vger.kernel.org, ceph-devel-AT-vger.kernel.org, gfs2-AT-lists.linux.dev, linux-nfs-AT-vger.kernel.org, linux-cifs-AT-vger.kernel.org, v9fs-AT-lists.linux.dev, linux-kselftest-AT-vger.kernel.org, viro-AT-zeniv.linux.org.uk, brauner-AT-kernel.org, jack-AT-suse.cz, jlayton-AT-kernel.org, chuck.lever-AT-oracle.com, alex.aring-AT-gmail.com, arnd-AT-arndb.de, adilger-AT-dilger.ca, mjguzik-AT-gmail.com, smfrench-AT-gmail.com, richard.henderson-AT-linaro.org, mattst88-AT-gmail.com, linmag7-AT-gmail.com, tsbogend-AT-alpha.franken.de, James.Bottomley-AT-HansenPartnership.com, deller-AT-gmx.de, davem-AT-davemloft.net, andreas-AT-gaisler.com, idryomov-AT-gmail.com, amarkuze-AT-redhat.com, slava-AT-dubeyko.com, agruenba-AT-redhat.com, trondmy-AT-kernel.org, anna-AT-kernel.org, sfrench-AT-samba.org, pc-AT-manguebit.org, ronniesahlberg-AT-gmail.com, sprasad-AT-microsoft.com, tom-AT-talpey.com, bharathsm-AT-microsoft.com, shuah-AT-kernel.org, miklos-AT-szeredi.hu, hansg-AT-kernel.org | |
| Archive-link: | Article |
Hi, I came upon this "Ability to only open regular files" uapi feature suggestion from https://uapi-group.org/kernel-features/#ability-to-only-o... and thought it would be something I could do as a first patch and get to know the kernel code a bit better. The following filesystems have been tested by building and booting the kernel x86 bzImage in a Fedora 43 VM in QEMU. I have tested with OPENAT2_REGULAR that regular files can be successfully opened and non-regular files (directory, fifo etc) return -EFTYPE. - btrfs - NFS (loopback) - SMB (loopback) Changes in v6: - OPENAT2_REGULAR stripped from file->f_flags in do_dentry_open so that it doesn't leak in fcntl(fd, F_GETFL) - BUILD_BUG_ON updated to use VALID_OPENAT2_FLAGS instead of VALID_OPEN_FLAGS in build_open_flags and in fcntl_init - v5 is at: https://lore.kernel.org/linux-fsdevel/20260307140726.7021... Changes in v5: - EFTYPE is already used in BSDs mentioned in commit message - consistently return -EFTYPE in all filesystems - v4 is at: https://lore.kernel.org/linux-fsdevel/20260221145915.8174... Changes in v4: - changed O_REGULAR to OPENAT2_REGULAR - OPENAT2_REGULAR does not affect O_PATH - atomic_open codepaths updated to work properly for OPENAT2_REGULAR - commit message includes the uapi-group URL - v3 is at: https://lore.kernel.org/linux-fsdevel/20260127180109.6669... Changes in v3: - included motivation about O_REGULAR flag in commit message e.g., programs not wanting to be tricked into opening device nodes - fixed commit message wrongly referencing ENOTREGULAR instead of ENOTREG - fixed the O_REGULAR flag in arch/parisc/include/uapi/asm/fcntl.h from 060000000 to 0100000000 - added 2 commits converting arch/{mips,sparc}/include/uapi/asm/fcntl.h O_* macros from hex to octal - v2 is at: https://lore.kernel.org/linux-fsdevel/20260126154156.5572... Changes in v2: - rename ENOTREGULAR to ENOTREG - define ENOTREG in uapi/asm-generic/errno.h (instead of errno-base.h) and in arch/*/include/uapi/asm/errno.h files - override O_REGULAR in arch/{alpha,sparc,parisc}/include/uapi/asm/fcntl.h due to clash with include/uapi/asm-generic/fcntl.h - I have kept the kselftest but now that O_REGULAR and ENOTREG can have different value on different architectures I am not sure if it's right - v1 is at: https://lore.kernel.org/linux-fsdevel/20260125141518.5949... Thanks. Regards, Dorjoy Dorjoy Chowdhury (4): openat2: new OPENAT2_REGULAR flag support kselftest/openat2: test for OPENAT2_REGULAR flag sparc/fcntl.h: convert O_* flag macros from hex to octal mips/fcntl.h: convert O_* flag macros from hex to octal 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/mips/include/uapi/asm/fcntl.h | 22 +++++------ 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 | 35 +++++++++--------- fs/ceph/file.c | 4 ++ fs/fcntl.c | 4 +- fs/gfs2/inode.c | 6 +++ fs/namei.c | 4 ++ fs/nfs/dir.c | 4 ++ fs/open.c | 8 ++-- 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 + .../testing/selftests/openat2/openat2_test.c | 37 ++++++++++++++++++- 24 files changed, 131 insertions(+), 35 deletions(-) -- 2.53.0
