From patchwork Tue Mar 5 17:24:55 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: "Gustavo A. R. Silva" X-Patchwork-Id: 778060 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from alsa0.perex.cz (alsa0.perex.cz [77.48.224.243]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id A651FC54798 for ; Tue, 5 Mar 2024 17:25:53 +0000 (UTC) Received: from alsa1.perex.cz (alsa1.perex.cz [207.180.221.201]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by alsa0.perex.cz (Postfix) with ESMTPS id A90B383E; Tue, 5 Mar 2024 18:25:41 +0100 (CET) DKIM-Filter: OpenDKIM Filter v2.11.0 alsa0.perex.cz A90B383E DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=alsa-project.org; s=default; t=1709659551; bh=0lwIjheUVVinIAmrLyBNdgK66HWaAqekBzSfCyt9IXA=; h=Date:From:To:Cc:Subject:References:In-Reply-To:List-Id: List-Archive:List-Help:List-Owner:List-Post:List-Subscribe: List-Unsubscribe:From; b=Rjb+Oao0iM1xXktmUio2hYBUUY/Gk/znnZXFdC8IOpU5dAVHfFMMv+aLu99wpkY0D iu6NiFUWNzre2jYmes11TuRFyd2WDWbtgwcRDylpFy4r6k7NDkG4xuaxV1KoPQZRJb J1t3uzq+WDeRQYdGtCCCqm9o88iBb9v4LTmnTGig= Received: by alsa1.perex.cz (Postfix, from userid 50401) id ACC71F80571; Tue, 5 Mar 2024 18:25:20 +0100 (CET) Received: from mailman-core.alsa-project.org (mailman-core.alsa-project.org [10.254.200.10]) by alsa1.perex.cz (Postfix) with ESMTP id 5AF25F80571; Tue, 5 Mar 2024 18:25:20 +0100 (CET) Received: by alsa1.perex.cz (Postfix, from userid 50401) id C2E7EF801F5; Tue, 5 Mar 2024 18:25:14 +0100 (CET) Received: from sin.source.kernel.org (sin.source.kernel.org [145.40.73.55]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by alsa1.perex.cz (Postfix) with ESMTPS id D04D7F802E8 for ; Tue, 5 Mar 2024 18:25:01 +0100 (CET) DKIM-Filter: OpenDKIM Filter v2.11.0 alsa1.perex.cz D04D7F802E8 Authentication-Results: alsa1.perex.cz; dkim=pass (2048-bit key, unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256 header.s=k20201202 header.b=Z903NSju Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sin.source.kernel.org (Postfix) with ESMTP id E6DBACE1AE7; Tue, 5 Mar 2024 17:24:58 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 427CCC433F1; Tue, 5 Mar 2024 17:24:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1709659498; bh=0lwIjheUVVinIAmrLyBNdgK66HWaAqekBzSfCyt9IXA=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=Z903NSjuRS54CjitvIUAHCtyiTeYD9kpF16xaR6iCL0pBoY7G2j1sdFwYrxw9llc3 vAneSCEfELCgq9mk8dxSj/AJSDfxpBXh9Of7zHDuhZgbHAJVxkAPbYfl++P3FK7PFB ep2fLKsOtkra6ll9CtSwoHrap4qqibhT7NhvSAsbvhhSAbPu4D6lEVM+8v8wbrxjeD J+RXr4lNozZ6SEp6K5qX54J4yelJI2ZD5Q14HEPyj3rVU/e1/PvAXhhSsVP7b+Ay2T fI6tLHe/LNMDZMrS3K4cUImbIQPtrpmQ8XFYMUZCyUphwI5obMSq0gHxYRJAXyh1z/ gC/rlOZXKIS3Q== Date: Tue, 5 Mar 2024 11:24:55 -0600 From: "Gustavo A. R. Silva" To: Takashi Sakamoto , Clemens Ladisch , Jaroslav Kysela , Takashi Iwai Cc: Kees Cook , linux-kernel@vger.kernel.org, "Gustavo A. R. Silva" , linux-hardening@vger.kernel.org, alsa-devel@alsa-project.org, linux-sound@vger.kernel.org, linux1394-devel@lists.sourceforge.net Subject: [PATCH 1/2][next] firewire: Avoid -Wflex-array-member-not-at-end warning Message-ID: References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: Message-ID-Hash: 7LFPF7EMD2LHS3WWH4MW3THWJOTV6F7X X-Message-ID-Hash: 7LFPF7EMD2LHS3WWH4MW3THWJOTV6F7X X-MailFrom: gustavoars@kernel.org X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-alsa-devel.alsa-project.org-0; header-match-alsa-devel.alsa-project.org-1; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.9 Precedence: list List-Id: "Alsa-devel mailing list for ALSA developers - http://www.alsa-project.org" Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: -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 `u` that is using a flexible `struct fw_iso_packet` as header for an on-stack array `u8 header[256]`. struct { struct fw_iso_packet packet; u8 header[256]; } u; 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 packet; u8 header[256]; } u; We also use `container_of()` whenever we need to retrieve a pointer to the flexible structure, through which the flexible-array member can be accessed, as in this case. So, with these changes, fix the following warning: drivers/firewire/core-cdev.c: In function ‘ioctl_queue_iso’: drivers/firewire/core-cdev.c:1129:38: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end] 1129 | struct fw_iso_packet packet; | ^~~~~~ Signed-off-by: Gustavo A. R. Silva --- drivers/firewire/core-cdev.c | 9 +++++---- include/linux/firewire.h | 16 +++++++++------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/drivers/firewire/core-cdev.c b/drivers/firewire/core-cdev.c index 6274b86eb943..e1f1daa2e667 100644 --- a/drivers/firewire/core-cdev.c +++ b/drivers/firewire/core-cdev.c @@ -1126,9 +1126,11 @@ static int ioctl_queue_iso(struct client *client, union ioctl_arg *arg) u32 control; int count; struct { - struct fw_iso_packet packet; + struct fw_iso_packet_hdr packet; u8 header[256]; } u; + struct fw_iso_packet *packet = + container_of(&u.packet, struct fw_iso_packet, hdr); if (ctx == NULL || a->handle != 0) return -EINVAL; @@ -1192,7 +1194,7 @@ static int ioctl_queue_iso(struct client *client, union ioctl_arg *arg) if (next > end) return -EINVAL; if (copy_from_user - (u.packet.header, p->header, transmit_header_bytes)) + (packet->header, p->header, transmit_header_bytes)) return -EFAULT; if (u.packet.skip && ctx->type == FW_ISO_CONTEXT_TRANSMIT && u.packet.header_length + u.packet.payload_length > 0) @@ -1200,8 +1202,7 @@ static int ioctl_queue_iso(struct client *client, union ioctl_arg *arg) if (payload + u.packet.payload_length > buffer_end) return -EINVAL; - if (fw_iso_context_queue(ctx, &u.packet, - &client->buffer, payload)) + if (fw_iso_context_queue(ctx, packet, &client->buffer, payload)) break; p = next; diff --git a/include/linux/firewire.h b/include/linux/firewire.h index dd9f2d765e68..becd3a60d0fb 100644 --- a/include/linux/firewire.h +++ b/include/linux/firewire.h @@ -456,13 +456,15 @@ void fw_core_remove_descriptor(struct fw_descriptor *desc); * scatter-gather streaming (e.g. assembling video frame automatically). */ struct fw_iso_packet { - u16 payload_length; /* Length of indirect payload */ - u32 interrupt:1; /* Generate interrupt on this packet */ - u32 skip:1; /* tx: Set to not send packet at all */ - /* rx: Sync bit, wait for matching sy */ - u32 tag:2; /* tx: Tag in packet header */ - u32 sy:4; /* tx: Sy in packet header */ - u32 header_length:8; /* Length of immediate header */ + struct_group_tagged(fw_iso_packet_hdr, hdr, + u16 payload_length; /* Length of indirect payload */ + u32 interrupt:1; /* Generate interrupt on this packet */ + u32 skip:1; /* tx: Set to not send packet at all */ + /* rx: Sync bit, wait for matching sy */ + u32 tag:2; /* tx: Tag in packet header */ + u32 sy:4; /* tx: Sy in packet header */ + u32 header_length:8; /* Length of immediate header */ + ); u32 header[]; /* tx: Top of 1394 isoch. data_block */ }; From patchwork Tue Mar 5 17:25:32 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: "Gustavo A. R. Silva" X-Patchwork-Id: 778326 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from alsa0.perex.cz (alsa0.perex.cz [77.48.224.243]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 28B74C54798 for ; Tue, 5 Mar 2024 17:26:15 +0000 (UTC) Received: from alsa1.perex.cz (alsa1.perex.cz [207.180.221.201]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by alsa0.perex.cz (Postfix) with ESMTPS id 8CA26A4D; Tue, 5 Mar 2024 18:26:03 +0100 (CET) DKIM-Filter: OpenDKIM Filter v2.11.0 alsa0.perex.cz 8CA26A4D DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=alsa-project.org; s=default; t=1709659573; bh=4nFC5omIFOjOAJ+cP/UoTfF1yurBWzlnntNqzpar1uA=; h=Date:From:To:Cc:Subject:References:In-Reply-To:List-Id: List-Archive:List-Help:List-Owner:List-Post:List-Subscribe: List-Unsubscribe:From; b=sOXDcslKcoOPB7HKJGMJumUqDrJk8mLEC9EoR4lGf9RSO+YR7nRj4s7JDCLMBQ7QP ZloKRlEbju1jyI/Dwb5bJ0EE7w5ACYEV6Zs+jMfWdgrVNUwWIWCLZs40+sJyEGP0ga ioZxIhWYq9p9RZ3aenVKRe6zc8lD9a2O6vEmGM0s= Received: by alsa1.perex.cz (Postfix, from userid 50401) id B03B4F80588; Tue, 5 Mar 2024 18:25:46 +0100 (CET) Received: from mailman-core.alsa-project.org (mailman-core.alsa-project.org [10.254.200.10]) by alsa1.perex.cz (Postfix) with ESMTP id EECF6F805B2; Tue, 5 Mar 2024 18:25:45 +0100 (CET) Received: by alsa1.perex.cz (Postfix, from userid 50401) id A2B46F8024E; Tue, 5 Mar 2024 18:25:42 +0100 (CET) Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by alsa1.perex.cz (Postfix) with ESMTPS id 74692F802E8 for ; Tue, 5 Mar 2024 18:25:38 +0100 (CET) DKIM-Filter: OpenDKIM Filter v2.11.0 alsa1.perex.cz 74692F802E8 Authentication-Results: alsa1.perex.cz; dkim=pass (2048-bit key, unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256 header.s=k20201202 header.b=nGIoI2Rq Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id F0C1D61671; Tue, 5 Mar 2024 17:25:35 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id ADE95C433C7; Tue, 5 Mar 2024 17:25:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1709659535; bh=4nFC5omIFOjOAJ+cP/UoTfF1yurBWzlnntNqzpar1uA=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=nGIoI2RqSSD+o5WgK9vgZYqgif+hg8huqzeRQfiT4srghDdJmIeoqQSII8KF0NwNc WhTFl3lISg2N3BXnnD8honFCDlkWkCLPzATIHWdliP3x3xjDnxmO6KuHzM2zL5APwC sAiyhqYbkWpDmbBP1JA/FAzosdQDSChqnfX/LBUGWTz9WUX/TEx3zPIzORcgYSm99b xYlQr6Z0yT4rAAWNEdQHP02sm4tNCDMnTGNARDBIrNaLW3sU3t2zXk1dvhGbcqpg0n 2F/sl6ixgTHrDNsicoFbpZ7owAlaGBnYy+P+Se9N6NqcNkd121JRUA5eDQIObyb65h wno0/gZxqkbdw== Date: Tue, 5 Mar 2024 11:25:32 -0600 From: "Gustavo A. R. Silva" To: Takashi Sakamoto , Clemens Ladisch , Jaroslav Kysela , Takashi Iwai Cc: Kees Cook , linux-kernel@vger.kernel.org, "Gustavo A. R. Silva" , 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 Message-ID: References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: Message-ID-Hash: CW6OHME5YW5AJRCFSDT4J56OH2LH2J73 X-Message-ID-Hash: CW6OHME5YW5AJRCFSDT4J56OH2LH2J73 X-MailFrom: gustavoars@kernel.org X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-alsa-devel.alsa-project.org-0; header-match-alsa-devel.alsa-project.org-1; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.9 Precedence: list List-Id: "Alsa-devel mailing list for ALSA developers - http://www.alsa-project.org" Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: -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 --- 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; }