From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751972AbcHANxB (ORCPT ); Mon, 1 Aug 2016 09:53:01 -0400 Received: from mail-wm0-f53.google.com ([74.125.82.53]:38821 "EHLO mail-wm0-f53.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751452AbcHANvy (ORCPT ); Mon, 1 Aug 2016 09:51:54 -0400 Date: Mon, 1 Aug 2016 14:49:57 +0100 From: Matt Fleming To: Alex Thorlton Cc: linux-kernel@vger.kernel.org, Russ Anderson , Mike Travis , Borislav Petkov , Thomas Gleixner , Ingo Molnar , "H. Peter Anvin" , x86@kernel.org Subject: Re: [PATCH] Skip UV runtime services mapping in the efi_runtime_disabled case Message-ID: <20160801134957.GH3636@codeblueprint.co.uk> References: <1469572713-113354-1-git-send-email-athorlton@sgi.com> <1469572713-113354-2-git-send-email-athorlton@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1469572713-113354-2-git-send-email-athorlton@sgi.com> User-Agent: Mutt/1.5.24+41 (02bc14ed1569) (2015-08-30) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, 26 Jul, at 05:38:33PM, Alex Thorlton wrote: > This problem has actually been in the UV code for a while, but we didn't > catch it until recently, because we had been relying on EFI_OLD_MEMMAP > to allow our systems to boot for a period of time. We noticed the issue > when trying to kexec a recent community kernel, where we hit this NULL > pointer dereference in efi_sync_low_kernel_mappings: > > [ 0.337515] BUG: unable to handle kernel NULL pointer dereference at 0000000000000880 > [ 0.346276] IP: [] efi_sync_low_kernel_mappings+0x5d/0x1b0 > > The problem doesn't show up with EFI_OLD_MEMMAP because we skip the > chunk of setup_efi_state that sets the efi_loader_signature for the > kexec'd kernel. When the kexec'd kernel boots, it won't set EFI_BOOT in > setup_arch, so we completely avoid the bug. > > We always kexec with noefi on the command line, so this shouldn't be an > issue, but since we're not actually checking for efi_runtime_disabled in > uv_bios_init, we end up trying to do EFI runtime callbacks when we > shouldn't be. This patch just adds a check for efi_runtime_disabled in > uv_bios_init so that we don't map in uv_systab when runtime_disabled == > true. > > Signed-off-by: Alex Thorlton > Cc: Russ Anderson > Cc: Mike Travis > Cc: Matt Fleming > Cc: Borislav Petkov > Cc: Thomas Gleixner > Cc: Ingo Molnar > Cc: "H. Peter Anvin" > Cc: x86@kernel.org > --- > arch/x86/platform/uv/bios_uv.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/arch/x86/platform/uv/bios_uv.c b/arch/x86/platform/uv/bios_uv.c > index 66b2166..0df8a03 100644 > --- a/arch/x86/platform/uv/bios_uv.c > +++ b/arch/x86/platform/uv/bios_uv.c > @@ -187,7 +187,8 @@ EXPORT_SYMBOL_GPL(uv_bios_set_legacy_vga_target); > void uv_bios_init(void) > { > uv_systab = NULL; > - if ((efi.uv_systab == EFI_INVALID_TABLE_ADDR) || !efi.uv_systab) { > + if ((efi.uv_systab == EFI_INVALID_TABLE_ADDR) || > + !efi.uv_systab || efi_runtime_disabled()) { > pr_crit("UV: UVsystab: missing\n"); > return; > } The fix looks fine, but I'm losing track of which kernels this patch should be applied to. Does it just need to be applied for v4.8 or earlier kernels too?