浏览代码

ebpf: export BPF_PSEUDO_MAP_FD to uapi

We need to export BPF_PSEUDO_MAP_FD to user space, as it's used in the
ELF BPF loader where instructions are being loaded that need map fixups.

An initial stage loads all maps into the kernel, and later on replaces
related instructions in the eBPF blob with BPF_PSEUDO_MAP_FD as source
register and the actual fd as immediate value.

The kernel verifier recognizes this keyword and replaces the map fd with
a real pointer internally.

Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Alexei Starovoitov <ast@plumgrid.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Daniel Borkmann 10 年之前
父节点
当前提交
f1a66f85b7
共有 3 个文件被更改,包括 5 次插入3 次删除
  1. 0 2
      include/linux/filter.h
  2. 2 0
      include/uapi/linux/bpf.h
  3. 3 1
      samples/bpf/libbpf.h

+ 0 - 2
include/linux/filter.h

@@ -145,8 +145,6 @@ struct bpf_prog_aux;
 		.off   = 0,					\
 		.off   = 0,					\
 		.imm   = ((__u64) (IMM)) >> 32 })
 		.imm   = ((__u64) (IMM)) >> 32 })
 
 
-#define BPF_PSEUDO_MAP_FD	1
-
 /* pseudo BPF_LD_IMM64 insn used to refer to process-local map_fd */
 /* pseudo BPF_LD_IMM64 insn used to refer to process-local map_fd */
 #define BPF_LD_MAP_FD(DST, MAP_FD)				\
 #define BPF_LD_MAP_FD(DST, MAP_FD)				\
 	BPF_LD_IMM64_RAW(DST, BPF_PSEUDO_MAP_FD, MAP_FD)
 	BPF_LD_IMM64_RAW(DST, BPF_PSEUDO_MAP_FD, MAP_FD)

+ 2 - 0
include/uapi/linux/bpf.h

@@ -120,6 +120,8 @@ enum bpf_prog_type {
 	BPF_PROG_TYPE_SOCKET_FILTER,
 	BPF_PROG_TYPE_SOCKET_FILTER,
 };
 };
 
 
+#define BPF_PSEUDO_MAP_FD	1
+
 /* flags for BPF_MAP_UPDATE_ELEM command */
 /* flags for BPF_MAP_UPDATE_ELEM command */
 #define BPF_ANY		0 /* create new element or update existing */
 #define BPF_ANY		0 /* create new element or update existing */
 #define BPF_NOEXIST	1 /* create new element if it didn't exist */
 #define BPF_NOEXIST	1 /* create new element if it didn't exist */

+ 3 - 1
samples/bpf/libbpf.h

@@ -92,7 +92,9 @@ extern char bpf_log_buf[LOG_BUF_SIZE];
 		.off   = 0,					\
 		.off   = 0,					\
 		.imm   = ((__u64) (IMM)) >> 32 })
 		.imm   = ((__u64) (IMM)) >> 32 })
 
 
-#define BPF_PSEUDO_MAP_FD	1
+#ifndef BPF_PSEUDO_MAP_FD
+# define BPF_PSEUDO_MAP_FD	1
+#endif
 
 
 /* pseudo BPF_LD_IMM64 insn used to refer to process-local map_fd */
 /* pseudo BPF_LD_IMM64 insn used to refer to process-local map_fd */
 #define BPF_LD_MAP_FD(DST, MAP_FD)				\
 #define BPF_LD_MAP_FD(DST, MAP_FD)				\