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 */ | |