Blame SOURCES/0049-bpf-add-support-for-btf_-fields-in-struct-bpf_map_in.patch

b484ca
From 27bd13d3664a6047e9431e01bd13fc04cc5e373b Mon Sep 17 00:00:00 2001
b484ca
From: "Dmitry V. Levin" <ldv@altlinux.org>
b484ca
Date: Tue, 12 Mar 2019 11:17:20 +0000
b484ca
Subject: [PATCH] bpf: add support for btf_* fields in struct bpf_map_info
b484ca
b484ca
* bpf_attr.h (struct bpf_map_info_struct): Add btf_fd, btf_key_type_id,
b484ca
and btf_value_type_id fields.
b484ca
* bpf.c (print_bpf_map_info): Decode btf_fd, btf_key_type_id,
b484ca
and btf_value_type_id fields introduced by Linux commits
b484ca
v4.18-rc1~114^2~223^2~21^2~4 and v4.18-rc1~114^2~148^2~7^2~2.
b484ca
* tests/bpf-obj_get_info_by_fd.c (main): Update expected output.
b484ca
---
b484ca
 bpf.c                          | 10 ++++++++++
b484ca
 bpf_attr.h                     |  7 +++++--
b484ca
 tests/bpf-obj_get_info_by_fd.c |  9 +++++++++
b484ca
 3 files changed, 24 insertions(+), 2 deletions(-)
b484ca
b484ca
Index: strace-4.24/bpf.c
b484ca
===================================================================
b484ca
--- strace-4.24.orig/bpf.c	2020-01-28 00:15:26.973756792 +0100
b484ca
+++ strace-4.24/bpf.c	2020-01-28 00:15:59.919446522 +0100
b484ca
@@ -466,6 +466,16 @@
b484ca
 	PRINT_FIELD_DEV(", ", info, netns_dev);
b484ca
 	PRINT_FIELD_U(", ", info, netns_ino);
b484ca
 
b484ca
+	/*
b484ca
+	 * The next three fields were introduced by Linux commits
b484ca
+	 * v4.18-rc1~114^2~223^2~21^2~4 and v4.18-rc1~114^2~148^2~7^2~2.
b484ca
+	 */
b484ca
+	if (len <= offsetof(struct bpf_map_info_struct, btf_id))
b484ca
+		goto print_bpf_map_info_end;
b484ca
+	PRINT_FIELD_U(", ", info, btf_id);
b484ca
+	PRINT_FIELD_U(", ", info, btf_key_type_id);
b484ca
+	PRINT_FIELD_U(", ", info, btf_value_type_id);
b484ca
+
b484ca
 	decode_attr_extra_data(tcp, info_buf, size, bpf_map_info_struct_size);
b484ca
 
b484ca
 print_bpf_map_info_end:
b484ca
Index: strace-4.24/bpf_attr.h
b484ca
===================================================================
b484ca
--- strace-4.24.orig/bpf_attr.h	2020-01-28 00:15:26.974756783 +0100
b484ca
+++ strace-4.24/bpf_attr.h	2020-01-28 00:15:59.919446522 +0100
b484ca
@@ -242,11 +242,14 @@
b484ca
 	 */
b484ca
 	uint64_t ATTRIBUTE_ALIGNED(8) netns_dev; /* skip check */
b484ca
 	uint64_t ATTRIBUTE_ALIGNED(8) netns_ino; /* skip check */
b484ca
+	uint32_t btf_id;
b484ca
+	uint32_t btf_key_type_id;
b484ca
+	uint32_t btf_value_type_id;
b484ca
 };
b484ca
 
b484ca
 # define bpf_map_info_struct_size \
b484ca
-	sizeof(struct bpf_map_info_struct)
b484ca
-# define expected_bpf_map_info_struct_size 64
b484ca
+	offsetofend(struct bpf_map_info_struct, btf_value_type_id)
b484ca
+# define expected_bpf_map_info_struct_size 76
b484ca
 
