Received: by 2002:a89:2c3:0:b0:1ed:23cc:44d1 with SMTP id d3csp557721lqs; Tue, 5 Mar 2024 09:25:15 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCWDZJIg54wrjvw86LL/ffqHyylxAHFq/T5AF+/u22pwD2p0p4/f3m6YNICVtnTyva8uyGQfnu+gNPPAAE64DE7qnd+m/1T3OD0oKkTimA== X-Google-Smtp-Source: AGHT+IHFSE3LBnoa8HCQDJjDtbBOv/pd9Vlki0zP/0QIs58Dxm0wRzE0eG787uwKd7nSPS4wLf1/ X-Received: by 2002:a2e:bc14:0:b0:2d3:e0ec:36c7 with SMTP id b20-20020a2ebc14000000b002d3e0ec36c7mr2128437ljf.43.1709659515804; Tue, 05 Mar 2024 09:25:15 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1709659515; cv=pass; d=google.com; s=arc-20160816; b=AymlUIZ/jrRDkJby5hflxY7xELsQU3RHQMlUDSWy01Ceg3ezIKeYu8akWmSS/q7cuk rjZTl3WavA2Plkv1FIQ1lCqZQm0l+X7Yuehl5LgosPA5j+QNvpm8Bzbm2i2VvJrWph5s vXKaOFxAPH9n2XhF1hABonRDnR//gwYxHeEyOt8v3JIBCKsb1qhZVZZfrFkVa6myn9iW NWezQ67SSuQbV3Nrr8EfUwKIe9m3D5xone+dzQn7D22FEOLuPM6d6s0ZuAJNlwKwSA5t VPKNpF8ljAdNJKPH/f6LBw9WYiABvnCI0W76rCsUg5Z8AMKxEcHK2E6Z77nacicByNpV mM6Q== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:list-unsubscribe:list-subscribe:list-id:precedence :references:message-id:subject:cc:to:from:date:dkim-signature; bh=pJ+nUEWr+5QqE8+Cs5f2CUo82wwtM/oAPoNdPC/tvms=; fh=LJWY4oSh86Wd8Or+RSp++FMvcH22XBXBZbHk1iLjC04=; b=ISdonR9kcCng69EtJhxXGwS56X187FHPX8IQ5uG7fDtiI1NbJA76kApzxFF5eSwnA+ DK8XcX9ntGL1aG1eg4osbXeaqm4cMRIAHHktcRc4qMgSRod5TcL8blCjAJ/v4hPD04Kr FzCClY3Cw8h7pkRSujWfh+I78vUKx3W6MNdA2CtgpIdh5GP6pj6+DfVq0cnjDuhJ1UeA EyLpEEG8gqOaWKkiHAZiukuIndS5KkgpKfdIsQDUsi1HX86DjINDyP5mHkviyGElsQQP 48OOyDQQcB6Yr/RfWn5xurxew+MG10NkNupfXlOsTTeg/G+XgT1QFRU+zISMe6DwYAiD 1Xmg==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=Z903NSju; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-92759-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-92759-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [2604:1380:4601:e00::3]) by mx.google.com with ESMTPS id y9-20020a056402358900b00566d57c4b8dsi4374316edc.211.2024.03.05.09.25.15 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Mar 2024 09:25:15 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-92759-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) client-ip=2604:1380:4601:e00::3; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=Z903NSju; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-92759-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-92759-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id 7DC4B1F26480 for ; Tue, 5 Mar 2024 17:25:15 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 94D921758C; Tue, 5 Mar 2024 17:24:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Z903NSju" Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A9BCD17582; Tue, 5 Mar 2024 17:24:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709659498; cv=none; b=JfCHO1CLAQiKAMd+BOr5honlFPUvTBgTNgmJAsOUBYnUlXTGmxEJcOE68DENZ2HzQhnb7kKJhOypRbMhLSbzLH0HpV/GhmSyDqT7nSp7Zm9zxb9XVprPcRDY2gtBeUBmF7AkhfdG5q6WHkVAixk2rcOtQslsW0fsZn8hGCd90fU= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709659498; c=relaxed/simple; bh=0lwIjheUVVinIAmrLyBNdgK66HWaAqekBzSfCyt9IXA=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=ZpcOet2AJhSn5nUxdxY4pFbLo01bUGNgwb0ejp5So9KVjnnsYTSQ2cYjQXmcubz5PW9MPb7I7Bk3GFat0lOeTD1G8Oo1DnqKmxBncZf5m8dg+1WBT4Ds9IEIkBgK6uGDQWsJ4loW0b9TV5j480iyczy8whu+zJqqgnH07y6gV9Q= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Z903NSju; arc=none smtp.client-ip=10.30.226.201 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: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: -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 */ }; -- 2.34.1