All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Gustavo A. R. Silva" <gustavoars@kernel.org>
To: Kees Cook <keescook@chromium.org>
Cc: linux-kernel@vger.kernel.org,
	"Gustavo A. R. Silva" <gustavoars@kernel.org>,
	linux-hardening@vger.kernel.org
Subject: [PATCH][next] stddef: Introduce struct_group_tagged_attr() helper macro
Date: Mon, 18 Mar 2024 17:00:33 -0600	[thread overview]
Message-ID: <ZfjHkXJWg12rARKU@neat> (raw)

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)
+
 /**
  * DECLARE_FLEX_ARRAY() - Declare a flexible array usable in a union
  *
-- 
2.34.1


             reply	other threads:[~2024-03-18 23:00 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-18 23:00 Gustavo A. R. Silva [this message]
2024-03-18 23:53 ` [PATCH][next] stddef: Introduce struct_group_tagged_attr() helper macro Kees Cook
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=ZfjHkXJWg12rARKU@neat \
    --to=gustavoars@kernel.org \
    --cc=keescook@chromium.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.