aboutsummaryrefslogtreecommitdiffstats
path: root/sys/linux
diff options
context:
space:
mode:
authorPaul Chaignon <paul.chaignon@gmail.com>2023-08-24 13:29:26 +0200
committerAleksandr Nogikh <nogikh@google.com>2023-08-25 14:18:37 +0000
commit96e2da37710a4f74ccb24cf782cc98dd7c015e1c (patch)
treea4f60826c6a6596f8270e17aa6f2e1f09978d1d0 /sys/linux
parent7481b108ac4af790dfc163514c6dc3a1ff5f3902 (diff)
sys/linux: support O_PATH fds in BPF_OBJ_* cmds
Commit [1] upstream added support for O_PATH fds in BPF_OBJ_* commands. This commit implements the same support in syzkaller. The flag BPF_F_PATH_FD must be set when passing an O_PATH to the BPF_OBJ_* commands. We therefore declare generic and O_PATH-specific variants of the existing BPF_OBJ structs. 1 - https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=cb8edce2807 Signed-off-by: Paul Chaignon <paul.chaignon@gmail.com>
Diffstat (limited to 'sys/linux')
-rw-r--r--sys/linux/bpf.txt47
-rw-r--r--sys/linux/bpf.txt.const1
2 files changed, 45 insertions, 3 deletions
diff --git a/sys/linux/bpf.txt b/sys/linux/bpf.txt
index ea35eecf7..e15b1505e 100644
--- a/sys/linux/bpf.txt
+++ b/sys/linux/bpf.txt
@@ -503,23 +503,63 @@ bpf_reg = BPF_REG_0, BPF_REG_1, BPF_REG_2, BPF_REG_3, BPF_REG_4, BPF_REG_5, BPF_
define MAX_BPF_REG __MAX_BPF_REG
+bpf_obj_pin_map [
+ generic bpf_obj_pin_map_generic
+ o_path bpf_obj_pin_map_o_path
+]
+
+bpf_obj_pin_prog [
+ generic bpf_obj_pin_prog_generic
+ o_path bpf_obj_pin_prog_o_path
+]
+
+bpf_obj_get [
+ generic bpf_obj_get_generic
+ o_path bpf_obj_get_o_path
+]
+
# NEED: these filenames must be on bpf filesystem, can we do it somehow?
-bpf_obj_pin_map {
+bpf_obj_pin_map_generic {
path ptr64[in, filename]
fd fd_bpf_map
flags const[0, int32]
+ path_fd const[0, int32]
}
-bpf_obj_pin_prog {
+bpf_obj_pin_prog_generic {
path ptr64[in, filename]
fd fd_bpf_prog
flags const[0, int32]
+ path_fd const[0, int32]
}
-bpf_obj_get {
+bpf_obj_get_generic {
path ptr64[in, filename]
fd const[0, int32]
file_flags flags[bpf_open_flags, int32]
+ path_fd const[0, int32]
+}
+
+# NEED: Specific type for O_PATH fds (for path_fd).
+bpf_obj_pin_map_o_path {
+ path ptr64[in, filename]
+ fd fd_bpf_map
+ flags const[BPF_F_PATH_FD, int32]
+ path_fd fd
+}
+
+bpf_obj_pin_prog_o_path {
+ path ptr64[in, filename]
+ fd fd_bpf_prog
+ flags const[BPF_F_PATH_FD, int32]
+ path_fd fd
+}
+
+bpf_obj_get_o_path {
+ path ptr64[in, filename]
+ fd const[0, int32]
+ file_flags flags[bpf_obj_get_flags, int32]
+ path_fd fd
}
bpf_attach_targets [
@@ -905,3 +945,4 @@ bpf_prog_query_attach_type = BPF_CGROUP_INET_INGRESS, BPF_CGROUP_INET_EGRESS, BP
bpf_open_flags = BPF_F_RDONLY, BPF_F_WRONLY
bpf_stat_types = BPF_STATS_RUN_TIME
bpf_core_relo_kind = BPF_CORE_FIELD_BYTE_OFFSET, BPF_CORE_FIELD_BYTE_SIZE, BPF_CORE_FIELD_EXISTS, BPF_CORE_FIELD_SIGNED, BPF_CORE_FIELD_LSHIFT_U64, BPF_CORE_FIELD_RSHIFT_U64, BPF_CORE_TYPE_ID_LOCAL, BPF_CORE_TYPE_ID_TARGET, BPF_CORE_TYPE_EXISTS, BPF_CORE_TYPE_SIZE, BPF_CORE_ENUMVAL_EXISTS, BPF_CORE_ENUMVAL_VALUE, BPF_CORE_TYPE_MATCHES
+bpf_obj_get_flags = BPF_F_PATH_FD, bpf_open_flags
diff --git a/sys/linux/bpf.txt.const b/sys/linux/bpf.txt.const
index 176faccfa..9a2b54374 100644
--- a/sys/linux/bpf.txt.const
+++ b/sys/linux/bpf.txt.const
@@ -68,6 +68,7 @@ BPF_F_MMAPABLE = 1024
BPF_F_NO_COMMON_LRU = 2
BPF_F_NO_PREALLOC = 1
BPF_F_NUMA_NODE = 4
+BPF_F_PATH_FD = 16384
BPF_F_PRESERVE_ELEMS = 2048
BPF_F_QUERY_EFFECTIVE = 1
BPF_F_RDONLY = 8