* [PATCH] s390: always build relocatable kernel
@ 2022-10-30 18:22 Heiko Carstens
2022-10-31 15:55 ` Nathan Chancellor
0 siblings, 1 reply; 2+ messages in thread
From: Heiko Carstens @ 2022-10-30 18:22 UTC (permalink / raw)
To: Vasily Gorbik, Alexander Gordeev, Nathan Chancellor
Cc: Sven Schnelle, Christian Borntraeger, Ulrich Weigand,
Gerald Schaefer, linux-s390
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@linux.ibm.com>
---
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
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] s390: always build relocatable kernel
2022-10-30 18:22 [PATCH] s390: always build relocatable kernel Heiko Carstens
@ 2022-10-31 15:55 ` Nathan Chancellor
0 siblings, 0 replies; 2+ messages in thread
From: Nathan Chancellor @ 2022-10-31 15:55 UTC (permalink / raw)
To: Heiko Carstens
Cc: Vasily Gorbik, Alexander Gordeev, Sven Schnelle,
Christian Borntraeger, Ulrich Weigand, Gerald Schaefer,
linux-s390
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@linux.ibm.com>
Tested-by: Nathan Chancellor <nathan@kernel.org>
> ---
> 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
>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2022-10-31 15:55 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-10-30 18:22 [PATCH] s390: always build relocatable kernel Heiko Carstens
2022-10-31 15:55 ` Nathan Chancellor
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.