Commit 29bb79e9 authored by Gustavo A. R. Silva's avatar Gustavo A. R. Silva Committed by Kees Cook
Browse files

stddef: Introduce TRAILING_OVERLAP() helper macro



Add new TRAILING_OVERLAP() helper macro to create a union between
a flexible-array member (FAM) and a set of members that would
otherwise follow it. This overlays the trailing members onto the
FAM while preserving the original memory layout.

Co-developed-by: default avatarKees Cook <kees@kernel.org>
Signed-off-by: default avatarGustavo A. R. Silva <gustavoars@kernel.org>
Link: https://lore.kernel.org/r/aFG8gEwKXAWWIvX0@kspp


Signed-off-by: default avatarKees Cook <kees@kernel.org>
parent 4bfbc269
Loading
Loading
Loading
Loading
+20 −0
Original line number Diff line number Diff line
@@ -93,4 +93,24 @@ enum {
#define DECLARE_FLEX_ARRAY(TYPE, NAME) \
	__DECLARE_FLEX_ARRAY(TYPE, NAME)

/**
 * TRAILING_OVERLAP() - Overlap a flexible-array member with trailing members.
 *
 * Creates a union between a flexible-array member (FAM) in a struct and a set
 * of additional members that would otherwise follow it.
 *
 * @TYPE: Flexible structure type name, including "struct" keyword.
 * @NAME: Name for a variable to define.
 * @FAM: The flexible-array member within @TYPE
 * @MEMBERS: Trailing overlapping members.
 */
#define TRAILING_OVERLAP(TYPE, NAME, FAM, MEMBERS)				\
	union {									\
		TYPE NAME;							\
		struct {							\
			unsigned char __offset_to_##FAM[offsetof(TYPE, FAM)];	\
			MEMBERS							\
		};								\
	}

#endif