17c2aad20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
27c2aad20Sopenharmony_ci#ifndef _UAPI_LINUX_OPENAT2_H
37c2aad20Sopenharmony_ci#define _UAPI_LINUX_OPENAT2_H
47c2aad20Sopenharmony_ci
57c2aad20Sopenharmony_ci#include <linux/types.h>
67c2aad20Sopenharmony_ci
77c2aad20Sopenharmony_ci/*
87c2aad20Sopenharmony_ci * Arguments for how openat2(2) should open the target path. If only @flags and
97c2aad20Sopenharmony_ci * @mode are non-zero, then openat2(2) operates very similarly to openat(2).
107c2aad20Sopenharmony_ci *
117c2aad20Sopenharmony_ci * However, unlike openat(2), unknown or invalid bits in @flags result in
127c2aad20Sopenharmony_ci * -EINVAL rather than being silently ignored. @mode must be zero unless one of
137c2aad20Sopenharmony_ci * {O_CREAT, O_TMPFILE} are set.
147c2aad20Sopenharmony_ci *
157c2aad20Sopenharmony_ci * @flags: O_* flags.
167c2aad20Sopenharmony_ci * @mode: O_CREAT/O_TMPFILE file mode.
177c2aad20Sopenharmony_ci * @resolve: RESOLVE_* flags.
187c2aad20Sopenharmony_ci */
197c2aad20Sopenharmony_cistruct open_how {
207c2aad20Sopenharmony_ci	__u64 flags;
217c2aad20Sopenharmony_ci	__u64 mode;
227c2aad20Sopenharmony_ci	__u64 resolve;
237c2aad20Sopenharmony_ci};
247c2aad20Sopenharmony_ci
257c2aad20Sopenharmony_ci/* how->resolve flags for openat2(2). */
267c2aad20Sopenharmony_ci#define RESOLVE_NO_XDEV		0x01 /* Block mount-point crossings
277c2aad20Sopenharmony_ci					(includes bind-mounts). */
287c2aad20Sopenharmony_ci#define RESOLVE_NO_MAGICLINKS	0x02 /* Block traversal through procfs-style
297c2aad20Sopenharmony_ci					"magic-links". */
307c2aad20Sopenharmony_ci#define RESOLVE_NO_SYMLINKS	0x04 /* Block traversal through all symlinks
317c2aad20Sopenharmony_ci					(implies OEXT_NO_MAGICLINKS) */
327c2aad20Sopenharmony_ci#define RESOLVE_BENEATH		0x08 /* Block "lexical" trickery like
337c2aad20Sopenharmony_ci					"..", symlinks, and absolute
347c2aad20Sopenharmony_ci					paths which escape the dirfd. */
357c2aad20Sopenharmony_ci#define RESOLVE_IN_ROOT		0x10 /* Make all jumps to "/" and ".."
367c2aad20Sopenharmony_ci					be scoped inside the dirfd
377c2aad20Sopenharmony_ci					(similar to chroot(2)). */
387c2aad20Sopenharmony_ci#define RESOLVE_CACHED		0x20 /* Only complete if resolution can be
397c2aad20Sopenharmony_ci					completed through cached lookup. May
407c2aad20Sopenharmony_ci					return -EAGAIN if that's not
417c2aad20Sopenharmony_ci					possible. */
427c2aad20Sopenharmony_ci
437c2aad20Sopenharmony_ci#endif /* _UAPI_LINUX_OPENAT2_H */
44