From patchwork Sun Sep 3 12:07:38 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ard Biesheuvel X-Patchwork-Id: 9936185 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id DB4956037D for ; Sun, 3 Sep 2017 12:14:43 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id CCB172623C for ; Sun, 3 Sep 2017 12:14:43 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C16EE26E96; Sun, 3 Sep 2017 12:14:43 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [65.50.211.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 1DAED2623D for ; Sun, 3 Sep 2017 12:14:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To:Message-Id:Date:Subject:To:From:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=evwYCXctbZhxFL+cFR1wBe7lWMmXK16/HVRG4xDCmnA=; b=iybbMfO9zzugEObxISXVmmPzMI vbjXInpB4n/ZaWTJZUmggg4yfsG5NmRiPphiB7kfRQpDfHvOGA+/ldybR5PERpNjpxIWuVAAHOwlu tmmtqbwKhNfBk2DfDfWjr5nSjoJ3HDjiV7TIin+fmNwffirnGrtg72iQuXuXEzL4V/GeAtSbenpYO Sc0O0W9dr/JsKj2PIit7HTmq26OYoNY0UlfoEupRGxrwe0OK1dl5GCsVWJUNrDM+g38qH6Tp4uYyx gM2j1gSSze8C50tKSQmpSboOkazwXVwm6HdC5C1nyNo3fyf0KkFl7UdXSrLDWK9DMyHs9YDhhDYt/ TDZ89Gtg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.87 #1 (Red Hat Linux)) id 1doTmh-00077C-Dy; Sun, 03 Sep 2017 12:13:51 +0000 Received: from mail-wm0-x22b.google.com ([2a00:1450:400c:c09::22b]) by bombadil.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux)) id 1doTi7-0001Wh-Ll for linux-arm-kernel@lists.infradead.org; Sun, 03 Sep 2017 12:09:11 +0000 Received: by mail-wm0-x22b.google.com with SMTP id i145so6763596wmf.1 for ; Sun, 03 Sep 2017 05:08:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=6DMlP6p2IcVDDcSn2jy0crE7sHidF0DAWiWb065R4J4=; b=XaSHyiewcvhcYj6oC8Y+zEyyJzDRGFIWrkPmkyGOYgQIT0OrtugWOvygJ6TJveDJio 7jMAe+RH3uV+BOQdwZpWSflhRTqyBDXx3PI28z26RWnqe2i7Xuz+OeNxMI+A3kt5klxU YCR8hWEVbxanyi1hPYgR41Zn3qpZCAhK6KND0= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=6DMlP6p2IcVDDcSn2jy0crE7sHidF0DAWiWb065R4J4=; b=eau5XSQWEFPbh75pyV43Knw+tfRmkAv1rCdFWDooEOVk9EDK3PorKM4aBL2mil/E4m ldDJ1G7o7DBl0rct9poRB8YS7BVji+ImNuKAlPlNbJksR+F2ztO0hVKiwWbgEe1YmxMM wvDVpL/fqooJsilJ9Ak3lazQK/W0AL5k92KjYtPhqSqiEJYEqKaJJOK8CI+7zfPXcOW9 /4YvNLknE5BU4Ifax197urqqAApQfWhlYXPhU7WGGuhpoxJcUZwPYO7evHMefPm2YErx CTigYnzuV31EW5iVCQ8j8jhvTpfgL/6jOTImtLku2g8AbXvf27hVFZNGmgl+acHureuM rVqA== X-Gm-Message-State: AHPjjUhFt2Dcf18RPHAn+FXsEp/W97R9gsZOx7msBb8fBSM2qnilY+Is iSYusw6BZGtlGZtLq05QzQ== X-Google-Smtp-Source: ADKCNb7t0jEt/vW5WFS+vIPzEYNaKxXCLLOcJtNVwzTwNseSLnQJ0Qha0hltMyukhhHEtJiXESzVXw== X-Received: by 10.28.216.211 with SMTP id p202mr2467095wmg.100.1504440529065; Sun, 03 Sep 2017 05:08:49 -0700 (PDT) Received: from localhost.localdomain ([154.151.223.220]) by smtp.gmail.com with ESMTPSA id b196sm4392664wmd.29.2017.09.03.05.08.46 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 03 Sep 2017 05:08:48 -0700 (PDT) From: Ard Biesheuvel To: linux-arm-kernel@lists.infradead.org, kernel-hardening@lists.openwall.com Subject: [PATCH v2 10/29] ARM: head.S: use PC-relative insn sequences for __fixup_pv_table Date: Sun, 3 Sep 2017 13:07:38 +0100 Message-Id: <20170903120757.14968-11-ard.biesheuvel@linaro.org> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170903120757.14968-1-ard.biesheuvel@linaro.org> References: <20170903120757.14968-1-ard.biesheuvel@linaro.org> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20170903_050908_144934_DDE63759 X-CRM114-Status: GOOD ( 10.04 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Mark Rutland , Kees Cook , Arnd Bergmann , Nicolas Pitre , Marc Zyngier , Ard Biesheuvel , Russell King , Dave Martin , Tony Lindgren , Thomas Garnier , Matt Fleming MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP Replace the open coded PC relative offset calculations with adr_l and mov_l invocations. This ensures these quantities are invariant under runtime relocation. Cc: Russell King Signed-off-by: Ard Biesheuvel Acked-by: Nicolas Pitre --- arch/arm/kernel/head.S | 27 ++++++-------------- 1 file changed, 8 insertions(+), 19 deletions(-) diff --git a/arch/arm/kernel/head.S b/arch/arm/kernel/head.S index db6b823f20a4..f607e290ef4b 100644 --- a/arch/arm/kernel/head.S +++ b/arch/arm/kernel/head.S @@ -578,14 +578,11 @@ ENDPROC(fixup_smp) */ __HEAD __fixup_pv_table: - adr r0, 1f - ldmia r0, {r3-r7} + adr_l r6, __pv_phys_pfn_offset + adr_l r7, __pv_offset @ __pa(__pv_offset) + mov_l r3, __pv_offset @ __va(__pv_offset) mvn ip, #0 - subs r3, r0, r3 @ PHYS_OFFSET - PAGE_OFFSET - add r4, r4, r3 @ adjust table start address - add r5, r5, r3 @ adjust table end address - add r6, r6, r3 @ adjust __pv_phys_pfn_offset address - add r7, r7, r3 @ adjust __pv_offset address + subs r3, r7, r3 @ PHYS_OFFSET - PAGE_OFFSET mov r0, r8, lsr #PAGE_SHIFT @ convert to PFN str r0, [r6] @ save computed PHYS_OFFSET to __pv_phys_pfn_offset strcc ip, [r7, #HIGH_OFFSET] @ save to __pv_offset high bits @@ -594,20 +591,15 @@ __fixup_pv_table: THUMB( it ne @ cross section branch ) bne __error str r3, [r7, #LOW_OFFSET] @ save to __pv_offset low bits + adr_l r4, __pv_table_begin + adr_l r5, __pv_table_end b __fixup_a_pv_table ENDPROC(__fixup_pv_table) - - .align -1: .long . - .long __pv_table_begin - .long __pv_table_end -2: .long __pv_phys_pfn_offset - .long __pv_offset + .ltorg .text __fixup_a_pv_table: - adr r0, 3f - ldr r6, [r0] + mov_l r6, __pv_offset add r6, r6, r3 ldr r0, [r6, #HIGH_OFFSET] @ pv_offset high word ldr r6, [r6, #LOW_OFFSET] @ pv_offset low word @@ -676,9 +668,6 @@ ARM_BE8(rev16 ip, ip) #endif ENDPROC(__fixup_a_pv_table) - .align -3: .long __pv_offset - ENTRY(fixup_pv_table) stmfd sp!, {r4 - r7, lr} mov r3, #0 @ no offset