* [PATCH][next] Bluetooth: hci.h: Avoid a couple -Wflex-array-member-not-at-end warnings
@ 2026-02-24 6:31 Gustavo A. R. Silva
2026-04-07 19:57 ` Gustavo A. R. Silva
0 siblings, 1 reply; 3+ messages in thread
From: Gustavo A. R. Silva @ 2026-02-24 6:31 UTC (permalink / raw)
To: Marcel Holtmann, Johan Hedberg, Luiz Augusto von Dentz,
David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Simon Horman
Cc: linux-bluetooth, netdev, linux-kernel, Gustavo A. R. Silva,
linux-hardening
-Wflex-array-member-not-at-end was introduced in GCC-14, and we are
getting ready to enable it, globally.
struct hci_std_codecs and struct hci_std_codecs_v2 are flexible
structures, this is structures that contain a flexible-array member
(__u8 codec[]; and struct hci_std_codec_v2 codec[];, correspondingly.)
Since struct hci_rp_read_local_supported_codecs and struct
hci_rp_read_local_supported_codecs_v2 are defined by hardware, we
create the new struct hci_std_codecs_hdr and struct hci_std_codecs_v2_hdr
types, and use them to replace the object types causing trouble in
struct hci_rp_read_local_supported_codecs and struct
hci_rp_read_local_supported_codecs_v2, namely struct hci_std_codecs
std_codecs; and struct hci_std_codecs_v2_hdr std_codecs;.
Also, once -fms-extensions is enabled, we can use transparent struct
members in both struct hci_std_codecs and struct hci_std_codecs_v2_hdr.
Notice that the newly created types does not contain the flex-array
member `codec`, which is the object causing the -Wfamnae warnings.
After these changes, the size of struct hci_rp_read_local_supported_codecs
and struct hci_rp_read_local_supported_codecs_v2, along with their
member's offsets remain the same, hence the memory layouts don't
change:
Before changes:
struct hci_rp_read_local_supported_codecs {
__u8 status; /* 0 1 */
struct hci_std_codecs std_codecs; /* 1 1 */
struct hci_vnd_codecs vnd_codecs; /* 2 1 */
/* size: 3, cachelines: 1, members: 3 */
/* last cacheline: 3 bytes */
} __attribute__((__packed__));
struct hci_rp_read_local_supported_codecs_v2 {
__u8 status; /* 0 1 */
struct hci_std_codecs_v2 std_codecs; /* 1 1 */
struct hci_vnd_codecs_v2 vendor_codecs; /* 2 1 */
/* size: 3, cachelines: 1, members: 3 */
/* last cacheline: 3 bytes */
} __attribute__((__packed__));
After changes:
struct hci_rp_read_local_supported_codecs {
__u8 status; /* 0 1 */
struct hci_std_codecs_hdr std_codecs; /* 1 1 */
struct hci_vnd_codecs vnd_codecs; /* 2 1 */
/* size: 3, cachelines: 1, members: 3 */
/* last cacheline: 3 bytes */
} __attribute__((__packed__));
struct hci_rp_read_local_supported_codecs_v2 {
__u8 status; /* 0 1 */
struct hci_std_codecs_v2_hdr std_codecs; /* 1 1 */
struct hci_vnd_codecs_v2 vendor_codecs; /* 2 1 */
/* size: 3, cachelines: 1, members: 3 */
/* last cacheline: 3 bytes */
} __attribute__((__packed__));
With these changes fix the following warnings:
include/net/bluetooth/hci.h:1490:31: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]
include/net/bluetooth/hci.h:1525:34: 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/net/bluetooth/hci.h | 16 ++++++++++++----
1 file changed, 12 insertions(+), 4 deletions(-)
diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h
index 89ad9470fa71..572b1c620c5d 100644
--- a/include/net/bluetooth/hci.h
+++ b/include/net/bluetooth/hci.h
@@ -1468,8 +1468,12 @@ struct hci_rp_read_data_block_size {
} __packed;
#define HCI_OP_READ_LOCAL_CODECS 0x100b
-struct hci_std_codecs {
+struct hci_std_codecs_hdr {
__u8 num;
+} __packed;
+
+struct hci_std_codecs {
+ struct hci_std_codecs_hdr;
__u8 codec[];
} __packed;
@@ -1487,7 +1491,7 @@ struct hci_vnd_codecs {
struct hci_rp_read_local_supported_codecs {
__u8 status;
- struct hci_std_codecs std_codecs;
+ struct hci_std_codecs_hdr std_codecs;
struct hci_vnd_codecs vnd_codecs;
} __packed;
@@ -1504,8 +1508,12 @@ struct hci_std_codec_v2 {
__u8 transport;
} __packed;
-struct hci_std_codecs_v2 {
+struct hci_std_codecs_v2_hdr {
__u8 num;
+} __packed;
+
+struct hci_std_codecs_v2 {
+ struct hci_std_codecs_v2_hdr;
struct hci_std_codec_v2 codec[];
} __packed;
@@ -1522,7 +1530,7 @@ struct hci_vnd_codecs_v2 {
struct hci_rp_read_local_supported_codecs_v2 {
__u8 status;
- struct hci_std_codecs_v2 std_codecs;
+ struct hci_std_codecs_v2_hdr std_codecs;
struct hci_vnd_codecs_v2 vendor_codecs;
} __packed;
--
2.43.0
^ permalink raw reply related [flat|nested] 3+ messages in thread* Re: [PATCH][next] Bluetooth: hci.h: Avoid a couple -Wflex-array-member-not-at-end warnings
2026-02-24 6:31 [PATCH][next] Bluetooth: hci.h: Avoid a couple -Wflex-array-member-not-at-end warnings Gustavo A. R. Silva
@ 2026-04-07 19:57 ` Gustavo A. R. Silva
2026-04-07 20:06 ` Luiz Augusto von Dentz
0 siblings, 1 reply; 3+ messages in thread
From: Gustavo A. R. Silva @ 2026-04-07 19:57 UTC (permalink / raw)
To: Gustavo A. R. Silva, Marcel Holtmann, Johan Hedberg,
Luiz Augusto von Dentz, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Simon Horman
Cc: linux-bluetooth, netdev, linux-kernel, linux-hardening
Hi all,
Friendly ping: who can take this, please?
Thanks
-Gustavo
On 2/24/26 00:31, Gustavo A. R. Silva wrote:
> -Wflex-array-member-not-at-end was introduced in GCC-14, and we are
> getting ready to enable it, globally.
>
> struct hci_std_codecs and struct hci_std_codecs_v2 are flexible
> structures, this is structures that contain a flexible-array member
> (__u8 codec[]; and struct hci_std_codec_v2 codec[];, correspondingly.)
>
> Since struct hci_rp_read_local_supported_codecs and struct
> hci_rp_read_local_supported_codecs_v2 are defined by hardware, we
> create the new struct hci_std_codecs_hdr and struct hci_std_codecs_v2_hdr
> types, and use them to replace the object types causing trouble in
> struct hci_rp_read_local_supported_codecs and struct
> hci_rp_read_local_supported_codecs_v2, namely struct hci_std_codecs
> std_codecs; and struct hci_std_codecs_v2_hdr std_codecs;.
>
> Also, once -fms-extensions is enabled, we can use transparent struct
> members in both struct hci_std_codecs and struct hci_std_codecs_v2_hdr.
>
> Notice that the newly created types does not contain the flex-array
> member `codec`, which is the object causing the -Wfamnae warnings.
>
> After these changes, the size of struct hci_rp_read_local_supported_codecs
> and struct hci_rp_read_local_supported_codecs_v2, along with their
> member's offsets remain the same, hence the memory layouts don't
> change:
>
> Before changes:
> struct hci_rp_read_local_supported_codecs {
> __u8 status; /* 0 1 */
> struct hci_std_codecs std_codecs; /* 1 1 */
> struct hci_vnd_codecs vnd_codecs; /* 2 1 */
>
> /* size: 3, cachelines: 1, members: 3 */
> /* last cacheline: 3 bytes */
> } __attribute__((__packed__));
>
> struct hci_rp_read_local_supported_codecs_v2 {
> __u8 status; /* 0 1 */
> struct hci_std_codecs_v2 std_codecs; /* 1 1 */
> struct hci_vnd_codecs_v2 vendor_codecs; /* 2 1 */
>
> /* size: 3, cachelines: 1, members: 3 */
> /* last cacheline: 3 bytes */
> } __attribute__((__packed__));
>
> After changes:
> struct hci_rp_read_local_supported_codecs {
> __u8 status; /* 0 1 */
> struct hci_std_codecs_hdr std_codecs; /* 1 1 */
> struct hci_vnd_codecs vnd_codecs; /* 2 1 */
>
> /* size: 3, cachelines: 1, members: 3 */
> /* last cacheline: 3 bytes */
> } __attribute__((__packed__));
>
> struct hci_rp_read_local_supported_codecs_v2 {
> __u8 status; /* 0 1 */
> struct hci_std_codecs_v2_hdr std_codecs; /* 1 1 */
> struct hci_vnd_codecs_v2 vendor_codecs; /* 2 1 */
>
> /* size: 3, cachelines: 1, members: 3 */
> /* last cacheline: 3 bytes */
> } __attribute__((__packed__));
>
> With these changes fix the following warnings:
>
> include/net/bluetooth/hci.h:1490:31: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]
> include/net/bluetooth/hci.h:1525:34: 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/net/bluetooth/hci.h | 16 ++++++++++++----
> 1 file changed, 12 insertions(+), 4 deletions(-)
>
> diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h
> index 89ad9470fa71..572b1c620c5d 100644
> --- a/include/net/bluetooth/hci.h
> +++ b/include/net/bluetooth/hci.h
> @@ -1468,8 +1468,12 @@ struct hci_rp_read_data_block_size {
> } __packed;
>
> #define HCI_OP_READ_LOCAL_CODECS 0x100b
> -struct hci_std_codecs {
> +struct hci_std_codecs_hdr {
> __u8 num;
> +} __packed;
> +
> +struct hci_std_codecs {
> + struct hci_std_codecs_hdr;
> __u8 codec[];
> } __packed;
>
> @@ -1487,7 +1491,7 @@ struct hci_vnd_codecs {
>
> struct hci_rp_read_local_supported_codecs {
> __u8 status;
> - struct hci_std_codecs std_codecs;
> + struct hci_std_codecs_hdr std_codecs;
> struct hci_vnd_codecs vnd_codecs;
> } __packed;
>
> @@ -1504,8 +1508,12 @@ struct hci_std_codec_v2 {
> __u8 transport;
> } __packed;
>
> -struct hci_std_codecs_v2 {
> +struct hci_std_codecs_v2_hdr {
> __u8 num;
> +} __packed;
> +
> +struct hci_std_codecs_v2 {
> + struct hci_std_codecs_v2_hdr;
> struct hci_std_codec_v2 codec[];
> } __packed;
>
> @@ -1522,7 +1530,7 @@ struct hci_vnd_codecs_v2 {
>
> struct hci_rp_read_local_supported_codecs_v2 {
> __u8 status;
> - struct hci_std_codecs_v2 std_codecs;
> + struct hci_std_codecs_v2_hdr std_codecs;
> struct hci_vnd_codecs_v2 vendor_codecs;
> } __packed;
>
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [PATCH][next] Bluetooth: hci.h: Avoid a couple -Wflex-array-member-not-at-end warnings
2026-04-07 19:57 ` Gustavo A. R. Silva
@ 2026-04-07 20:06 ` Luiz Augusto von Dentz
0 siblings, 0 replies; 3+ messages in thread
From: Luiz Augusto von Dentz @ 2026-04-07 20:06 UTC (permalink / raw)
To: Gustavo A. R. Silva
Cc: Gustavo A. R. Silva, Marcel Holtmann, Johan Hedberg,
David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Simon Horman, linux-bluetooth, netdev, linux-kernel,
linux-hardening
Hi Gustavo,
On Tue, Apr 7, 2026 at 3:58 PM Gustavo A. R. Silva
<gustavo@embeddedor.com> wrote:
>
> Hi all,
>
> Friendly ping: who can take this, please?
Just resend as this is no longer available via patchwork.
> Thanks
> -Gustavo
>
> On 2/24/26 00:31, Gustavo A. R. Silva wrote:
> > -Wflex-array-member-not-at-end was introduced in GCC-14, and we are
> > getting ready to enable it, globally.
> >
> > struct hci_std_codecs and struct hci_std_codecs_v2 are flexible
> > structures, this is structures that contain a flexible-array member
> > (__u8 codec[]; and struct hci_std_codec_v2 codec[];, correspondingly.)
> >
> > Since struct hci_rp_read_local_supported_codecs and struct
> > hci_rp_read_local_supported_codecs_v2 are defined by hardware, we
> > create the new struct hci_std_codecs_hdr and struct hci_std_codecs_v2_hdr
> > types, and use them to replace the object types causing trouble in
> > struct hci_rp_read_local_supported_codecs and struct
> > hci_rp_read_local_supported_codecs_v2, namely struct hci_std_codecs
> > std_codecs; and struct hci_std_codecs_v2_hdr std_codecs;.
> >
> > Also, once -fms-extensions is enabled, we can use transparent struct
> > members in both struct hci_std_codecs and struct hci_std_codecs_v2_hdr.
> >
> > Notice that the newly created types does not contain the flex-array
> > member `codec`, which is the object causing the -Wfamnae warnings.
> >
> > After these changes, the size of struct hci_rp_read_local_supported_codecs
> > and struct hci_rp_read_local_supported_codecs_v2, along with their
> > member's offsets remain the same, hence the memory layouts don't
> > change:
> >
> > Before changes:
> > struct hci_rp_read_local_supported_codecs {
> > __u8 status; /* 0 1 */
> > struct hci_std_codecs std_codecs; /* 1 1 */
> > struct hci_vnd_codecs vnd_codecs; /* 2 1 */
> >
> > /* size: 3, cachelines: 1, members: 3 */
> > /* last cacheline: 3 bytes */
> > } __attribute__((__packed__));
> >
> > struct hci_rp_read_local_supported_codecs_v2 {
> > __u8 status; /* 0 1 */
> > struct hci_std_codecs_v2 std_codecs; /* 1 1 */
> > struct hci_vnd_codecs_v2 vendor_codecs; /* 2 1 */
> >
> > /* size: 3, cachelines: 1, members: 3 */
> > /* last cacheline: 3 bytes */
> > } __attribute__((__packed__));
> >
> > After changes:
> > struct hci_rp_read_local_supported_codecs {
> > __u8 status; /* 0 1 */
> > struct hci_std_codecs_hdr std_codecs; /* 1 1 */
> > struct hci_vnd_codecs vnd_codecs; /* 2 1 */
> >
> > /* size: 3, cachelines: 1, members: 3 */
> > /* last cacheline: 3 bytes */
> > } __attribute__((__packed__));
> >
> > struct hci_rp_read_local_supported_codecs_v2 {
> > __u8 status; /* 0 1 */
> > struct hci_std_codecs_v2_hdr std_codecs; /* 1 1 */
> > struct hci_vnd_codecs_v2 vendor_codecs; /* 2 1 */
> >
> > /* size: 3, cachelines: 1, members: 3 */
> > /* last cacheline: 3 bytes */
> > } __attribute__((__packed__));
> >
> > With these changes fix the following warnings:
> >
> > include/net/bluetooth/hci.h:1490:31: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]
> > include/net/bluetooth/hci.h:1525:34: 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/net/bluetooth/hci.h | 16 ++++++++++++----
> > 1 file changed, 12 insertions(+), 4 deletions(-)
> >
> > diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h
> > index 89ad9470fa71..572b1c620c5d 100644
> > --- a/include/net/bluetooth/hci.h
> > +++ b/include/net/bluetooth/hci.h
> > @@ -1468,8 +1468,12 @@ struct hci_rp_read_data_block_size {
> > } __packed;
> >
> > #define HCI_OP_READ_LOCAL_CODECS 0x100b
> > -struct hci_std_codecs {
> > +struct hci_std_codecs_hdr {
> > __u8 num;
> > +} __packed;
> > +
> > +struct hci_std_codecs {
> > + struct hci_std_codecs_hdr;
> > __u8 codec[];
> > } __packed;
> >
> > @@ -1487,7 +1491,7 @@ struct hci_vnd_codecs {
> >
> > struct hci_rp_read_local_supported_codecs {
> > __u8 status;
> > - struct hci_std_codecs std_codecs;
> > + struct hci_std_codecs_hdr std_codecs;
> > struct hci_vnd_codecs vnd_codecs;
> > } __packed;
> >
> > @@ -1504,8 +1508,12 @@ struct hci_std_codec_v2 {
> > __u8 transport;
> > } __packed;
> >
> > -struct hci_std_codecs_v2 {
> > +struct hci_std_codecs_v2_hdr {
> > __u8 num;
> > +} __packed;
> > +
> > +struct hci_std_codecs_v2 {
> > + struct hci_std_codecs_v2_hdr;
> > struct hci_std_codec_v2 codec[];
> > } __packed;
> >
> > @@ -1522,7 +1530,7 @@ struct hci_vnd_codecs_v2 {
> >
> > struct hci_rp_read_local_supported_codecs_v2 {
> > __u8 status;
> > - struct hci_std_codecs_v2 std_codecs;
> > + struct hci_std_codecs_v2_hdr std_codecs;
> > struct hci_vnd_codecs_v2 vendor_codecs;
> > } __packed;
> >
>
--
Luiz Augusto von Dentz
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-04-07 20:07 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-02-24 6:31 [PATCH][next] Bluetooth: hci.h: Avoid a couple -Wflex-array-member-not-at-end warnings Gustavo A. R. Silva
2026-04-07 19:57 ` Gustavo A. R. Silva
2026-04-07 20:06 ` Luiz Augusto von Dentz
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox