From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 413B0C433FE for ; Wed, 10 Nov 2021 10:57:02 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 2CF5D61246 for ; Wed, 10 Nov 2021 10:57:02 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231573AbhKJK7s (ORCPT ); Wed, 10 Nov 2021 05:59:48 -0500 Received: from mail.ispras.ru ([83.149.199.84]:53950 "EHLO mail.ispras.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231478AbhKJK7k (ORCPT ); Wed, 10 Nov 2021 05:59:40 -0500 Received: from localhost.localdomain (unknown [80.240.223.29]) by mail.ispras.ru (Postfix) with ESMTPSA id BE4DF40D3BFF; Wed, 10 Nov 2021 10:47:00 +0000 (UTC) From: Baskov Evgeniy To: Ard Biesheuvel Cc: Baskov Evgeniy , Borislav Petkov , Dave Hansen , Ingo Molnar , Jonathan Corbet , Thomas Gleixner , x86@kernel.org, linux-doc@vger.kernel.org, linux-efi@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH RFC 1/5] efi/x86: Disable paging when booting via efistub Date: Wed, 10 Nov 2021 13:46:09 +0300 Message-Id: <20211110104613.23881-2-baskov@ispras.ru> X-Mailer: git-send-email 2.33.1 In-Reply-To: <20211110104613.23881-1-baskov@ispras.ru> References: <20211110104613.23881-1-baskov@ispras.ru> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Some UEFI implementations protect lower 1M memory regions and memory regions allocated by libstub from being executable, which prevents Linux kernel from booting. Disable paging after returning from efi_main() before jumping to potentially relocated code to prevent page fault from happening. Signed-off-by: Baskov Evgeniy --- arch/x86/boot/compressed/head_32.S | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/arch/x86/boot/compressed/head_32.S b/arch/x86/boot/compressed/head_32.S index 659fad53ca82..c66fccaa90a2 100644 --- a/arch/x86/boot/compressed/head_32.S +++ b/arch/x86/boot/compressed/head_32.S @@ -156,6 +156,18 @@ SYM_FUNC_START_ALIAS(efi_stub_entry) add $0x4, %esp movl 8(%esp), %esi /* save boot_params pointer */ call efi_main + +#ifdef CONFIG_EFI_STRICT_PGTABLE + /* + * Disable paging before jumping to relocated address to prevent + * page faulting on EFI firmware versions that enforces restricted + * permissions on identity page tables + */ + movl %cr0, %ecx + btrl $31, %ecx + movl %ecx, %cr0 +#endif + /* efi_main returns the possibly relocated address of startup_32 */ jmp *%eax SYM_FUNC_END(efi32_stub_entry) -- 2.33.1