This is a note to let you know that I've just added the patch titled arm64: link with -z norelro for LLD or aarch64-elf to the 5.4-stable tree which can be found at: http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary The filename of the patch is: arm64-link-with-z-norelro-for-lld-or-aarch64-elf.patch and it can be found in the queue-5.4 subdirectory. If you, or anyone else, feels it should not be added to the stable tree, please let <stable@xxxxxxxxxxxxxxx> know about it. >From foo@baz Fri Jun 25 12:15:34 PM CEST 2021 From: Jisheng Zhang <Jisheng.Zhang@xxxxxxxxxxxxx> Date: Fri, 25 Jun 2021 15:50:12 +0800 Subject: arm64: link with -z norelro for LLD or aarch64-elf To: Nick Desaulniers <ndesaulniers@xxxxxxxxxx>, stable@xxxxxxxxxxxxxxx, Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>, Nathan Chancellor <natechancellor@xxxxxxxxx>, Ard Biesheuvel <ardb@xxxxxxxxxx>, Sami Tolvanen <samitolvanen@xxxxxxxxxx>, Masahiro Yamada <masahiroy@xxxxxxxxxx>, Sedat Dilek <sedat.dilek@xxxxxxxxx>, Thomas Bogendoerfer <tsbogend@xxxxxxxxxxxxxxxx> Cc: "Catalin Marinas" <catalin.marinas@xxxxxxx>, "Will Deacon" <will@xxxxxxxxxx>, "Alan Modra" <amodra@xxxxxxxxx>, "Fāng-ruì Sòng" <maskray@xxxxxxxxxx>, "Quentin Perret" <qperret@xxxxxxxxxx>, linux-arm-kernel@xxxxxxxxxxxxxxxxxxx Message-ID: <20210625155012.4aec8450@xhacker.debian> From: Nick Desaulniers <ndesaulniers@xxxxxxxxxx> commit 311bea3cb9ee20ef150ca76fc60a592bf6b159f5 upstream. With GNU binutils 2.35+, linking with BFD produces warnings for vmlinux: aarch64-linux-gnu-ld: warning: -z norelro ignored BFD can produce this warning when the target emulation mode does not support RELRO program headers, and -z relro or -z norelro is passed. Alan Modra clarifies: The default linker emulation for an aarch64-linux ld.bfd is -maarch64linux, the default for an aarch64-elf linker is -maarch64elf. They are not equivalent. If you choose -maarch64elf you get an emulation that doesn't support -z relro. The ARCH=arm64 kernel prefers -maarch64elf, but may fall back to -maarch64linux based on the toolchain configuration. LLD will always create RELRO program header regardless of target emulation. To avoid the above warning when linking with BFD, pass -z norelro only when linking with LLD or with -maarch64linux. Fixes: 3b92fa7485eb ("arm64: link with -z norelro regardless of CONFIG_RELOCATABLE") Fixes: 3bbd3db86470 ("arm64: relocatable: fix inconsistencies in linker script and options") Cc: <stable@xxxxxxxxxxxxxxx> # 5.0.x- Reported-by: kernelci.org bot <bot@xxxxxxxxxxxx> Reported-by: Quentin Perret <qperret@xxxxxxxxxx> Signed-off-by: Nick Desaulniers <ndesaulniers@xxxxxxxxxx> Reviewed-by: Nathan Chancellor <natechancellor@xxxxxxxxx> Acked-by: Ard Biesheuvel <ardb@xxxxxxxxxx> Cc: Alan Modra <amodra@xxxxxxxxx> Cc: Fāng-ruì Sòng <maskray@xxxxxxxxxx> Link: https://lore.kernel.org/r/20201218002432.788499-1-ndesaulniers@xxxxxxxxxx Signed-off-by: Catalin Marinas <catalin.marinas@xxxxxxx> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> --- arch/arm64/Makefile | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) --- a/arch/arm64/Makefile +++ b/arch/arm64/Makefile @@ -10,7 +10,7 @@ # # Copyright (C) 1995-2001 by Russell King -LDFLAGS_vmlinux :=--no-undefined -X -z norelro +LDFLAGS_vmlinux :=--no-undefined -X CPPFLAGS_vmlinux.lds = -DTEXT_OFFSET=$(TEXT_OFFSET) GZFLAGS :=-9 @@ -82,17 +82,21 @@ CHECKFLAGS += -D__AARCH64EB__ AS += -EB # Prefer the baremetal ELF build target, but not all toolchains include # it so fall back to the standard linux version if needed. -KBUILD_LDFLAGS += -EB $(call ld-option, -maarch64elfb, -maarch64linuxb) +KBUILD_LDFLAGS += -EB $(call ld-option, -maarch64elfb, -maarch64linuxb -z norelro) UTS_MACHINE := aarch64_be else KBUILD_CPPFLAGS += -mlittle-endian CHECKFLAGS += -D__AARCH64EL__ AS += -EL # Same as above, prefer ELF but fall back to linux target if needed. -KBUILD_LDFLAGS += -EL $(call ld-option, -maarch64elf, -maarch64linux) +KBUILD_LDFLAGS += -EL $(call ld-option, -maarch64elf, -maarch64linux -z norelro) UTS_MACHINE := aarch64 endif +ifeq ($(CONFIG_LD_IS_LLD), y) +KBUILD_LDFLAGS += -z norelro +endif + CHECKFLAGS += -D__aarch64__ ifeq ($(CONFIG_ARM64_MODULE_PLTS),y) Patches currently in stable-queue which might be from Jisheng.Zhang@xxxxxxxxxxxxx are queue-5.4/arm64-link-with-z-norelro-for-lld-or-aarch64-elf.patch queue-5.4/kbuild-add-config_ld_is_lld.patch