On Sun, Oct 30, 2022 at 07:22:02PM +0100, Heiko Carstens wrote: > Nathan Chancellor reported several link errors on s390 with > CONFIG_RELOCATABLE disabled, after binutils commit 906f69cf65da ("IBM > zSystems: Issue error for *DBL relocs on misaligned symbols"). The binutils > commit reveals potential miscompiles that might have happened already > before with linker script defined symbols at odd addresses. > > A similar bug was recently fixed in the kernel with commit c9305b6c1f52 > ("s390: fix nospec table alignments"). > > See https://github.com/ClangBuiltLinux/linux/issues/1747 for an analysis > from Ulich Weigand. > > Therefore always build a relocatable kernel to avoid this problem. There is > hardly any use-case for non-relocatable kernels, so this shouldn't be > controversial. > > Link: https://github.com/ClangBuiltLinux/linux/issues/1747 > Signed-off-by: Heiko Carstens <hca@xxxxxxxxxxxxx> Tested-by: Nathan Chancellor <nathan@xxxxxxxxxx> > --- > arch/s390/Kconfig | 6 +++--- > arch/s390/Makefile | 2 -- > arch/s390/boot/Makefile | 3 +-- > arch/s390/boot/startup.c | 3 +-- > 4 files changed, 5 insertions(+), 9 deletions(-) > > diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig > index 318fce77601d..de575af02ffe 100644 > --- a/arch/s390/Kconfig > +++ b/arch/s390/Kconfig > @@ -568,8 +568,7 @@ config EXPOLINE_FULL > endchoice > > config RELOCATABLE > - bool "Build a relocatable kernel" > - default y > + def_bool y > help > This builds a kernel image that retains relocation information > so it can be loaded at an arbitrary address. > @@ -578,10 +577,11 @@ config RELOCATABLE > bootup process. > The relocations make the kernel image about 15% larger (compressed > 10%), but are discarded at runtime. > + Note: this option exists only for documentation purposes, please do > + not remove it. > > config RANDOMIZE_BASE > bool "Randomize the address of the kernel image (KASLR)" > - depends on RELOCATABLE > default y > help > In support of Kernel Address Space Layout Randomization (KASLR), > diff --git a/arch/s390/Makefile b/arch/s390/Makefile > index de6d8b2ea4d8..b3235ab0ace8 100644 > --- a/arch/s390/Makefile > +++ b/arch/s390/Makefile > @@ -14,10 +14,8 @@ KBUILD_AFLAGS_MODULE += -fPIC > KBUILD_CFLAGS_MODULE += -fPIC > KBUILD_AFLAGS += -m64 > KBUILD_CFLAGS += -m64 > -ifeq ($(CONFIG_RELOCATABLE),y) > KBUILD_CFLAGS += -fPIE > LDFLAGS_vmlinux := -pie > -endif > aflags_dwarf := -Wa,-gdwarf-2 > KBUILD_AFLAGS_DECOMPRESSOR := $(CLANG_FLAGS) -m64 -D__ASSEMBLY__ > ifndef CONFIG_AS_IS_LLVM > diff --git a/arch/s390/boot/Makefile b/arch/s390/boot/Makefile > index 883357a211a3..d52c3e2e16bc 100644 > --- a/arch/s390/boot/Makefile > +++ b/arch/s390/boot/Makefile > @@ -37,9 +37,8 @@ CFLAGS_sclp_early_core.o += -I$(srctree)/drivers/s390/char > > obj-y := head.o als.o startup.o mem_detect.o ipl_parm.o ipl_report.o > obj-y += string.o ebcdic.o sclp_early_core.o mem.o ipl_vmparm.o cmdline.o > -obj-y += version.o pgm_check_info.o ctype.o ipl_data.o > +obj-y += version.o pgm_check_info.o ctype.o ipl_data.o machine_kexec_reloc.o > obj-$(findstring y, $(CONFIG_PROTECTED_VIRTUALIZATION_GUEST) $(CONFIG_PGSTE)) += uv.o > -obj-$(CONFIG_RELOCATABLE) += machine_kexec_reloc.o > obj-$(CONFIG_RANDOMIZE_BASE) += kaslr.o > obj-y += $(if $(CONFIG_KERNEL_UNCOMPRESSED),,decompressor.o) info.o > obj-$(CONFIG_KERNEL_ZSTD) += clz_ctz.o > diff --git a/arch/s390/boot/startup.c b/arch/s390/boot/startup.c > index 6e7f01ca53e6..47ca3264c023 100644 > --- a/arch/s390/boot/startup.c > +++ b/arch/s390/boot/startup.c > @@ -291,8 +291,7 @@ void startup_kernel(void) > > clear_bss_section(); > copy_bootdata(); > - if (IS_ENABLED(CONFIG_RELOCATABLE)) > - handle_relocs(__kaslr_offset); > + handle_relocs(__kaslr_offset); > > if (__kaslr_offset) { > /* > -- > 2.34.1 >