summaryrefslogtreecommitdiffhomepage
path: root/ebpf/include/linux/openat2.h
diff options
context:
space:
mode:
authorDavid Anderson <danderson@tailscale.com>2021-11-10 12:15:03 -0800
committerDavid Anderson <danderson@tailscale.com>2021-11-10 12:15:03 -0800
commit41710e1b810aa25c14ceb657a40b9ba616615435 (patch)
tree4953322c9930fde10dae9ff057de28827e87fb52 /ebpf/include/linux/openat2.h
parent4a51050c498da33eaecb520b78aeb5f445a442f1 (diff)
downloadtailscale-danderson/ebpf.tar.xz
tailscale-danderson/ebpf.zip
ebpf: experiments.danderson/ebpf
Diffstat (limited to 'ebpf/include/linux/openat2.h')
-rw-r--r--ebpf/include/linux/openat2.h43
1 files changed, 43 insertions, 0 deletions
diff --git a/ebpf/include/linux/openat2.h b/ebpf/include/linux/openat2.h
new file mode 100644
index 000000000..4759c4716
--- /dev/null
+++ b/ebpf/include/linux/openat2.h
@@ -0,0 +1,43 @@
+/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
+#ifndef _LINUX_OPENAT2_H
+#define _LINUX_OPENAT2_H
+
+#include <linux/types.h>
+
+/*
+ * Arguments for how openat2(2) should open the target path. If only @flags and
+ * @mode are non-zero, then openat2(2) operates very similarly to openat(2).
+ *
+ * However, unlike openat(2), unknown or invalid bits in @flags result in
+ * -EINVAL rather than being silently ignored. @mode must be zero unless one of
+ * {O_CREAT, O_TMPFILE} are set.
+ *
+ * @flags: O_* flags.
+ * @mode: O_CREAT/O_TMPFILE file mode.
+ * @resolve: RESOLVE_* flags.
+ */
+struct open_how {
+ __u64 flags;
+ __u64 mode;
+ __u64 resolve;
+};
+
+/* how->resolve flags for openat2(2). */
+#define RESOLVE_NO_XDEV 0x01 /* Block mount-point crossings
+ (includes bind-mounts). */
+#define RESOLVE_NO_MAGICLINKS 0x02 /* Block traversal through procfs-style
+ "magic-links". */
+#define RESOLVE_NO_SYMLINKS 0x04 /* Block traversal through all symlinks
+ (implies OEXT_NO_MAGICLINKS) */
+#define RESOLVE_BENEATH 0x08 /* Block "lexical" trickery like
+ "..", symlinks, and absolute
+ paths which escape the dirfd. */
+#define RESOLVE_IN_ROOT 0x10 /* Make all jumps to "/" and ".."
+ be scoped inside the dirfd
+ (similar to chroot(2)). */
+#define RESOLVE_CACHED 0x20 /* Only complete if resolution can be
+ completed through cached lookup. May
+ return -EAGAIN if that's not
+ possible. */
+
+#endif /* _LINUX_OPENAT2_H */