From patchwork Tue Sep 12 14:16:14 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ard Biesheuvel X-Patchwork-Id: 13381779 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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id B8020CA0EEE for ; Tue, 12 Sep 2023 14:19:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:Cc:To:From:Subject:Message-ID: References:Mime-Version:In-Reply-To:Date:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=ak9ngEBvTbT6oevxb0XUcoG1DOKCLSrZl/ZAylEW4PA=; b=aS0MDrqL6YEt1WvjIvj/sfycg2 G5BD/i1M7QEoP0Wf81LIpIWWpGIVj7MXNDaYbue/zZgmPBzOQStntCfT+AR6gyKTs/4itelUDbZwI Gbcp7wXsokIV7MpoTh6HWZeF+J+AGWmSX2cFpupDqYQShWhyHa0HK2SOz3vpn5Na9dipTd7kk6+BQ +fTMYawGYWF/ZhAt63Pu2RzEIqPMWsXPs8KPudZAdr3fheybGSOZX7xz++NndZnLV6GKVUEAMERTZ GbRIBfq8IoCmmX4pnx/0p65ek9/Av2P26pJULBxc4opF2A7nQJ+vQQryAzTC6aAzSxpGnRZXKw6fU CTreiPyw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qg4E3-003Wvd-2l; Tue, 12 Sep 2023 14:18:47 +0000 Received: from mail-wr1-f73.google.com ([209.85.221.73]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qg4DX-003WT3-2T for linux-arm-kernel@lists.infradead.org; Tue, 12 Sep 2023 14:18:26 +0000 Received: by mail-wr1-f73.google.com with SMTP id ffacd0b85a97d-2f2981b8364so3751685f8f.1 for ; Tue, 12 Sep 2023 07:18:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1694528292; x=1695133092; darn=lists.infradead.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=qCRUv4C5mP+SXLet0v8nI0HgZvtJcNWosvDQvUdODoE=; b=S16SCKDghUia4y3mqCHHEtAmWwFDYe5AeaYrBPEqf7lFBS0epRq87XH9rTQ5GuMssm WKjo1RjRW/b9ODjxvaNG5slGIlVBTbD9KTASIp3KGScSU7j2qkivTYxR2Goa3+GXiB0I mV/zEWCLu6stjpQYVxtMM3/jEacp4PSqVnvFiyxGwMqYVoqeL/2vsaqETKgweY0YslUS hT2KYLO2KUJ2QQauq1DDNAv1bZjLQ3XlCw7/fLmHXDQoO2PX77LP6bRAYCJPmxEWWveR bIekSekdMvp+a1VqrjjecQ44gHxFQQgovWmFFarMwn0xgjtjvIQwZMwrtD+9b8y/4Sel 7npw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694528292; x=1695133092; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=qCRUv4C5mP+SXLet0v8nI0HgZvtJcNWosvDQvUdODoE=; b=BKBieXAQ+t7JrhewNmcEmws592d9+XS388CZvVe9Kr2n/QE5wyxp1RYsXrQIoyGN8W +WhIm0T78IU0CoNc4IGQakFJSuHS6Itrq0NvOFEP+cOg9Heq+WWFKZkRio7z0WUc+akt jwi4ZMXuWU49QfsIsc4ojLbUKTcsGnAwPkO2uwijJGqKzq/AfNZveXNlckk1xsT4CWkP /aDrzR+BgIO/dISo25qv11bKsJK+IisDA3HC7qnJgqWO1NH4zlNDVD6sdNxJPhY1hAu5 wfVf/p3laUeMLws/5IVoMm5YfWDnl8Jcy5b37GvJQ26rCcowA0UJ/HFBIwyg9mygy2If CNMg== X-Gm-Message-State: AOJu0YyelSfzk/B7KV8cc7wi9q3CTqicG4fd4P/iNy4NBUDRQNvlHn/2 WDjinyfawK+TYL2DToL7Tn/TmpiY7uET+lPMRcEs+4yrZXuQQ/+/NNjTGcfjRhb0y6u/3zDCv1y kBfNT8Z3rwDg1dp+mJTjs5BdDsRi8t7Uaa2fvhalO/rSNHTQCJR9vMd076sdojhSGVBoNEWDJuu g= X-Google-Smtp-Source: AGHT+IGNLrBuW67ESmWraKM7G5DRQZjq5fQx9yU4SA7Ob9tjvMVyihpaXQntC9z+b+sH+XsvOrImV/ZQ X-Received: from palermo.c.googlers.com ([fda3:e722:ac3:cc00:28:9cb1:c0a8:118a]) (user=ardb job=sendgmr) by 2002:adf:f14f:0:b0:31a:dba9:ecfc with SMTP id y15-20020adff14f000000b0031adba9ecfcmr147176wro.8.1694528292421; Tue, 12 Sep 2023 07:18:12 -0700 (PDT) Date: Tue, 12 Sep 2023 14:16:14 +0000 In-Reply-To: <20230912141549.278777-63-ardb@google.com> Mime-Version: 1.0 References: <20230912141549.278777-63-ardb@google.com> X-Developer-Key: i=ardb@kernel.org; a=openpgp; fpr=F43D03328115A198C90016883D200E9CA6329909 X-Developer-Signature: v=1; a=openpgp-sha256; l=2825; i=ardb@kernel.org; h=from:subject; bh=0+stDv15msuniA5scr4PQhCtluP2XOOD+pMGFMh/LVQ=; b=owGbwMvMwCFmkMcZplerG8N4Wi2JIZWhaH3yk3rraxvNef4sVW2K//Nj1dyEXddyPP3q5rPYC K4qnWzcUcrCIMbBICumyCIw+++7nacnStU6z5KFmcPKBDKEgYtTACaSrMfI8Gzr7T9xZofWbWWN t6nS+1H7rjbd7ky3vUCaqdKl9xueJzP8j4suuNI0/6rVJLuYnvWrT94Nb9a3m337slKjl1Z0uNJ 1DgA= X-Mailer: git-send-email 2.42.0.283.g2d96d420d3-goog Message-ID: <20230912141549.278777-87-ardb@google.com> Subject: [PATCH v4 24/61] arm64: head: Run feature override detection before mapping the kernel From: Ard Biesheuvel To: linux-arm-kernel@lists.infradead.org Cc: Ard Biesheuvel , Catalin Marinas , Will Deacon , Marc Zyngier , Mark Rutland , Ryan Roberts , Anshuman Khandual , Kees Cook , Joey Gouly X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230912_071815_846163_552F1A5D X-CRM114-Status: GOOD ( 15.11 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org From: Ard Biesheuvel To permit the feature overrides to be taken into account before the KASLR init code runs and the kernel mapping is created, move the detection code to an earlier stage in the boot. In a subsequent patch, this will be taken advantage of by merging the preliminary and permanent mappings of the kernel text and data into a single one that gets created and relocated before start_kernel() is called. Signed-off-by: Ard Biesheuvel --- arch/arm64/kernel/head.S | 17 +++++++++-------- arch/arm64/kernel/vmlinux.lds.S | 4 +--- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/arch/arm64/kernel/head.S b/arch/arm64/kernel/head.S index 2af518161f3a..865ecc1f8255 100644 --- a/arch/arm64/kernel/head.S +++ b/arch/arm64/kernel/head.S @@ -375,9 +375,9 @@ SYM_FUNC_START_LOCAL(create_idmap) map_memory x0, x1, x3, x6, x7, x3, IDMAP_PGD_ORDER, x10, x11, x12, x13, x14, EXTRA_SHIFT - /* Remap BSS and the kernel page tables r/w in the ID map */ + /* Remap [.init].data, BSS and the kernel page tables r/w in the ID map */ adrp x1, _text - adrp x2, __bss_start + adrp x2, __initdata_begin adrp x3, _end bic x4, x2, #SWAPPER_BLOCK_SIZE - 1 mov_q x5, SWAPPER_RW_MMUFLAGS @@ -491,9 +491,6 @@ SYM_FUNC_START_LOCAL(__primary_switched) #if defined(CONFIG_KASAN_GENERIC) || defined(CONFIG_KASAN_SW_TAGS) bl kasan_early_init #endif - mov x0, x20 // pass the full boot status - mov x1, x22 // pass the low FDT mapping - bl __pi_init_feature_override // Parse cpu feature overrides #ifdef CONFIG_UNWIND_PATCH_PAC_INTO_SCS bl scs_patch_vmlinux #endif @@ -772,12 +769,16 @@ SYM_FUNC_START_LOCAL(__primary_switch) bl __pi_memset dsb ishst // Make zero page visible to PTW -#ifdef CONFIG_RELOCATABLE - adrp x23, KERNEL_START - and x23, x23, MIN_KIMG_ALIGN - 1 adrp x1, early_init_stack mov sp, x1 mov x29, xzr + mov x0, x20 // pass the full boot status + mov x1, x22 // pass the low FDT mapping + bl __pi_init_feature_override // Parse cpu feature overrides + +#ifdef CONFIG_RELOCATABLE + adrp x23, KERNEL_START + and x23, x23, MIN_KIMG_ALIGN - 1 #ifdef CONFIG_RANDOMIZE_BASE mov x0, x22 bl __pi_kaslr_early_init diff --git a/arch/arm64/kernel/vmlinux.lds.S b/arch/arm64/kernel/vmlinux.lds.S index 8a3c6aacc355..3afb4223a5e8 100644 --- a/arch/arm64/kernel/vmlinux.lds.S +++ b/arch/arm64/kernel/vmlinux.lds.S @@ -320,10 +320,8 @@ SECTIONS init_pg_end = .; /* end of zero-init region */ -#ifdef CONFIG_RELOCATABLE - . += SZ_4K; /* stack for the early relocation code */ + . += SZ_4K; /* stack for the early C runtime */ early_init_stack = .; -#endif . = ALIGN(SEGMENT_ALIGN); __pecoff_data_size = ABSOLUTE(. - __initdata_begin);