From: "Gustavo A. R. Silva" <gustavoars@kernel.org>
To: Takashi Sakamoto <o-takashi@sakamocchi.jp>,
Clemens Ladisch <clemens@ladisch.de>,
Jaroslav Kysela <perex@perex.cz>, Takashi Iwai <tiwai@suse.com>
Cc: Kees Cook <keescook@chromium.org>,
linux-kernel@vger.kernel.org,
"Gustavo A. R. Silva" <gustavoars@kernel.org>,
linux-hardening@vger.kernel.org, alsa-devel@alsa-project.org,
linux-sound@vger.kernel.org,
linux1394-devel@lists.sourceforge.net
Subject: [PATCH 2/2][next] ALSA: firewire-lib: Avoid -Wflex-array-member-not-at-end warning
Date: Tue, 5 Mar 2024 11:25:32 -0600 [thread overview]
Message-ID: <d3a764eb76909b16b8a22d9ff530e5edf0e59e6b.1709658886.git.gustavoars@kernel.org> (raw)
In-Reply-To: <cover.1709658886.git.gustavoars@kernel.org>
-Wflex-array-member-not-at-end is coming in GCC-14, and we are getting
ready to enable it globally.
There is currently a local structure `template` that is using a flexible
`struct fw_iso_packet` as a header for an on-stack array
`__be32 header[CIP_HEADER_QUADLETS];`.
struct {
struct fw_iso_packet params;
__be32 header[CIP_HEADER_QUADLETS];
} template = { {0}, {0} };
However, we are deprecating flexible arrays in the middle of another
struct. So, in order to avoid this, we use the `struct_group_tagged()`
helper to separate the flexible array from the rest of the members in
the flexible structure:
struct fw_iso_packet {
struct_group_tagged(fw_iso_packet_hdr, hdr,
... the rest of the members
);
u32 header[]; /* tx: Top of 1394 isoch. data_block */
};
With the change described above, we can now declare an object of the
type of the tagged struct, without embedding the flexible array in the
middle of another struct:
struct {
struct fw_iso_packet_hdr params;
__be32 header[CIP_HEADER_QUADLETS];
} template = { {0}, {0} };
We also use `container_of()` whenever we need to retrieve a pointer to
the flexible structure.
So, with these changes, fix the following warning:
sound/firewire/amdtp-stream.c: In function ‘process_rx_packets’:
sound/firewire/amdtp-stream.c:1184:46: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]
1184 | struct fw_iso_packet params;
|
Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org>
---
sound/firewire/amdtp-stream.c | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/sound/firewire/amdtp-stream.c b/sound/firewire/amdtp-stream.c
index c9f153f85ae6..7ba1cd64d7f1 100644
--- a/sound/firewire/amdtp-stream.c
+++ b/sound/firewire/amdtp-stream.c
@@ -1181,12 +1181,14 @@ static void process_rx_packets(struct fw_iso_context *context, u32 tstamp, size_
for (i = 0; i < packets; ++i) {
struct {
- struct fw_iso_packet params;
+ struct fw_iso_packet_hdr params;
__be32 header[CIP_HEADER_QUADLETS];
} template = { {0}, {0} };
+ struct fw_iso_packet *params =
+ container_of(&template.params, struct fw_iso_packet, hdr);
bool sched_irq = false;
- build_it_pkt_header(s, desc->cycle, &template.params, pkt_header_length,
+ build_it_pkt_header(s, desc->cycle, params, pkt_header_length,
desc->data_blocks, desc->data_block_counter,
desc->syt, i, curr_cycle_time);
@@ -1198,7 +1200,7 @@ static void process_rx_packets(struct fw_iso_context *context, u32 tstamp, size_
}
}
- if (queue_out_packet(s, &template.params, sched_irq) < 0) {
+ if (queue_out_packet(s, params, sched_irq) < 0) {
cancel_stream(s);
return;
}
--
2.34.1
next prev parent reply other threads:[~2024-03-05 17:25 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-03-05 17:24 [PATCH 0/2][next] firewire: Avoid -Wflex-array-member-not-at-end warnings Gustavo A. R. Silva
2024-03-05 17:24 ` [PATCH 1/2][next] firewire: Avoid -Wflex-array-member-not-at-end warning Gustavo A. R. Silva
2024-03-05 17:25 ` Gustavo A. R. Silva [this message]
2024-03-06 1:10 ` [PATCH 0/2][next] firewire: Avoid -Wflex-array-member-not-at-end warnings Takashi Sakamoto
2024-03-06 16:18 ` Gustavo A. R. Silva
2024-04-29 18:30 ` Kees Cook
2024-04-29 18:42 ` Gustavo A. R. Silva
2024-04-29 19:50 ` Kees Cook
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=d3a764eb76909b16b8a22d9ff530e5edf0e59e6b.1709658886.git.gustavoars@kernel.org \
--to=gustavoars@kernel.org \
--cc=alsa-devel@alsa-project.org \
--cc=clemens@ladisch.de \
--cc=keescook@chromium.org \
--cc=linux-hardening@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-sound@vger.kernel.org \
--cc=linux1394-devel@lists.sourceforge.net \
--cc=o-takashi@sakamocchi.jp \
--cc=perex@perex.cz \
--cc=tiwai@suse.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).