[PATCH 3/4] bpf: support new field for BPF_PROG_ATTACH

Paul Chaignon paul.chaignon at gmail.com
Sun Feb 23 10:13:26 UTC 2020


* bpf_attr.h (BPF_PROG_ATTACH_struct): New field introduced in Linux
commit v5.6-rc1~151^2~199^2~7^2~3.
* bpf.c (BEGIN_BPF_CMD_DECODER(BPF_PROG_ATTACH)): Decode the new field.
* NEWS: Mention this.
* tests/bpf.c (BPF_PROG_ATTACH_checks): Update expected output.

Signed-off-by: Paul Chaignon <paul.chaignon at gmail.com>
---
 NEWS        | 3 ++-
 bpf.c       | 8 ++++++++
 bpf_attr.h  | 3 ++-
 tests/bpf.c | 8 +++++---
 4 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/NEWS b/NEWS
index c54b97e0..4c7ebe1c 100644
--- a/NEWS
+++ b/NEWS
@@ -2,7 +2,8 @@ Noteworthy changes in release ?.? (????-??-??)
 ==============================================
 
 * Improvements
-  * Enhanced decoding of BPF_MAP_CREATE bpf syscall command.
+  * Enhanced decoding of BPF_MAP_CREATE and BPF_PROG_ATTACH bpf syscall
+    commands.
   * Updated lists of BPF_* constants.
 
 * Bug fixes
diff --git a/bpf.c b/bpf.c
index 74d46f1b..b2335d69 100644
--- a/bpf.c
+++ b/bpf.c
@@ -389,6 +389,14 @@ BEGIN_BPF_CMD_DECODER(BPF_PROG_ATTACH)
 	PRINT_FIELD_XVAL(", ", attr, attach_type, bpf_attach_type, "BPF_???");
 	PRINT_FIELD_FLAGS(", ", attr, attach_flags, bpf_attach_flags,
 			  "BPF_F_???");
+
+	/*
+	 * The following field was introduced by Linux commit
+	 * v5.6-rc1~151^2~199^2~7^2~3.
+	 */
+	if (len <= offsetof(struct BPF_PROG_ATTACH_struct, replace_bpf_fd))
+		break;
+	PRINT_FIELD_FD(", ", attr, replace_bpf_fd, tcp);
 }
 END_BPF_CMD_DECODER(RVAL_DECODED)
 
diff --git a/bpf_attr.h b/bpf_attr.h
index b569096b..e4826ec0 100644
--- a/bpf_attr.h
+++ b/bpf_attr.h
@@ -151,11 +151,12 @@ struct BPF_PROG_ATTACH_struct {
 	uint32_t attach_bpf_fd;
 	uint32_t attach_type;
 	uint32_t attach_flags;
+	uint32_t replace_bpf_fd;
 };
 
 # define BPF_PROG_ATTACH_struct_size \
 	sizeof(struct BPF_PROG_ATTACH_struct)
-# define expected_BPF_PROG_ATTACH_struct_size 16
+# define expected_BPF_PROG_ATTACH_struct_size 20
 
 struct BPF_PROG_DETACH_struct {
 	uint32_t target_fd;
diff --git a/tests/bpf.c b/tests/bpf.c
index 2e4894a3..d9e349af 100644
--- a/tests/bpf.c
+++ b/tests/bpf.c
@@ -812,12 +812,14 @@ static const struct bpf_attr_check BPF_PROG_ATTACH_checks[] = {
 			.target_fd = -1,
 			.attach_bpf_fd = -2,
 			.attach_type = 2,
-			.attach_flags = 1
+			.attach_flags = 1,
+			.replace_bpf_fd = -1
 		} },
-		.size = offsetofend(struct BPF_PROG_ATTACH_struct, attach_flags),
+		.size = offsetofend(struct BPF_PROG_ATTACH_struct,
+				    replace_bpf_fd),
 		.str = "target_fd=-1, attach_bpf_fd=-2"
 		       ", attach_type=BPF_CGROUP_INET_SOCK_CREATE"
-		       ", attach_flags=BPF_F_ALLOW_OVERRIDE"
+		       ", attach_flags=BPF_F_ALLOW_OVERRIDE, replace_bpf_fd=-1"
 	}
 };
 
-- 
2.20.1



More information about the Strace-devel mailing list