Re: [PATCH] arm64: remove TEXT_OFFSET randomization

Mark Rutland
2020-06-15T10:27:10Z

On Mon, Jun 15, 2020 at 12:19:39PM +0200, Ard Biesheuvel wrote:
> TEXT_OFFSET was recently changed to 0x0, in preparation for its removal
> at a later stage, and a warning is emitted into the kernel log when the
> bootloader appears to have failed to take the TEXT_OFFSET image header
> value into account.
>
> Ironically, this warning itself fails to take TEXT_OFFSET into account,
> and compares the kernel image's alignment modulo 2M against a hardcoded
> value of 0x0, and so the warning will trigger spuriously when TEXT_OFFSET
> randomization is enabled.
>
> Given the intent to get rid of TEXT_OFFSET entirely, let's fix this
> oversight by just removing support for TEXT_OFFSET randomization.
>
> Signed-off-by: Ard Biesheuvel <ardb@kernel.org>

If nothing else, it's nice to see the scary awk go, so:

Acked-by: Mark Rutland <mark.rutland@arm.com>

Mark.

> ---
> arch/arm64/Kconfig.debug | 15 ---------------
> arch/arm64/Makefile | 6 ------
> 2 files changed, 21 deletions(-)
>
> diff --git a/arch/arm64/Kconfig.debug b/arch/arm64/Kconfig.debug
> index cdf7ec0b975e..265c4461031f 100644
> --- a/arch/arm64/Kconfig.debug
> +++ b/arch/arm64/Kconfig.debug
> @@ -8,21 +8,6 @@ config PID_IN_CONTEXTIDR
> instructions during context switch. Say Y here only if you are
> planning to use hardware trace tools with this kernel.
>
> -config ARM64_RANDOMIZE_TEXT_OFFSET
> - bool "Randomize TEXT_OFFSET at build time"
> - help
> - Say Y here if you want the image load offset (AKA TEXT_OFFSET)
> - of the kernel to be randomized at build-time. When selected,
> - this option will cause TEXT_OFFSET to be randomized upon any
> - build of the kernel, and the offset will be reflected in the
> - text_offset field of the resulting Image. This can be used to
> - fuzz-test bootloaders which respect text_offset.
> -
> - This option is intended for bootloader and/or kernel testing
> - only. Bootloaders must make no assumptions regarding the value
> - of TEXT_OFFSET and platforms must not require a specific
> - value.
> -
> config DEBUG_EFI
> depends on EFI && DEBUG_INFO
> bool "UEFI debugging"
> diff --git a/arch/arm64/Makefile b/arch/arm64/Makefile
> index 76359cfb328a..a0d94d063fa8 100644
> --- a/arch/arm64/Makefile
> +++ b/arch/arm64/Makefile
> @@ -121,13 +121,7 @@ endif
> head-y := arch/arm64/kernel/head.o
>
> # The byte offset of the kernel image in RAM from the start of RAM.
> -ifeq ($(CONFIG_ARM64_RANDOMIZE_TEXT_OFFSET), y)
> -TEXT_OFFSET := $(shell awk "BEGIN {srand(); printf \"0x%06x\n\", \
> - int(2 * 1024 * 1024 / (2 ^ $(CONFIG_ARM64_PAGE_SHIFT)) * \
> - rand()) * (2 ^ $(CONFIG_ARM64_PAGE_SHIFT))}")
> -else
> TEXT_OFFSET := 0x0
> -endif
>
> ifeq ($(CONFIG_KASAN_SW_TAGS), y)
> KASAN_SHADOW_SCALE_SHIFT := 4
> --
> 2.27.0
>