# git rev-parse -q --verify 7e67dd4899d866115be2f68fa3f328616cd60408^{commit} # git fetch -q -n -f git://gitlab.ozlabs.ibm.com/mirror/linux-kbuild.git for-next remote: warning: multi-pack bitmap is missing required reverse index # git rev-parse -q --verify 7e67dd4899d866115be2f68fa3f328616cd60408^{commit} 7e67dd4899d866115be2f68fa3f328616cd60408 # git checkout -q -f -B kisskb 7e67dd4899d866115be2f68fa3f328616cd60408 # git clean -qxdf # < git log -1 # commit 7e67dd4899d866115be2f68fa3f328616cd60408 # Author: Masahiro Yamada # Date: Sat Jun 10 18:13:10 2023 +0900 # # Revert "[PATCH] uml: export symbols added by GCC hardened" # # This reverts commit cead61a6717a9873426b08d73a34a325e3546f5d. # # It exported __stack_smash_handler and __guard, while they may not be # defined by anyone. # # The code *declares* __stack_smash_handler and __guard. It does not # create weak symbols. If no external library is linked, they are left # undefined, but yet exported. # # If a loadable module tries to access non-existing symbols, bad things # (a page fault, NULL pointer dereference, etc.) will happen. So, the # current code is wrong and dangerous. # # If the code were written as follows, it would *define* them as weak # symbols so modules would be able to get access to them. # # void (*__stack_smash_handler)(void *) __attribute__((weak)); # EXPORT_SYMBOL(__stack_smash_handler); # # long __guard __attribute__((weak)); # EXPORT_SYMBOL(__guard); # # In fact, modpost forbids exporting undefined symbols. It shows an error # message if it detects such a mistake. # # ERROR: modpost: "..." [...] was exported without definition # # Unfortunately, it is checked only when the code is built as modular. # The problem described above has been unnoticed for a long time because # arch/um/os-Linux/user_syms.c is always built-in. # # With a planned change in Kbuild, exporting undefined symbols will always # result in a build error instead of a run-time error. It is a good thing, # but we need to fix the breakage in advance. # # One fix is to define weak symbols as shown above. An alternative is to # export them conditionally as follows: # # #ifdef CONFIG_STACKPROTECTOR # extern void __stack_smash_handler(void *); # EXPORT_SYMBOL(__stack_smash_handler); # # external long __guard; # EXPORT_SYMBOL(__guard); # #endif # # This is what other architectures do; EXPORT_SYMBOL(__stack_chk_guard) # is guarded by #ifdef CONFIG_STACKPROTECTOR. # # However, adding the #ifdef guard is not sensible because UML cannot # enable the stack-protector in the first place! (Please note UML does # not select HAVE_STACKPROTECTOR in Kconfig.) # # So, the code is already broken (and unused) in multiple ways. # # Just remove. # # Signed-off-by: Masahiro Yamada # Reviewed-by: Nick Desaulniers # < /opt/cross/kisskb/korg/gcc-11.3.0-nolibc/aarch64-linux/bin/aarch64-linux-gcc --version # < /opt/cross/kisskb/korg/gcc-11.3.0-nolibc/aarch64-linux/bin/aarch64-linux-ld --version # < git log --format=%s --max-count=1 7e67dd4899d866115be2f68fa3f328616cd60408 # make -s -j 160 ARCH=arm64 O=/kisskb/build/kbuild_defconfig_arm64-gcc11 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-11.3.0-nolibc/aarch64-linux/bin/aarch64-linux- defconfig # < make -s -j 160 ARCH=arm64 O=/kisskb/build/kbuild_defconfig_arm64-gcc11 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-11.3.0-nolibc/aarch64-linux/bin/aarch64-linux- help # make -s -j 160 ARCH=arm64 O=/kisskb/build/kbuild_defconfig_arm64-gcc11 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-11.3.0-nolibc/aarch64-linux/bin/aarch64-linux- olddefconfig # make -s -j 160 ARCH=arm64 O=/kisskb/build/kbuild_defconfig_arm64-gcc11 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-11.3.0-nolibc/aarch64-linux/bin/aarch64-linux- Completed OK # rm -rf /kisskb/build/kbuild_defconfig_arm64-gcc11 # Build took: 0:07:03.257978