Skip to content

Commit 55228db

Browse files
inclycsuryasaimadhu
authored andcommitted
x86/fpu: Use _Alignof to avoid undefined behavior in TYPE_ALIGN
WG14 N2350 specifies that it is an undefined behavior to have type definitions within offsetof", see https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2350.htm This specification is also part of C23. Therefore, replace the TYPE_ALIGN macro with the _Alignof builtin to avoid undefined behavior. (_Alignof itself is C11 and the kernel is built with -gnu11). ISO C11 _Alignof is subtly different from the GNU C extension __alignof__. Latter is the preferred alignment and _Alignof the minimal alignment. For long long on x86 these are 8 and 4 respectively. The macro TYPE_ALIGN's behavior matches _Alignof rather than __alignof__. [ bp: Massage commit message. ] Signed-off-by: YingChi Long <[email protected]> Signed-off-by: Borislav Petkov <[email protected]> Reviewed-by: Nick Desaulniers <[email protected]> Link: https://lore.kernel.org/r/[email protected]
1 parent 6ea2577 commit 55228db

File tree

1 file changed

+2
-5
lines changed

1 file changed

+2
-5
lines changed

arch/x86/kernel/fpu/init.c

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -133,18 +133,15 @@ static void __init fpu__init_system_generic(void)
133133
fpu__init_system_mxcsr();
134134
}
135135

136-
/* Get alignment of the TYPE. */
137-
#define TYPE_ALIGN(TYPE) offsetof(struct { char x; TYPE test; }, test)
138-
139136
/*
140137
* Enforce that 'MEMBER' is the last field of 'TYPE'.
141138
*
142139
* Align the computed size with alignment of the TYPE,
143140
* because that's how C aligns structs.
144141
*/
145142
#define CHECK_MEMBER_AT_END_OF(TYPE, MEMBER) \
146-
BUILD_BUG_ON(sizeof(TYPE) != ALIGN(offsetofend(TYPE, MEMBER), \
147-
TYPE_ALIGN(TYPE)))
143+
BUILD_BUG_ON(sizeof(TYPE) != \
144+
ALIGN(offsetofend(TYPE, MEMBER), _Alignof(TYPE)))
148145

149146
/*
150147
* We append the 'struct fpu' to the task_struct:

0 commit comments

Comments
 (0)