All of lore.kernel.org
 help / color / mirror / Atom feed
* [LTP] [PATCH] syscalls/bpf: zero-initialize bpf_attr including padding bits
@ 2025-02-06 12:56 Jan Stancek
  2025-02-06 13:36 ` Cyril Hrubis
  2025-02-06 14:08 ` Cyril Hrubis
  0 siblings, 2 replies; 8+ messages in thread
From: Jan Stancek @ 2025-02-06 12:56 UTC (permalink / raw)
  To: ltp

gcc 15 stopped zero-initializing padding bits:
  https://gcc.gnu.org/gcc-15/changes.html

However kernel bpf syscall checks that all unused fields for a command
are set to zero in CHECK_ATTR() macro, which causes tests to fail with
EINVAL.

Signed-off-by: Jan Stancek <jstancek@redhat.com>
---
 testcases/kernel/syscalls/bpf/bpf_common.c | 32 ++++++++++++----------
 1 file changed, 18 insertions(+), 14 deletions(-)

diff --git a/testcases/kernel/syscalls/bpf/bpf_common.c b/testcases/kernel/syscalls/bpf/bpf_common.c
index 95b5bc12eaa4..d765c4e32936 100644
--- a/testcases/kernel/syscalls/bpf/bpf_common.c
+++ b/testcases/kernel/syscalls/bpf/bpf_common.c
@@ -49,13 +49,14 @@ int bpf_map_create(union bpf_attr *const attr)
 
 int bpf_map_array_create(const uint32_t max_entries)
 {
-	union bpf_attr map_attr = {
-		.map_type = BPF_MAP_TYPE_ARRAY,
-		.key_size = 4,
-		.value_size = 8,
-		.max_entries = max_entries,
-		.map_flags = 0
-	};
+	/* zero-initialize entire struct including padding bits */
+	union bpf_attr map_attr = {};
+
+	map_attr.map_type = BPF_MAP_TYPE_ARRAY;
+	map_attr.key_size = 4;
+	map_attr.value_size = 8;
+	map_attr.max_entries = max_entries;
+	map_attr.map_flags = 0;
 
 	return bpf_map_create(&map_attr);
 }
@@ -64,13 +65,16 @@ void bpf_map_array_get(const int map_fd,
 		       const uint32_t *const array_indx,
 		       uint64_t *const array_val)
 {
-	union bpf_attr elem_attr = {
-		.map_fd = map_fd,
-		.key = ptr_to_u64(array_indx),
-		.value = ptr_to_u64(array_val),
-		.flags = 0
-	};
-	const int ret = bpf(BPF_MAP_LOOKUP_ELEM, &elem_attr, sizeof(elem_attr));
+	/* zero-initialize entire struct including padding bits */
+	union bpf_attr elem_attr = {};
+	int ret;
+
+	elem_attr.map_fd = map_fd;
+	elem_attr.key = ptr_to_u64(array_indx);
+	elem_attr.value = ptr_to_u64(array_val);
+	elem_attr.flags = 0;
+
+	ret = bpf(BPF_MAP_LOOKUP_ELEM, &elem_attr, sizeof(elem_attr));
 
 	if (ret) {
 		tst_brk(TBROK | TTERRNO,
-- 
2.43.0


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply related	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2025-02-07  9:48 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-02-06 12:56 [LTP] [PATCH] syscalls/bpf: zero-initialize bpf_attr including padding bits Jan Stancek
2025-02-06 13:36 ` Cyril Hrubis
2025-02-06 14:08 ` Cyril Hrubis
2025-02-06 14:34   ` Jan Stancek
2025-02-06 15:04     ` Cyril Hrubis
2025-02-06 21:23   ` [LTP] [PATCH v2] " Jan Stancek
2025-02-07  8:35     ` Cyril Hrubis
2025-02-07  9:47       ` Jan Stancek

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.