Add tests for the new O_EMPTYPATH flag of openat(2)/openat2(2). Also, the current openat2 tests include a helper header file that defines the necessary structs and constants to use openat2(2), such as struct open_how. This may result in conflicting definitions when the system header openat2.h is present as well. So add openat2.h generated by 'make headers' to the uapi header files in ./tools/include and remove the helper file definitions of the current openat2 selftests.
Showing the changes to tools/include/uapi/linux (1 of 4 files). Show all
Unified · Split
| @@ -0,0 +1,43 @@ | |||
| 1 | /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ | ||
| 2 | #ifndef _LINUX_OPENAT2_H | ||
| 3 | #define _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 | #define RESOLVE_CACHED 0x20 /* Only complete if resolution can be | ||
| 39 | completed through cached lookup. May | ||
| 40 | return -EAGAIN if that's not | ||
| 41 | possible. */ | ||
| 42 | |||
| 43 | #endif /* _LINUX_OPENAT2_H */ | ||