All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH][next] bpf: Avoid thousands of -Wflex-array-members-not-at-end warnings
@ 2026-03-03  5:04 Gustavo A. R. Silva
  2026-03-04  7:30 ` Kees Cook
  0 siblings, 1 reply; 3+ messages in thread
From: Gustavo A. R. Silva @ 2026-03-03  5:04 UTC (permalink / raw)
  To: Alexei Starovoitov, Daniel Borkmann, John Fastabend,
	Andrii Nakryiko, Martin KaFai Lau, Eduard Zingerman, Song Liu,
	Yonghong Song, KP Singh, Stanislav Fomichev, Hao Luo, Jiri Olsa
  Cc: bpf, linux-kernel, Gustavo A. R. Silva, linux-hardening,
	Kees Cook

-Wflex-array-member-not-at-end was introduced in GCC-14, and we are
getting ready to enable it, globally.

struct bpf_prog_array is a flexible structure, this is a structure that
contains a flexible-array member (struct bpf_prog_array_item items[];).

We create the new struct bpf_prog_array_hdr type, and use it to replace
the object type causing trouble in struct bpf_empty_prog_array, namely
struct bpf_prog_array hdr; 

Also, once -fms-extensions is enabled, we can use transparent struct
members in struct bpf_prog_array.

Notice that the newly created type does not contain the flex-array
member `items`, which is the object causing the -Wfamnae warnings
in struct bpf_empty_prog_array.

With these changes, fix the following warnings:
    
7659 ./include/linux/bpf.h:2369:31: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]

Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org>
---
 include/linux/bpf-cgroup.h | 2 +-
 include/linux/bpf.h        | 8 ++++++--
 kernel/bpf/core.c          | 6 +++---
 3 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/include/linux/bpf-cgroup.h b/include/linux/bpf-cgroup.h
index 2f535331f926..e7d266600ac7 100644
--- a/include/linux/bpf-cgroup.h
+++ b/include/linux/bpf-cgroup.h
@@ -184,7 +184,7 @@ static inline bool cgroup_bpf_sock_enabled(struct sock *sk,
 	struct bpf_prog_array *array;
 
 	array = rcu_access_pointer(cgrp->bpf.effective[type]);
-	return array != &bpf_empty_prog_array.hdr;
+	return (void *)array != (void *)&bpf_empty_prog_array.hdr;
 }
 
 /* Wrappers for __cgroup_bpf_run_filter_skb() guarded by cgroup_bpf_enabled. */
diff --git a/include/linux/bpf.h b/include/linux/bpf.h
index 05b34a6355b0..488de065466e 100644
--- a/include/linux/bpf.h
+++ b/include/linux/bpf.h
@@ -2360,13 +2360,17 @@ struct bpf_prog_array_item {
 	};
 };
 
-struct bpf_prog_array {
+struct bpf_prog_array_hdr {
 	struct rcu_head rcu;
+};
+
+struct bpf_prog_array {
+	struct bpf_prog_array_hdr;
 	struct bpf_prog_array_item items[];
 };
 
 struct bpf_empty_prog_array {
-	struct bpf_prog_array hdr;
+	struct bpf_prog_array_hdr hdr;
 	struct bpf_prog *null_prog;
 };
 
diff --git a/kernel/bpf/core.c b/kernel/bpf/core.c
index 229c74f3d6ae..ac15ab8b7d3c 100644
--- a/kernel/bpf/core.c
+++ b/kernel/bpf/core.c
@@ -2598,14 +2598,14 @@ struct bpf_prog_array *bpf_prog_array_alloc(u32 prog_cnt, gfp_t flags)
 	if (prog_cnt)
 		p = kzalloc_flex(*p, items, prog_cnt + 1, flags);
 	else
-		p = &bpf_empty_prog_array.hdr;
+		p = (void *)&bpf_empty_prog_array.hdr;
 
 	return p;
 }
 
 void bpf_prog_array_free(struct bpf_prog_array *progs)
 {
-	if (!progs || progs == &bpf_empty_prog_array.hdr)
+	if (!progs || (void *)progs == (void *)&bpf_empty_prog_array.hdr)
 		return;
 	kfree_rcu(progs, rcu);
 }
@@ -2626,7 +2626,7 @@ static void __bpf_prog_array_free_sleepable_cb(struct rcu_head *rcu)
 
 void bpf_prog_array_free_sleepable(struct bpf_prog_array *progs)
 {
-	if (!progs || progs == &bpf_empty_prog_array.hdr)
+	if (!progs || (void *)progs == (void *)&bpf_empty_prog_array.hdr)
 		return;
 	call_rcu_tasks_trace(&progs->rcu, __bpf_prog_array_free_sleepable_cb);
 }
-- 
2.43.0


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

end of thread, other threads:[~2026-03-24 21:51 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-03  5:04 [PATCH][next] bpf: Avoid thousands of -Wflex-array-members-not-at-end warnings Gustavo A. R. Silva
2026-03-04  7:30 ` Kees Cook
2026-03-24 21:50   ` Gustavo A. R. Silva

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.