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 | 3 | #define _UAPI_LINUX_FCNTL_H |
| 4 | 4 | |
| 5 | 5 | #include <asm/fcntl.h> |
| 6 | +#include <linux/openat2.h> | |
| 6 | 7 | |
| 7 | 8 | #define F_SETLEASE (F_LINUX_SPECIFIC_BASE + 0) |
| 8 | 9 | #define F_GETLEASE (F_LINUX_SPECIFIC_BASE + 1) |
| @@ -100,5 +101,4 @@ · 91 unmodified lines | ||
| 100 | 101 | |
| 101 | 102 | #define AT_RECURSIVE 0x8000 /* Apply to the entire subtree */ |
| 102 | 103 | |
| 103 | − | |
| 104 | 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 */ | |