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