[PATCH 1/2] bpf: support new field in BPF_PROG_LOAD

Paul Chaignon paul.chaignon at gmail.com
Mon Nov 25 16:48:47 UTC 2019


* bpf_attr.h (BPF_MAP_LOOKUP_ELEM_struct): New field introduced by Linux
commit v5.1-rc1~178^2~375^2~4^2~3.
* xlat/bpf_map_lookup_elem_flags.in: New file.
* bpf.c: Include "xlat/bpf_map_lookup_elem_flags.h".
(BEGIN_BPF_CMD_DECODER(BPF_MAP_LOOKUP_ELEM)): Decode the new field.
* tests/bpf.c (BPF_PROG_LOAD_checks, BPF_MAP_LOOKUP_ELEM_checks): Update
expected outputs.

Signed-off-by: Paul Chaignon <paul.chaignon at gmail.com>
---
 bpf.c                             | 6 ++++++
 bpf_attr.h                        | 3 ++-
 tests/bpf.c                       | 6 ++++--
 xlat/bpf_map_lookup_elem_flags.in | 2 ++
 4 files changed, 14 insertions(+), 3 deletions(-)
 create mode 100644 xlat/bpf_map_lookup_elem_flags.in

diff --git a/bpf.c b/bpf.c
index d376514d..9b6fb488 100644
--- a/bpf.c
+++ b/bpf.c
@@ -23,6 +23,7 @@
 #include "xlat/bpf_map_flags.h"
 #include "xlat/bpf_prog_types.h"
 #include "xlat/bpf_prog_flags.h"
+#include "xlat/bpf_map_lookup_elem_flags.h"
 #include "xlat/bpf_map_update_elem_flags.h"
 #include "xlat/bpf_attach_type.h"
 #include "xlat/bpf_attach_flags.h"
@@ -231,6 +232,11 @@ BEGIN_BPF_CMD_DECODER(BPF_MAP_LOOKUP_ELEM)
 	PRINT_FIELD_FD("{", attr, map_fd, tcp);
 	PRINT_FIELD_ADDR64(", ", attr, key);
 	PRINT_FIELD_ADDR64(", ", attr, value);
+	/* flags field was added in Linux commit v5.1-rc1~178^2~375^2~4^2~3.  */
+	if (len <= offsetof(struct BPF_MAP_LOOKUP_ELEM_struct, flags))
+		break;
+	PRINT_FIELD_FLAGS(", ", attr, flags, bpf_map_lookup_elem_flags,
+			  "BPF_???");
 }
 END_BPF_CMD_DECODER(RVAL_DECODED)
 
diff --git a/bpf_attr.h b/bpf_attr.h
index ac8c9210..6695a2fe 100644
--- a/bpf_attr.h
+++ b/bpf_attr.h
@@ -59,11 +59,12 @@ struct BPF_MAP_LOOKUP_ELEM_struct {
 	uint32_t map_fd;
 	uint64_t ATTRIBUTE_ALIGNED(8) key;
 	uint64_t ATTRIBUTE_ALIGNED(8) value;
+	uint64_t ATTRIBUTE_ALIGNED(8) flags;
 };
 
 # define BPF_MAP_LOOKUP_ELEM_struct_size \
 	sizeof(struct BPF_MAP_LOOKUP_ELEM_struct)
-# define expected_BPF_MAP_LOOKUP_ELEM_struct_size 24
+# define expected_BPF_MAP_LOOKUP_ELEM_struct_size 32
 
 struct BPF_MAP_UPDATE_ELEM_struct {
 	uint32_t map_fd;
diff --git a/tests/bpf.c b/tests/bpf.c
index 71c2f8d4..a1dad79a 100644
--- a/tests/bpf.c
+++ b/tests/bpf.c
@@ -435,10 +435,12 @@ static const struct bpf_attr_check BPF_MAP_LOOKUP_ELEM_checks[] = {
 		.data = { .BPF_MAP_LOOKUP_ELEM_data = {
 			.map_fd = -1,
 			.key = 0xdeadbeef,
-			.value = 0xbadc0ded
+			.value = 0xbadc0ded,
+			.flags = 4
 		} },
-		.size = offsetofend(struct BPF_MAP_LOOKUP_ELEM_struct, value),
+		.size = offsetofend(struct BPF_MAP_LOOKUP_ELEM_struct, flags),
 		.str = "map_fd=-1, key=0xdeadbeef, value=0xbadc0ded"
+		       ", flags=BPF_F_LOCK"
 	}
 };
 
diff --git a/xlat/bpf_map_lookup_elem_flags.in b/xlat/bpf_map_lookup_elem_flags.in
new file mode 100644
index 00000000..68c936b7
--- /dev/null
+++ b/xlat/bpf_map_lookup_elem_flags.in
@@ -0,0 +1,2 @@
+BPF_ANY 0
+BPF_F_LOCK 4
-- 
2.17.1



More information about the Strace-devel mailing list