On 25/06/25 10:56, Kees Cook wrote:
On Wed, Jun 11, 2025 at 01:52:41PM -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.
Refactor multiple structs that contain flexible-array members in the
middle by replacing them with unions.
These changes preserve the memory layout while effectively adjusting
it so that the flexible-array member is always treated as the last
member.
With these changes, fix a dozen instances of the following type of
warning:
drivers/acpi/nfit/intel.c:692:35: 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@xxxxxxxxxx>
---
Changes in v3:
- Use union instead of DEFINE_RAW_FLEX().
I think your TRAILING_OVERLAP macro[1] is perfect here. I'll try to get that
landed for the next rc. Can you double-check that this works correctly
in these cases?
Absolutely. If people prefer that route I'm happy to wait for the helper to
land in linus' tree.
@@ -55,9 +55,16 @@ static unsigned long intel_security_flags(struct nvdimm *nvdimm,
{
struct nfit_mem *nfit_mem = nvdimm_provider_data(nvdimm);
unsigned long security_flags = 0;
- struct {
+ /*
+ * This effectively creates a union between the flexible-array member
+ * and any members after _offset_to_fam.
+ */
+ union {
struct nd_cmd_pkg pkg;
- struct nd_intel_get_security_state cmd;
+ struct {
+ u8 _offset_to_fam[offsetof(struct nd_cmd_pkg, nd_payload)];
+ struct nd_intel_get_security_state cmd;
+ };
} nd_cmd = {
.pkg = {
.nd_command = NVDIMM_INTEL_GET_SECURITY_STATE,
I think it would be a pretty small and direct replacement:
TRAILING_OVERLAP(struct nd_cmd_pkg, pkg, nd_payload,
struct nd_intel_get_security_state cmd;
) nd_cmd = {
...
Yes, this works. Hopefully, maintainers will comment on this and let us
know what they prefer. :)
Thanks!
-Gustavo
-Kees
[1] https://web.git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git/commit/?h=for-next/kspp&id=29bb79e9dbf1ba100125e39deb7147acd490903f