Received: by 2002:a05:6a10:413:0:0:0:0 with SMTP id 19csp1355970pxp; Thu, 17 Mar 2022 07:57:27 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyy9LMcKsS0Ar3gBsAKDjUzCW7SdG5vb2u/vWAzx6tPB5khqCg4ku21jAPmPXRtAjwQCL1t X-Received: by 2002:a05:6a00:1596:b0:4f9:f992:9f69 with SMTP id u22-20020a056a00159600b004f9f9929f69mr4824572pfk.7.1647529047692; Thu, 17 Mar 2022 07:57:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1647529047; cv=none; d=google.com; s=arc-20160816; b=WlY5T6n0Bs6aObF03Ymy/6mtfl4hZkcIbPqnSnuCBp0TmyxW4rsTBQ/yUqby7YkdrW FSubAQpgNbhrGqtK4tu3G/K+GA1JJFdd60BFFJE/l2ak8ZmWVGSzUThvvcdoOeCKBLv/ 1Nj/HxqXUTh0BxOcE0Eg0Kp16Ek9KcV6VvcBJ5K5ohYlXN7uEpBBQoPbsMKa13RYOrFs w/1MJaeLQdV6/AH5Y2hrVUIr30lPW/yAHRyUIcLqnN/RJ3A4X9J5GDb/N/pPAgJ0Lh/K 8qGuNWj9pIPrtu7IiiulfhMJpKcrP33b+kf0MD7iybIHK7mdWsKDpoi5IcSEIz8L0NAC 3Saw== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=MAH5zEdNGj4a27oSvXSMwrJULoAym4hCxw+jbx1nowQ=; b=l34+uF5MjElrZTOLi5xESy8g+yPAu7VbCdLoB2IbwgskYeqGlPqvAH5XeetWnJQsKi e4vDeT4ie5fos0CKoHtjHGmfeayKUuNFpm2hSAua2J0z7P0bIie5QhkDk7mzwzMSDdD/ 2731gNtkJBXQ6qQM+YuWGq8J+fSd8+sYNJRHs35Zemiwu03sVRWSE28OWMSKQ4yuggu2 dQhEVGbhuB+uLGy7g62vp1WRsbk/ERD/+t48Y7JXfHMPtgCDz5MigfABdtRH3zedYXRq rAYvJPpLqFXOL+MiRlbn/ZwDAs7SI81sHLNKeSn+xVbQCb7C9v+eRr1FqJdc9ZSOMtlw o8CQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=ipZyQE+2; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id h19-20020a63c013000000b003816043ee4dsi2209924pgg.66.2022.03.17.07.57.12; Thu, 17 Mar 2022 07:57:27 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=ipZyQE+2; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233701AbiCQMsC (ORCPT + 99 others); Thu, 17 Mar 2022 08:48:02 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35588 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233680AbiCQMr5 (ORCPT ); Thu, 17 Mar 2022 08:47:57 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 47963122221; Thu, 17 Mar 2022 05:46:41 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id DE081B81E93; Thu, 17 Mar 2022 12:46:39 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1EE9CC340E9; Thu, 17 Mar 2022 12:46:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1647521198; bh=7gd2/C+I+xWqj+l0Oq9fXfdr7bORx5BBhwegg7medfY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ipZyQE+2PYFX2y2OJTXQqopJLWqpAFtyxvZChuMBuaKeQxC2nKo8XMTAVyB8VoPrt gEZij1/5q1hp3mAEK064iiHc1iODmcXyzJaOorGtlTaoK1CunTJXengJ1lajV5ckrT 9Ocr3XdJ813Dq+AYWEzWN8PzqjeQZs8dS7SqZyYg= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, "Russell King (Oracle)" , Catalin Marinas , James Morse , Sasha Levin Subject: [PATCH 5.4 10/43] arm64: entry: Move the trampoline data page before the text page Date: Thu, 17 Mar 2022 13:45:21 +0100 Message-Id: <20220317124527.963476921@linuxfoundation.org> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220317124527.672236844@linuxfoundation.org> References: <20220317124527.672236844@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-8.6 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: James Morse commit c091fb6ae059cda563b2a4d93fdbc548ef34e1d6 upstream. The trampoline code has a data page that holds the address of the vectors, which is unmapped when running in user-space. This ensures that with CONFIG_RANDOMIZE_BASE, the randomised address of the kernel can't be discovered until after the kernel has been mapped. If the trampoline text page is extended to include multiple sets of vectors, it will be larger than a single page, making it tricky to find the data page without knowing the size of the trampoline text pages, which will vary with PAGE_SIZE. Move the data page to appear before the text page. This allows the data page to be found without knowing the size of the trampoline text pages. 'tramp_vectors' is used to refer to the beginning of the .entry.tramp.text section, do that explicitly. Reviewed-by: Russell King (Oracle) Reviewed-by: Catalin Marinas Signed-off-by: James Morse Signed-off-by: Sasha Levin --- arch/arm64/include/asm/fixmap.h | 2 +- arch/arm64/kernel/entry.S | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/arch/arm64/include/asm/fixmap.h b/arch/arm64/include/asm/fixmap.h index f987b8a8f325..2e0977c7564c 100644 --- a/arch/arm64/include/asm/fixmap.h +++ b/arch/arm64/include/asm/fixmap.h @@ -63,8 +63,8 @@ enum fixed_addresses { #endif /* CONFIG_ACPI_APEI_GHES */ #ifdef CONFIG_UNMAP_KERNEL_AT_EL0 - FIX_ENTRY_TRAMP_DATA, FIX_ENTRY_TRAMP_TEXT, + FIX_ENTRY_TRAMP_DATA, #define TRAMP_VALIAS (__fix_to_virt(FIX_ENTRY_TRAMP_TEXT)) #endif /* CONFIG_UNMAP_KERNEL_AT_EL0 */ __end_of_permanent_fixed_addresses, diff --git a/arch/arm64/kernel/entry.S b/arch/arm64/kernel/entry.S index 7e52b6991bf1..7822ecc0e165 100644 --- a/arch/arm64/kernel/entry.S +++ b/arch/arm64/kernel/entry.S @@ -1061,6 +1061,11 @@ alternative_else_nop_endif */ .endm + .macro tramp_data_page dst + adr \dst, .entry.tramp.text + sub \dst, \dst, PAGE_SIZE + .endm + .macro tramp_ventry, regsize = 64 .align 7 1: @@ -1077,7 +1082,7 @@ alternative_else_nop_endif 2: tramp_map_kernel x30 #ifdef CONFIG_RANDOMIZE_BASE - adr x30, tramp_vectors + PAGE_SIZE + tramp_data_page x30 alternative_insn isb, nop, ARM64_WORKAROUND_QCOM_FALKOR_E1003 ldr x30, [x30] #else @@ -1228,7 +1233,7 @@ ENTRY(__sdei_asm_entry_trampoline) 1: str x4, [x1, #(SDEI_EVENT_INTREGS + S_ORIG_ADDR_LIMIT)] #ifdef CONFIG_RANDOMIZE_BASE - adr x4, tramp_vectors + PAGE_SIZE + tramp_data_page x4 add x4, x4, #:lo12:__sdei_asm_trampoline_next_handler ldr x4, [x4] #else -- 2.34.1