From: Greg Kroah-Hartman Date: Sun, 22 Jan 2023 14:20:15 +0000 (+0100) Subject: 4.14-stable patches X-Git-Tag: v4.14.304~23 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=10652e1852e5d8c93d219a303b484a84236e40fe;p=thirdparty%2Fkernel%2Fstable-queue.git 4.14-stable patches added patches: x86-fpu-use-_alignof-to-avoid-undefined-behavior-in-type_align.patch --- diff --git a/queue-4.14/series b/queue-4.14/series index f72686f5459..dc9792f0b54 100644 --- a/queue-4.14/series +++ b/queue-4.14/series @@ -22,3 +22,4 @@ usb-storage-apply-ignore_uas-only-for-hiksemi-md202-on-rtl9210.patch serial-pch_uart-pass-correct-sg-to-dma_unmap_sg.patch serial-atmel-fix-incorrect-baudrate-setup.patch gsmi-fix-null-deref-in-gsmi_get_variable.patch +x86-fpu-use-_alignof-to-avoid-undefined-behavior-in-type_align.patch diff --git a/queue-4.14/x86-fpu-use-_alignof-to-avoid-undefined-behavior-in-type_align.patch b/queue-4.14/x86-fpu-use-_alignof-to-avoid-undefined-behavior-in-type_align.patch new file mode 100644 index 00000000000..1b9f13615fc --- /dev/null +++ b/queue-4.14/x86-fpu-use-_alignof-to-avoid-undefined-behavior-in-type_align.patch @@ -0,0 +1,63 @@ +From 980618fd33732ebfbe97daf10e8ebc13400aee3e Mon Sep 17 00:00:00 2001 +From: YingChi Long +Date: Fri, 18 Nov 2022 08:55:35 +0800 +Subject: x86/fpu: Use _Alignof to avoid undefined behavior in TYPE_ALIGN + +From: YingChi Long + +commit 55228db2697c09abddcb9487c3d9fa5854a932cd upstream. + +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 +Signed-off-by: Borislav Petkov +Reviewed-by: Nick Desaulniers +Link: https://lore.kernel.org/r/20220925153151.2467884-1-me@inclyc.cn +Signed-off-by: Nathan Chancellor +Signed-off-by: Greg Kroah-Hartman +--- + arch/x86/kernel/fpu/init.c | 7 ++----- + 1 file changed, 2 insertions(+), 5 deletions(-) + +--- a/arch/x86/kernel/fpu/init.c ++++ b/arch/x86/kernel/fpu/init.c +@@ -138,9 +138,6 @@ static void __init fpu__init_system_gene + unsigned int fpu_kernel_xstate_size; + EXPORT_SYMBOL_GPL(fpu_kernel_xstate_size); + +-/* Get alignment of the TYPE. */ +-#define TYPE_ALIGN(TYPE) offsetof(struct { char x; TYPE test; }, test) +- + /* + * Enforce that 'MEMBER' is the last field of 'TYPE'. + * +@@ -148,8 +145,8 @@ EXPORT_SYMBOL_GPL(fpu_kernel_xstate_size + * because that's how C aligns structs. + */ + #define CHECK_MEMBER_AT_END_OF(TYPE, MEMBER) \ +- BUILD_BUG_ON(sizeof(TYPE) != ALIGN(offsetofend(TYPE, MEMBER), \ +- TYPE_ALIGN(TYPE))) ++ BUILD_BUG_ON(sizeof(TYPE) != \ ++ ALIGN(offsetofend(TYPE, MEMBER), _Alignof(TYPE))) + + /* + * We append the 'struct fpu' to the task_struct: