linux/export: Fix alignment for 64-bit ksymtab entries
authorHelge Deller <deller@gmx.de>
Wed, 22 Nov 2023 22:18:11 +0000 (23:18 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 5 Jan 2024 14:19:41 +0000 (15:19 +0100)
[ Upstream commit f6847807c22f6944c71c981b630b9fff30801e73 ]

An alignment of 4 bytes is wrong for 64-bit platforms which don't define
CONFIG_HAVE_ARCH_PREL32_RELOCATIONS (which then store 64-bit pointers).
Fix their alignment to 8 bytes.

Fixes: ddb5cdbafaaa ("kbuild: generate KSYMTAB entries by modpost")
Signed-off-by: Helge Deller <deller@gmx.de>
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
include/linux/export-internal.h

index 45fca09..b842aee 100644 (file)
  * and eliminates the need for absolute relocations that require runtime
  * processing on relocatable kernels.
  */
+#define __KSYM_ALIGN           ".balign 4"
 #define __KSYM_REF(sym)                ".long " #sym "- ."
 #elif defined(CONFIG_64BIT)
+#define __KSYM_ALIGN           ".balign 8"
 #define __KSYM_REF(sym)                ".quad " #sym
 #else
+#define __KSYM_ALIGN           ".balign 4"
 #define __KSYM_REF(sym)                ".long " #sym
 #endif
 
@@ -42,7 +45,7 @@
            "   .asciz \"" ns "\""                                      "\n"    \
            "   .previous"                                              "\n"    \
            "   .section \"___ksymtab" sec "+" #name "\", \"a\""        "\n"    \
-           "   .balign 4"                                              "\n"    \
+               __KSYM_ALIGN                                            "\n"    \
            "__ksymtab_" #name ":"                                      "\n"    \
                __KSYM_REF(sym)                                         "\n"    \
                __KSYM_REF(__kstrtab_ ##name)                           "\n"    \