b484ca
 struct bpf_prog_info_struct {
b484ca
 	uint32_t type;
b484ca
Index: strace-4.24/tests/bpf-obj_get_info_by_fd.c
b484ca
===================================================================
b484ca
--- strace-4.24.orig/tests/bpf-obj_get_info_by_fd.c	2020-01-28 00:15:26.974756783 +0100
b484ca
+++ strace-4.24/tests/bpf-obj_get_info_by_fd.c	2020-01-28 00:15:59.920446513 +0100
b484ca
@@ -324,6 +324,15 @@
b484ca
 	if (bpf_map_get_info_attr.info_len >
b484ca
 	    offsetof(struct bpf_map_info_struct, netns_ino))
b484ca
 		printf(", netns_ino=%" PRIu64, map_info->netns_ino);
b484ca
+	if (bpf_map_get_info_attr.info_len >
b484ca
+	    offsetof(struct bpf_map_info_struct, btf_id))
b484ca
+		PRINT_FIELD_U(", ", *map_info, btf_id);
b484ca
+	if (bpf_map_get_info_attr.info_len >
b484ca
+	    offsetof(struct bpf_map_info_struct, btf_key_type_id))
b484ca
+		PRINT_FIELD_U(", ", *map_info, btf_key_type_id);
b484ca
+	if (bpf_map_get_info_attr.info_len >
b484ca
+	    offsetof(struct bpf_map_info_struct, btf_value_type_id))
b484ca
+		PRINT_FIELD_U(", ", *map_info, btf_value_type_id);
b484ca
 	printf("}");
b484ca
 #else /* !VERBOSE */
b484ca
 	printf("%p", map_info);
b484ca
Index: strace-4.24/tests-m32/bpf-obj_get_info_by_fd.c
b484ca
===================================================================
b484ca
--- strace-4.24.orig/tests-m32/bpf-obj_get_info_by_fd.c	2020-01-28 00:15:51.739523557 +0100
b484ca
+++ strace-4.24/tests-m32/bpf-obj_get_info_by_fd.c	2020-01-28 00:16:14.855305862 +0100
b484ca
@@ -324,6 +324,15 @@
b484ca
 	if (bpf_map_get_info_attr.info_len >
b484ca
 	    offsetof(struct bpf_map_info_struct, netns_ino))
b484ca
 		printf(", netns_ino=%" PRIu64, map_info->netns_ino);
b484ca
+	if (bpf_map_get_info_attr.info_len >
b484ca
+	    offsetof(struct bpf_map_info_struct, btf_id))
b484ca
+		PRINT_FIELD_U(", ", *map_info, btf_id);
b484ca
+	if (bpf_map_get_info_attr.info_len >
b484ca
+	    offsetof(struct bpf_map_info_struct, btf_key_type_id))
b484ca
+		PRINT_FIELD_U(", ", *map_info, btf_key_type_id);
b484ca
+	if (bpf_map_get_info_attr.info_len >
b484ca
+	    offsetof(struct bpf_map_info_struct, btf_value_type_id))
b484ca
+		PRINT_FIELD_U(", ", *map_info, btf_value_type_id);
b484ca
 	printf("}");
b484ca
 #else /* !VERBOSE */
b484ca
 	printf("%p", map_info);
b484ca
Index: strace-4.24/tests-mx32/bpf-obj_get_info_by_fd.c
b484ca
===================================================================
b484ca
--- strace-4.24.orig/tests-mx32/bpf-obj_get_info_by_fd.c	2020-01-28 00:15:55.110491811 +0100
b484ca
+++ strace-4.24/tests-mx32/bpf-obj_get_info_by_fd.c	2020-01-28 00:16:23.096228252 +0100
b484ca
@@ -324,6 +324,15 @@
b484ca
 	if (bpf_map_get_info_attr.info_len >
b484ca
 	    offsetof(struct bpf_map_info_struct, netns_ino))
b484ca
 		printf(", netns_ino=%" PRIu64, map_info->netns_ino);
b484ca
+	if (bpf_map_get_info_attr.info_len >
b484ca
+	    offsetof(struct bpf_map_info_struct, btf_id))
b484ca
+		PRINT_FIELD_U(", ", *map_info, btf_id);
b484ca
+	if (bpf_map_get_info_attr.info_len >
b484ca
+	    offsetof(struct bpf_map_info_struct, btf_key_type_id))
b484ca
+		PRINT_FIELD_U(", ", *map_info, btf_key_type_id);
b484ca
+	if (bpf_map_get_info_attr.info_len >
b484ca
+	    offsetof(struct bpf_map_info_struct, btf_value_type_id))
b484ca
+		PRINT_FIELD_U(", ", *map_info, btf_value_type_id);
b484ca
 	printf("}");
b484ca
 #else /* !VERBOSE */
b484ca
 	printf("%p", map_info);