Received: by 2002:a25:ad19:0:0:0:0:0 with SMTP id y25csp7154954ybi; Mon, 8 Jul 2019 15:45:33 -0700 (PDT) X-Google-Smtp-Source: APXvYqxEPIkwXgzJN6uV9TNXdHE4noqpO+hUkBYVLRrdbf39RLoRUH+xGX+JSvZ8keeW7nIYQ0R+ X-Received: by 2002:a17:902:4aa3:: with SMTP id x32mr26822709pld.119.1562625933216; Mon, 08 Jul 2019 15:45:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1562625933; cv=none; d=google.com; s=arc-20160816; b=fM3JSmp7WImkNY+4TodGGIkiiyumiaNB1Q7HkJJcekMF09w/nEsQeLI7VoR7QrLxv1 EAYXX/8EfVRZWGdP2r3/ozb12Oc0Ra32xs0GpLLL5BZJNn6qLL++H7MPUepAKCbFjsLs K+VSxuW+kyE0JTm9Yr45shv+oRFNhdzzWxJFJdeia9SYH/kGX3Md+rLDYykjIySpATYr OWZLKobmx6vdpCXDpewGchnIx/fEVhjUb2KBjDD/RNwqmRpeglslw/UW3GvcGDpDQZYt LTIp8Ju4qs/lE4K2wkOfH3SEdCbbKvpB0SF76dIz9hSzBdTA20LsyaLVW9yBJo37vFP+ MzTg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=KxfvBRXNL2lxAGR+5TYPhVFxu0m9HvU5t0GmP1NzevA=; b=nagbIcesGrSXf2W/jN78UMjrEW/hEpjDgXDlT1lpcVX9bR+YDp2MvLNNtGeJ9Dp1ln fSKDRiLE20WdtRbVV3pZb+O/NwsQFgL+uofmtZEP/rwTEObaUU+PJs3Vw3PtUhKDCSaF 4oKlSXdqRhYAJh9dXxtbZ2xM0D74RCvA9z4Yxwod0ysftkm/e57oUHoF7BJsXspiKUWM VLWWXaq218TWSM9soCKoSPOkm0zjpiSgJlXQLBag61cTg43/DTPb3opTGHrT8CCZ7MDL nXhFHaZP9VT4iMNWgkUvJmgrZ/6MNBofvc647ghXU42IO1hqNx0v93IE17D1B4S9qP+t z3tA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=fa2IMYp5; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id m5si17101985pls.358.2019.07.08.15.45.18; Mon, 08 Jul 2019 15:45:33 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=fa2IMYp5; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2404048AbfGHRuG (ORCPT + 99 others); Mon, 8 Jul 2019 13:50:06 -0400 Received: from mail-pl1-f194.google.com ([209.85.214.194]:46025 "EHLO mail-pl1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389898AbfGHRtb (ORCPT ); Mon, 8 Jul 2019 13:49:31 -0400 Received: by mail-pl1-f194.google.com with SMTP id y8so3933345plr.12 for ; Mon, 08 Jul 2019 10:49:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=KxfvBRXNL2lxAGR+5TYPhVFxu0m9HvU5t0GmP1NzevA=; b=fa2IMYp5yxmb0mlrjbAugQfJQs7wOZE68qWJlUaWJbES77G4ch8hkfqoU7d3UuMROT miKgo0y2jPB8lvjuBXfFCgUyDKKKj0ty13J70cwhBpbZ7rgFyu6qjJWJwYvFI5KKEjHo 0NTiwMOBldPc7y1fEm3F73rASqMQHrgQtOHaY= 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:mime-version:content-transfer-encoding; bh=KxfvBRXNL2lxAGR+5TYPhVFxu0m9HvU5t0GmP1NzevA=; b=ilFbPnT8BW5AvNlrakN1UAz/cO7Hszjstdsdn20T5ic3tSN8mWIX2dKVfK9KcsAlRV oocFsryrDoJ1jF8AHWhHg31NbI0P7YTlc8klCPF+T8UN/rwhsjOb90jlbnP4bBp+LPhd KqxwGwFIHtTfFrOdGBhCD2fBkQbPIAYGrAkAlUajT7rwgtk3/vQfy+2PElasHMpivd/k Ian025WAcJKX0ZvwnidCLCkl/9/ITFJRSsYDsWTzeOe51sBbe9qdGibhlTMo0QUKPUMm uE08cA6XPwNjUDIDiGHZvQZioqVNMUVR6NxDsDA+IAR5oqNICBrBImN8o6PtXOOzUgft KSog== X-Gm-Message-State: APjAAAWtki6G1IcCYNxhEQ90lxnQoLKTdENccBmSIsApairSDa1wZR4m Oc4SfUfnHF4uTBuPYR95lTl5ow== X-Received: by 2002:a17:902:424:: with SMTP id 33mr26686735ple.151.1562608171183; Mon, 08 Jul 2019 10:49:31 -0700 (PDT) Received: from skynet.sea.corp.google.com ([2620:0:1008:1100:c4b5:ec23:d87b:d6d3]) by smtp.gmail.com with ESMTPSA id j1sm20151686pfe.101.2019.07.08.10.49.30 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Mon, 08 Jul 2019 10:49:30 -0700 (PDT) From: Thomas Garnier To: kernel-hardening@lists.openwall.com Cc: kristen@linux.intel.com, keescook@chromium.org, Thomas Garnier , Andy Lutomirski , Thomas Gleixner , Ingo Molnar , Borislav Petkov , "H. Peter Anvin" , x86@kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v8 04/11] x86/entry/64: Adapt assembly for PIE support Date: Mon, 8 Jul 2019 10:48:57 -0700 Message-Id: <20190708174913.123308-5-thgarnie@chromium.org> X-Mailer: git-send-email 2.22.0.410.gd8fdbe21b5-goog In-Reply-To: <20190708174913.123308-1-thgarnie@chromium.org> References: <20190708174913.123308-1-thgarnie@chromium.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Change the assembly code to use only relative references of symbols for the kernel to be PIE compatible. Position Independent Executable (PIE) support will allow to extend the KASLR randomization range below 0xffffffff80000000. Signed-off-by: Thomas Garnier Reviewed-by: Kees Cook --- arch/x86/entry/entry_64.S | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/arch/x86/entry/entry_64.S b/arch/x86/entry/entry_64.S index 0ea4831a72a4..9f55a359c896 100644 --- a/arch/x86/entry/entry_64.S +++ b/arch/x86/entry/entry_64.S @@ -1309,7 +1309,8 @@ ENTRY(error_entry) movl %ecx, %eax /* zero extend */ cmpq %rax, RIP+8(%rsp) je .Lbstep_iret - cmpq $.Lgs_change, RIP+8(%rsp) + leaq .Lgs_change(%rip), %rcx + cmpq %rcx, RIP+8(%rsp) jne .Lerror_entry_done /* @@ -1506,10 +1507,10 @@ ENTRY(nmi) * resume the outer NMI. */ - movq $repeat_nmi, %rdx + leaq repeat_nmi(%rip), %rdx cmpq 8(%rsp), %rdx ja 1f - movq $end_repeat_nmi, %rdx + leaq end_repeat_nmi(%rip), %rdx cmpq 8(%rsp), %rdx ja nested_nmi_out 1: @@ -1563,7 +1564,8 @@ nested_nmi: pushq %rdx pushfq pushq $__KERNEL_CS - pushq $repeat_nmi + leaq repeat_nmi(%rip), %rdx + pushq %rdx /* Put stack back */ addq $(6*8), %rsp @@ -1602,7 +1604,11 @@ first_nmi: addq $8, (%rsp) /* Fix up RSP */ pushfq /* RFLAGS */ pushq $__KERNEL_CS /* CS */ - pushq $1f /* RIP */ + pushq $0 /* Future return address */ + pushq %rax /* Save RAX */ + leaq 1f(%rip), %rax /* RIP */ + movq %rax, 8(%rsp) /* Put 1f on return address */ + popq %rax /* Restore RAX */ iretq /* continues at repeat_nmi below */ UNWIND_HINT_IRET_REGS 1: -- 2.22.0.410.gd8fdbe21b5-goog