Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp4253782pxb; Mon, 8 Feb 2021 11:34:03 -0800 (PST) X-Google-Smtp-Source: ABdhPJyQVxGK9zoanx1lz51rwadAPILMXxKw32sU2LXv2TRI3iTBXo0PkGUd0ZnpoO/Qp+A7xVDa X-Received: by 2002:a17:907:767c:: with SMTP id kk28mr17953732ejc.98.1612812843680; Mon, 08 Feb 2021 11:34:03 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1612812843; cv=none; d=google.com; s=arc-20160816; b=I94bV9NC27RkrQ5U0HAtcYfCXXYoOewHq6qJdFpvrjuVX2/KE7x1xrGeAtTstS8xCg nyaWVtFyuhma/IrAFi+SBlWaN9ab0E25/RfSGQKmEIWHN0vsXFjHPK2synXDFKGiT9n5 4vuAmGJlVh7M/1Hh5utbzUNqvC5M0VzK7haMUsfCc+ywRnSHfHSuqsss+lGOE9o5lOl4 2hyv2kmZwuaCrV5FpGExQsjMy6hcpABx4WKhivO4jNZopNWFG1ae1EIzUfr0wNWJQpnp WUntFR4tXs6+hojhR+TJ0Zzsl4vAoj5lS0ot+VO3Ev6SKDfEc/bYPDr1RdSDAx9D/M08 5rNw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=dVB/fBMrYHMcF59buCHcH/EMK/nqkYZ16Y9xBu+5rXE=; b=UYwBDRIDqO4a31i0ehB+kJGYNgOE3HgfOQu5d2U3yPz/T24PTEmi+7kvVLnqD5Np7y HKa/UjVxbq/0hqEY5s4F5/hXnKG93hRfUlLxQ4K24Pizi5rofmq1hrpffdBlKWoH1LLv OlzmtKr+batJbxroCH23104Hgc8/8VORf5G686Z/6YjgX+Bl1GzqTsRHGiggJtpzTdS8 bMJXGPfQ17uI5qp+XVO6mgBzTyH64h4NwzYkpSoLujQ4heY2jpWP6Q6fLDg3UnnRa/kb LAY7Un0V9Qds2F3sLlL8BG8LKZiKLrdyiB+bdDUtCmlSRIYleTqZ1qBERgjgtRC6bNyB +nOA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=XabMr1Qw; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id m6si2887105ejl.236.2021.02.08.11.33.40; Mon, 08 Feb 2021 11:34:03 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=XabMr1Qw; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236304AbhBHTa7 (ORCPT + 99 others); Mon, 8 Feb 2021 14:30:59 -0500 Received: from mail.kernel.org ([198.145.29.99]:46598 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235119AbhBHSCl (ORCPT ); Mon, 8 Feb 2021 13:02:41 -0500 Received: by mail.kernel.org (Postfix) with ESMTPSA id 3983864ECB; Mon, 8 Feb 2021 17:58:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1612807137; bh=MwE0dRe4FlkiHM4UEKZwi9NyT1H5uA6kVgZ45xrrRhw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=XabMr1QwJGKzQfPAvLkSR+Q02JW41Xwn9yW+y9iFm+AMxEolwaazADOhCXb2rh/Ip n5EncEqiPNWgZFc1ctphzvpnG2Go17pG4SqZU9trLWipG5TA3yiZwzlZ8DX2B1h1xc Kg4q/qAhBp4xUFZNb2PRxC7662dmx21IrJiRpMv5nuo96/aMni71o/nh0u6EEsHJ12 h9UBSRZiSA5tBk7yvJwISSo+lGHcCPgOXEhg0t6hxiJ2fw0LqTS4fDLSun1R9el8OF CqP+V7ETDB69aXcBp5f15X05HwRtVb+HeGskvlyaIdFIAKjhcDvbhM02T3evefIXoM ONJl5AH25u45A== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Borislav Petkov , Arnd Bergmann , Nathan Chancellor , Ard Biesheuvel , Nick Desaulniers , Sasha Levin , linux-efi@vger.kernel.org, platform-driver-x86@vger.kernel.org, x86@kernel.org, clang-built-linux@googlegroups.com Subject: [PATCH AUTOSEL 5.10 36/36] x86/efi: Remove EFI PGD build time checks Date: Mon, 8 Feb 2021 12:58:06 -0500 Message-Id: <20210208175806.2091668-36-sashal@kernel.org> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210208175806.2091668-1-sashal@kernel.org> References: <20210208175806.2091668-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Borislav Petkov [ Upstream commit 816ef8d7a2c4182e19bc06ab65751cb9e3951e94 ] With CONFIG_X86_5LEVEL, CONFIG_UBSAN and CONFIG_UBSAN_UNSIGNED_OVERFLOW enabled, clang fails the build with x86_64-linux-ld: arch/x86/platform/efi/efi_64.o: in function `efi_sync_low_kernel_mappings': efi_64.c:(.text+0x22c): undefined reference to `__compiletime_assert_354' which happens due to -fsanitize=unsigned-integer-overflow being enabled: -fsanitize=unsigned-integer-overflow: Unsigned integer overflow, where the result of an unsigned integer computation cannot be represented in its type. Unlike signed integer overflow, this is not undefined behavior, but it is often unintentional. This sanitizer does not check for lossy implicit conversions performed before such a computation (see -fsanitize=implicit-conversion). and that fires when the (intentional) EFI_VA_START/END defines overflow an unsigned long, leading to the assertion expressions not getting optimized away (on GCC they do)... However, those checks are superfluous: the runtime services mapping code already makes sure the ranges don't overshoot EFI_VA_END as the EFI mapping range is hardcoded. On each runtime services call, it is switched to the EFI-specific PGD and even if mappings manage to escape that last PGD, this won't remain unnoticed for long. So rip them out. See https://github.com/ClangBuiltLinux/linux/issues/256 for more info. Reported-by: Arnd Bergmann Signed-off-by: Borislav Petkov Reviewed-by: Nathan Chancellor Acked-by: Ard Biesheuvel Tested-by: Nick Desaulniers Tested-by: Nathan Chancellor Link: http://lkml.kernel.org/r/20210107223424.4135538-1-arnd@kernel.org Signed-off-by: Sasha Levin --- arch/x86/platform/efi/efi_64.c | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/arch/x86/platform/efi/efi_64.c b/arch/x86/platform/efi/efi_64.c index e1e8d4e3a2139..8efd003540cae 100644 --- a/arch/x86/platform/efi/efi_64.c +++ b/arch/x86/platform/efi/efi_64.c @@ -115,31 +115,12 @@ void efi_sync_low_kernel_mappings(void) pud_t *pud_k, *pud_efi; pgd_t *efi_pgd = efi_mm.pgd; - /* - * We can share all PGD entries apart from the one entry that - * covers the EFI runtime mapping space. - * - * Make sure the EFI runtime region mappings are guaranteed to - * only span a single PGD entry and that the entry also maps - * other important kernel regions. - */ - MAYBE_BUILD_BUG_ON(pgd_index(EFI_VA_END) != pgd_index(MODULES_END)); - MAYBE_BUILD_BUG_ON((EFI_VA_START & PGDIR_MASK) != - (EFI_VA_END & PGDIR_MASK)); - pgd_efi = efi_pgd + pgd_index(PAGE_OFFSET); pgd_k = pgd_offset_k(PAGE_OFFSET); num_entries = pgd_index(EFI_VA_END) - pgd_index(PAGE_OFFSET); memcpy(pgd_efi, pgd_k, sizeof(pgd_t) * num_entries); - /* - * As with PGDs, we share all P4D entries apart from the one entry - * that covers the EFI runtime mapping space. - */ - BUILD_BUG_ON(p4d_index(EFI_VA_END) != p4d_index(MODULES_END)); - BUILD_BUG_ON((EFI_VA_START & P4D_MASK) != (EFI_VA_END & P4D_MASK)); - pgd_efi = efi_pgd + pgd_index(EFI_VA_END); pgd_k = pgd_offset_k(EFI_VA_END); p4d_efi = p4d_offset(pgd_efi, 0); -- 2.27.0