From: Kees Cook <keescook@chromium.org>
To: "Gustavo A. R. Silva" <gustavoars@kernel.org>
Cc: linux-kernel@vger.kernel.org, linux-hardening@vger.kernel.org
Subject: Re: [PATCH][next] stddef: Introduce struct_group_tagged_attr() helper macro
Date: Mon, 18 Mar 2024 16:53:32 -0700 [thread overview]
Message-ID: <202403181652.B8787FB288@keescook> (raw)
In-Reply-To: <ZfjHkXJWg12rARKU@neat>
On Mon, Mar 18, 2024 at 05:00:33PM -0600, Gustavo A. R. Silva wrote:
> We need a new `struct_group()` helper that allows for both having the
> struct be tagged, and specifying struct attributes like `__packed`
> or `__align(x)`.
>
> This new helper will initially be used to address
> -Wflex-array-member-not-at-end warnings, where a tagged struct is used
> to separate the flexible-array member from the rest of the members in
> the flexible structure [1]. There are some scenarios in which those
> members need to be packed, as well.
>
> So, `struct_group_tagged_attr()` is introduced for this.
>
> Link: https://lore.kernel.org/linux-hardening/ZeIgeZ5Sb0IZTOyt@neat/ [1]
> Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org>
> ---
> include/linux/stddef.h | 20 ++++++++++++++++++++
> 1 file changed, 20 insertions(+)
>
> diff --git a/include/linux/stddef.h b/include/linux/stddef.h
> index 929d67710cc5..919df9453257 100644
> --- a/include/linux/stddef.h
> +++ b/include/linux/stddef.h
> @@ -80,6 +80,26 @@ enum {
> #define struct_group_tagged(TAG, NAME, MEMBERS...) \
> __struct_group(TAG, NAME, /* no attrs */, MEMBERS)
>
> +/**
> + * struct_group_tagged_attr() - Create a struct_group with a reusable
> + * tag and trailing attributes.
> + *
> + * @TAG: The tag name for the named sub-struct
> + * @NAME: The identifier name of the mirrored sub-struct
> + * @ATTRS: Any struct attributes to apply
> + * @MEMBERS: The member declarations for the mirrored structs
> + *
> + * Used to create an anonymous union of two structs with identical
> + * layout and size: one anonymous and one named. The former can be
> + * used normally without sub-struct naming, and the latter can be
> + * used to reason about the start, end, and size of the group of
> + * struct members. Includes struct tag argument for the named copy,
> + * so the specified layout can be reused later. Also includes
> + * structure attributes argument.
> + */
> +#define struct_group_tagged_attr(TAG, NAME, ATTRS, MEMBERS...) \
> + __struct_group(TAG, NAME, ATTRS, MEMBERS)
This is the same as __struct_group() only with a longer name? Why not
just use __struct_group() directly?
--
Kees Cook
next prev parent reply other threads:[~2024-03-18 23:53 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-03-18 23:00 [PATCH][next] stddef: Introduce struct_group_tagged_attr() helper macro Gustavo A. R. Silva
2024-03-18 23:53 ` Kees Cook [this message]
2024-03-18 23:59 ` 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=202403181652.B8787FB288@keescook \
--to=keescook@chromium.org \
--cc=gustavoars@kernel.org \
--cc=linux-hardening@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
/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.