From mboxrd@z Thu Jan 1 00:00:00 1970 From: Borislav Petkov Subject: Re: [PATCH 11/70] x86/boot/compressed/64: Disable red-zone usage Date: Tue, 31 Mar 2020 15:16:06 +0200 Message-ID: <20200331131606.GC29131@zn.tnic> References: <20200319091407.1481-1-joro@8bytes.org> <20200319091407.1481-12-joro@8bytes.org> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Return-path: Content-Disposition: inline In-Reply-To: <20200319091407.1481-12-joro@8bytes.org> Sender: linux-kernel-owner@vger.kernel.org To: Joerg Roedel Cc: x86@kernel.org, hpa@zytor.com, Andy Lutomirski , Dave Hansen , Peter Zijlstra , Thomas Hellstrom , Jiri Slaby , Dan Williams , Tom Lendacky , Juergen Gross , Kees Cook , linux-kernel@vger.kernel.org, kvm@vger.kernel.org, virtualization@lists.linux-foundation.org, Joerg Roedel List-Id: virtualization@lists.linuxfoundation.org On Thu, Mar 19, 2020 at 10:13:08AM +0100, Joerg Roedel wrote: > From: Joerg Roedel > > The x86-64 ABI defines a red-zone on the stack: > > The 128-byte area beyond the location pointed to by %rsp is > considered to be reserved and shall not be modified by signal or > interrupt handlers. 10 Therefore, functions may use this area for ^^ That 10 is the footnote number from the pdf. :) > temporary data that is not needed across function calls. In > particular, leaf functions may use this area for their entire stack > frame, rather than adjusting the stack pointer in the prologue and > epilogue. This area is known as the red zone. > > This is not compatible with exception handling, so disable it for the I could use some blurb as to what the problem is, for future reference. > pre-decompression boot code. > > Signed-off-by: Joerg Roedel > --- > arch/x86/boot/Makefile | 2 +- > arch/x86/boot/compressed/Makefile | 4 ++-- > 2 files changed, 3 insertions(+), 3 deletions(-) > > diff --git a/arch/x86/boot/Makefile b/arch/x86/boot/Makefile > index 012b82fc8617..8f55e4ce1ccc 100644 > --- a/arch/x86/boot/Makefile > +++ b/arch/x86/boot/Makefile > @@ -65,7 +65,7 @@ clean-files += cpustr.h > > # --------------------------------------------------------------------------- > > -KBUILD_CFLAGS := $(REALMODE_CFLAGS) -D_SETUP > +KBUILD_CFLAGS := $(REALMODE_CFLAGS) -D_SETUP -mno-red-zone > KBUILD_AFLAGS := $(KBUILD_CFLAGS) -D__ASSEMBLY__ > KBUILD_CFLAGS += $(call cc-option,-fmacro-prefix-map=$(srctree)/=) > GCOV_PROFILE := n > diff --git a/arch/x86/boot/compressed/Makefile b/arch/x86/boot/compressed/Makefile > index 26050ae0b27e..e186cc0b628d 100644 > --- a/arch/x86/boot/compressed/Makefile > +++ b/arch/x86/boot/compressed/Makefile > @@ -30,7 +30,7 @@ KBUILD_CFLAGS := -m$(BITS) -O2 > KBUILD_CFLAGS += -fno-strict-aliasing $(call cc-option, -fPIE, -fPIC) > KBUILD_CFLAGS += -DDISABLE_BRANCH_PROFILING > cflags-$(CONFIG_X86_32) := -march=i386 > -cflags-$(CONFIG_X86_64) := -mcmodel=small > +cflags-$(CONFIG_X86_64) := -mcmodel=small -mno-red-zone > KBUILD_CFLAGS += $(cflags-y) > KBUILD_CFLAGS += -mno-mmx -mno-sse > KBUILD_CFLAGS += $(call cc-option,-ffreestanding) > @@ -87,7 +87,7 @@ endif > > vmlinux-objs-$(CONFIG_ACPI) += $(obj)/acpi.o > > -$(obj)/eboot.o: KBUILD_CFLAGS += -fshort-wchar -mno-red-zone > +$(obj)/eboot.o: KBUILD_CFLAGS += -fshort-wchar > > vmlinux-objs-$(CONFIG_EFI_STUB) += $(obj)/eboot.o \ > $(objtree)/drivers/firmware/efi/libstub/lib.a That last chunk is not needed anymore after c2d0b470154c ("efi/libstub/x86: Incorporate eboot.c into libstub") AFAICT. -- Regards/Gruss, Boris. https://people.kernel.org/tglx/notes-about-netiquette