public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Kees Cook <kees@kernel.org>
To: "Gustavo A. R. Silva" <gustavoars@kernel.org>
Cc: Theodore Ts'o <tytso@mit.edu>,
	Andreas Dilger <adilger.kernel@dilger.ca>,
	linux-ext4@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-hardening@vger.kernel.org
Subject: Re: [PATCH][next] ext4: Avoid -Wflex-array-member-not-at-end warning
Date: Mon, 7 Apr 2025 11:58:17 -0700	[thread overview]
Message-ID: <202504071156.2344BA19@keescook> (raw)
In-Reply-To: <Z-SF97N3AxcIMlSi@kspp>

On Wed, Mar 26, 2025 at 04:55:51PM -0600, 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.
> 
> Use the `DEFINE_RAW_FLEX()` helper for an on-stack definition of
> a flexible structure where the size of the flexible-array member
> is known at compile-time, and refactor the rest of the code,
> accordingly.
> 
> So, with these changes, fix the following warning:
> 
> fs/ext4/mballoc.c:3041:40: 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>
> ---
>  fs/ext4/mballoc.c | 18 ++++++++----------
>  1 file changed, 8 insertions(+), 10 deletions(-)
> 
> diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c
> index 0d523e9fb3d5..f88424c28194 100644
> --- a/fs/ext4/mballoc.c
> +++ b/fs/ext4/mballoc.c
> @@ -3037,10 +3037,8 @@ static int ext4_mb_seq_groups_show(struct seq_file *seq, void *v)
>  	unsigned char blocksize_bits = min_t(unsigned char,
>  					     sb->s_blocksize_bits,
>  					     EXT4_MAX_BLOCK_LOG_SIZE);
> -	struct sg {
> -		struct ext4_group_info info;
> -		ext4_grpblk_t counters[EXT4_MAX_BLOCK_LOG_SIZE + 2];
> -	} sg;
> +	DEFINE_RAW_FLEX(struct ext4_group_info, sg, bb_counters,
> +			EXT4_MAX_BLOCK_LOG_SIZE + 2);

Yup, struct ext4_group_info::bb_counters is ext4_grpblk_t, so everything
matches up.

>  
>  	group--;
>  	if (group == 0)
> @@ -3048,7 +3046,7 @@ static int ext4_mb_seq_groups_show(struct seq_file *seq, void *v)
>  			      " 2^0   2^1   2^2   2^3   2^4   2^5   2^6  "
>  			      " 2^7   2^8   2^9   2^10  2^11  2^12  2^13  ]\n");
>  
> -	i = (blocksize_bits + 2) * sizeof(sg.info.bb_counters[0]) +
> +	i = (blocksize_bits + 2) * sizeof(sg->bb_counters[0]) +
>  		sizeof(struct ext4_group_info);
>  
>  	grinfo = ext4_get_group_info(sb, group);
> @@ -3068,14 +3066,14 @@ static int ext4_mb_seq_groups_show(struct seq_file *seq, void *v)
>  	 * We care only about free space counters in the group info and
>  	 * these are safe to access even after the buddy has been unloaded
>  	 */
> -	memcpy(&sg, grinfo, i);
> -	seq_printf(seq, "#%-5u: %-5u %-5u %-5u [", group, sg.info.bb_free,
> -			sg.info.bb_fragments, sg.info.bb_first_free);
> +	memcpy(sg, grinfo, i);
> +	seq_printf(seq, "#%-5u: %-5u %-5u %-5u [", group, sg->bb_free,
> +			sg->bb_fragments, sg->bb_first_free);
>  	for (i = 0; i <= 13; i++)
>  		seq_printf(seq, " %-5u", i <= blocksize_bits + 1 ?
> -				sg.info.bb_counters[i] : 0);
> +				sg->bb_counters[i] : 0);
>  	seq_puts(seq, " ]");
> -	if (EXT4_MB_GRP_BBITMAP_CORRUPT(&sg.info))
> +	if (EXT4_MB_GRP_BBITMAP_CORRUPT(sg))
>  		seq_puts(seq, " Block bitmap corrupted!");
>  	seq_putc(seq, '\n');
>  	return 0;

Replacements looks good.

Reviewed-by: Kees Cook <kees@kernel.org>

-- 
Kees Cook

  reply	other threads:[~2025-04-07 18:58 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-03-26 22:55 [PATCH][next] ext4: Avoid -Wflex-array-member-not-at-end warning Gustavo A. R. Silva
2025-04-07 18:58 ` Kees Cook [this message]
2025-04-23 18:20 ` Theodore Ts'o

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=202504071156.2344BA19@keescook \
    --to=kees@kernel.org \
    --cc=adilger.kernel@dilger.ca \
    --cc=gustavoars@kernel.org \
    --cc=linux-ext4@vger.kernel.org \
    --cc=linux-hardening@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=tytso@mit.edu \
    /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