lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAFERDQ0zPoya5ZQfpbeuKVZEo_fKsonLf6tJbp32QnSGAtbi+Q@mail.gmail.com>
Date: Tue, 8 Jul 2025 21:44:44 +0200
From: Martin Wetterwald <martin@...terwald.eu>
To: linus.walleij@...aro.org, Nathan Chancellor <nathan@...nel.org>, linux@...linux.org.uk
Cc: linux-arm-kernel@...ts.infradead.org, linux-kernel@...r.kernel.org
Subject: Linux linking stage broken on ARM with binutils 2.33.1 (BFD)

Hello,

When I upgraded from 6.12.22 to 6.12.23 (without changing anything else), the
linking stage of vmlinux broke (arch ARM).

> /home/.../linux-6.12.23/scripts/link-vmlinux.sh: line 49: 136961 Segmentation fault      (core dumped) ${ld} ${ldflags} -o ${output} ${wl}--whole-archive ${objs} ${wl}--no-whole-archive ${wl}--start-group ${libs} ${wl}--end-group ${kallsymso} ${btf_vmlinux_bin_o} ${ldlibs}
> make[2]: *** [/home/.../linux-6.12.23/scripts/Makefile.vmlinux:34: vmlinux] Error 139
> make[1]: *** [/home/.../linux-6.12.23/Makefile:1179: vmlinux] Error 2
> make: *** [/home/.../linux-6.12.23/Makefile:224: __sub-make] Error 2

This patch seems related:

> commit 59fc42318305cb38efb4f5565408150419be8451
> Author: Nathan Chancellor <nathan@...nel.org>
> Date:   Thu Mar 20 22:33:49 2025 +0100
>
>     ARM: 9443/1: Require linker to support KEEP within OVERLAY for DCE
>
>     commit e7607f7d6d81af71dcc5171278aadccc94d277cd upstream.
>
>     ld.lld prior to 21.0.0 does not support using the KEEP keyword within an
>     overlay description, which may be needed to avoid discarding necessary
>     sections within an overlay with '--gc-sections', which can be enabled
>     for the kernel via CONFIG_LD_DEAD_CODE_DATA_ELIMINATION.
>
>     Disallow CONFIG_LD_DEAD_CODE_DATA_ELIMINATION without support for KEEP
>     within OVERLAY and introduce a macro, OVERLAY_KEEP, that can be used to
>     conditionally add KEEP when it is properly supported to avoid breaking
>     old versions of ld.lld.
>
>     Cc: stable@...r.kernel.org
>     Link: https://github.com/llvm/llvm-project/commit/381599f1fe973afad3094e55ec99b1620dba7d8c
>     Reviewed-by: Linus Walleij <linus.walleij@...aro.org>
>     Signed-off-by: Nathan Chancellor <nathan@...nel.org>
>     Signed-off-by: Russell King (Oracle) <rmk+kernel@...linux.org.uk>
>     [nathan: Fix conflict in init/Kconfig due to lack of RUSTC symbols]
>     Signed-off-by: Nathan Chancellor <nathan@...nel.org>
>     Signed-off-by: Greg Kroah-Hartman <gregkh@...uxfoundation.org>

I'm using BFD linker from GNU binutils 2.33.1 (built using musl-cross-make with
musl 1.2.5 and GCC 14).

> scripts/ld-version.sh /tmp/arm-linux-musleabihf-ld
> BFD 23301

I don't know if it was the intention of the patch, but it is not only changing
a behavior for LLD, but also for BFD:
- Before the patch, ld BFD 2.33.1 was not selecting
  HAVE_LD_DEAD_CODE_DATA_ELIMINATION, and my build worked.
- After the patch, ld BFD 2.33.1 is activating
  HAVE_LD_DEAD_CODE_DATA_ELIMINATION, and it is segfaulting.
Shouldn't we keep the previous behavior and only select this option when BFD is
>= 2.36.0 (and not just when we have a BFD linker) ?

The issue is the interaction between LD_CAN_USE_KEEP_IN_OVERLAY and
HAVE_LD_DEAD_CODE_DATA_ELIMINATION.

Nathan, I've seen your proposal here: https://lkml.org/lkml/2025/7/5/431.
I confirm it also fixes the issue on my side. Should I propose the patch?

Thanks!
Martin

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