All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kees Cook <kees@kernel.org>
To: "Gustavo A. R. Silva" <gustavo@embeddedor.com>
Cc: "Gustavo A. R. Silva" <gustavoars@kernel.org>,
	Lyude Paul <lyude@redhat.com>, Danilo Krummrich <dakr@kernel.org>,
	David Airlie <airlied@gmail.com>, Simona Vetter <simona@ffwll.ch>,
	dri-devel@lists.freedesktop.org, nouveau@lists.freedesktop.org,
	linux-kernel@vger.kernel.org, linux-hardening@vger.kernel.org
Subject: Re: [PATCH][next] drm/nouveau: chan: Avoid -Wflex-array-member-not-at-end warnings
Date: Tue, 8 Apr 2025 16:40:46 -0700	[thread overview]
Message-ID: <202504081637.D17F824CE@keescook> (raw)
In-Reply-To: <a6dccb66-3f97-443f-85e5-fe089cd93a5e@embeddedor.com>

On Mon, Apr 07, 2025 at 05:35:47PM -0600, Gustavo A. R. Silva wrote:
> [..]
> 
> > > > > -	struct {
> > > > > -		struct nvif_chan_v0 chan;
> > > > > -		char name[TASK_COMM_LEN+16];
> > > > > -	} args;
> > > > > +	DEFINE_RAW_FLEX(struct nvif_chan_v0, args, name, TASK_COMM_LEN + 16);
> > > > >    	struct nvif_device *device = &cli->device;
> > > > >    	struct nouveau_channel *chan;
> > > > >    	const u64 plength = 0x10000;
> > > > > @@ -298,28 +295,28 @@ nouveau_channel_ctor(struct nouveau_cli *cli, bool priv, u64 runm,
> > > > >    		return ret;
> > > > >    	/* create channel object */
> > > > > -	args.chan.version = 0;
> > > > > -	args.chan.namelen = sizeof(args.name);
> > > > > -	args.chan.runlist = __ffs64(runm);
> > > > > -	args.chan.runq = 0;
> > > > > -	args.chan.priv = priv;
> > > > > -	args.chan.devm = BIT(0);
> > > > > +	args->version = 0;
> > > > > +	args->namelen = __struct_size(args) - sizeof(*args);
> > > > 
> > > > Does __struct_size(args->name) work here (and later)?
> > > 
> > > Why not?
> > 
> > Uhm, I'm genuinely curious. I *think* it will work, but because it's
> > within the struct, not outside of it, I'm unclear if it'll DTRT for
> > finding the size (since __builtin_object_size() can be touchy).
> > 
> > > I mean, this should be equivalent to `TASK_COMM_LEN+16`, I could
> > > use the latter if people prefer it (see my comments below).
> > 
> > Right, it should be the same. I think __struct_size(args->name) would be
> > much more readable ... if it works. :)
> 
> OK, I'll double check this.

Ah-ha, yes, I'm already testing this with KUnit:

struct bar {
        int a;
        u32 counter;
        s16 array[];
};
...
        DEFINE_RAW_FLEX(struct bar, two, array, 2);
	...
        KUNIT_EXPECT_EQ(test, sizeof(*two), sizeof(struct bar));
        KUNIT_EXPECT_EQ(test, __struct_size(two), sizeof(struct bar) + 2 * sizeof(s16));
        KUNIT_EXPECT_EQ(test, __member_size(two), sizeof(struct bar) + 2 * sizeof(s16));
        KUNIT_EXPECT_EQ(test, __struct_size(two->array), 2 * sizeof(s16));
        KUNIT_EXPECT_EQ(test, __member_size(two->array), 2 * sizeof(s16));


> I really don't want to condition -Wflex-array-member-not-at-end patches
> on counted_by patches, for now.

Fair enough. :) One thing at a time is wise!

-- 
Kees Cook

  reply	other threads:[~2025-04-08 23:40 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-04-03 16:45 [PATCH][next] drm/nouveau: chan: Avoid -Wflex-array-member-not-at-end warnings Gustavo A. R. Silva
2025-04-07 19:50 ` Kees Cook
2025-04-07 19:57   ` Gustavo A. R. Silva
2025-04-07 20:39     ` Kees Cook
2025-04-07 23:35       ` Gustavo A. R. Silva
2025-04-08 23:40         ` Kees Cook [this message]
2025-04-11  7:26           ` Gustavo A. R. Silva

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=202504081637.D17F824CE@keescook \
    --to=kees@kernel.org \
    --cc=airlied@gmail.com \
    --cc=dakr@kernel.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=gustavo@embeddedor.com \
    --cc=gustavoars@kernel.org \
    --cc=linux-hardening@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lyude@redhat.com \
    --cc=nouveau@lists.freedesktop.org \
    --cc=simona@ffwll.ch \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.