Pull in Al's openat2 branch, since we'll need that for the openat2 support. * 'work.openat2' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: Documentation: path-lookup: include new LOOKUP flags selftests: add openat2(2) selftests open: introduce openat2(2) syscall namei: LOOKUP_{IN_ROOT,BENEATH}: permit limited ".." resolution namei: LOOKUP_IN_ROOT: chroot-like scoped resolution namei: LOOKUP_BENEATH: O_BENEATH-like scoped resolution namei: LOOKUP_NO_XDEV: block mountpoint crossing namei: LOOKUP_NO_MAGICLINKS: block magic-link resolution namei: LOOKUP_NO_SYMLINKS: block symlink resolution namei: allow set_root() to produce errors namei: allow nd_jump_link() to produce errors nsfs: clean-up ns_get_path() signature to return int namei: only return -ECHILD from follow_dotdot_rcu()
Showing the changes to include/uapi/linux (2 of 44 files). Show all
Unified · Split
| @@ -3,6 +3,7 @@ · 2 unmodified lines | |||
| 3 | #define _UAPI_LINUX_FCNTL_H | 3 | #define _UAPI_LINUX_FCNTL_H |
| 4 | 4 | ||
| 5 | #include <asm/fcntl.h> | 5 | #include <asm/fcntl.h> |
| 6 | #include <linux/openat2.h> | ||
| 6 | 7 | ||
| 7 | #define F_SETLEASE (F_LINUX_SPECIFIC_BASE + 0) | 8 | #define F_SETLEASE (F_LINUX_SPECIFIC_BASE + 0) |
| 8 | #define F_GETLEASE (F_LINUX_SPECIFIC_BASE + 1) | 9 | #define F_GETLEASE (F_LINUX_SPECIFIC_BASE + 1) |
| @@ -100,5 +101,4 @@ · 91 unmodified lines | |||
| 100 | 101 | ||
| 101 | #define AT_RECURSIVE 0x8000 /* Apply to the entire subtree */ | 102 | #define AT_RECURSIVE 0x8000 /* Apply to the entire subtree */ |
| 102 | 103 | ||
| 103 | |||
| 104 | #endif /* _UAPI_LINUX_FCNTL_H */ | 104 | #endif /* _UAPI_LINUX_FCNTL_H */ |
| @@ -0,0 +1,39 @@ | |||
| 1 | /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ | ||
| 2 | #ifndef _UAPI_LINUX_OPENAT2_H | ||
| 3 | #define _UAPI_LINUX_OPENAT2_H | ||
| 4 | |||
| 5 | #include <linux/types.h> | ||
| 6 | |||
| 7 | /* | ||
| 8 | * Arguments for how openat2(2) should open the target path. If only @flags and | ||
| 9 | * @mode are non-zero, then openat2(2) operates very similarly to openat(2). | ||
| 10 | * | ||
| 11 | * However, unlike openat(2), unknown or invalid bits in @flags result in | ||
| 12 | * -EINVAL rather than being silently ignored. @mode must be zero unless one of | ||
| 13 | * {O_CREAT, O_TMPFILE} are set. | ||
| 14 | * | ||
| 15 | * @flags: O_* flags. | ||
| 16 | * @mode: O_CREAT/O_TMPFILE file mode. | ||
| 17 | * @resolve: RESOLVE_* flags. | ||
| 18 | */ | ||
| 19 | struct open_how { | ||
| 20 | __u64 flags; | ||
| 21 | __u64 mode; | ||
| 22 | __u64 resolve; | ||
| 23 | }; | ||
| 24 | |||
| 25 | /* how->resolve flags for openat2(2). */ | ||
| 26 | #define RESOLVE_NO_XDEV 0x01 /* Block mount-point crossings | ||
| 27 | (includes bind-mounts). */ | ||
| 28 | #define RESOLVE_NO_MAGICLINKS 0x02 /* Block traversal through procfs-style | ||
| 29 | "magic-links". */ | ||
| 30 | #define RESOLVE_NO_SYMLINKS 0x04 /* Block traversal through all symlinks | ||
| 31 | (implies OEXT_NO_MAGICLINKS) */ | ||
| 32 | #define RESOLVE_BENEATH 0x08 /* Block "lexical" trickery like | ||
| 33 | "..", symlinks, and absolute | ||
| 34 | paths which escape the dirfd. */ | ||
| 35 | #define RESOLVE_IN_ROOT 0x10 /* Make all jumps to "/" and ".." | ||
| 36 | be scoped inside the dirfd | ||
| 37 | (similar to chroot(2)). */ | ||
| 38 | |||
| 39 | #endif /* _UAPI_LINUX_OPENAT2_H */ | ||