a70918fbbc
rebase on Ubuntu-4.13.0-32.35 the effective kernel tree which gets compiled after patches have been applied is functionally identical (modulo parts for architectures which we don't care about and Ubuntu build files)
55 lines
1.9 KiB
Diff
55 lines
1.9 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Dave Hansen <dave.hansen@linux.intel.com>
|
|
Date: Sat, 6 Jan 2018 18:41:14 +0100
|
|
Subject: [PATCH] x86/tboot: Unbreak tboot with PTI enabled
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
commit 262b6b30087246abf09d6275eb0c0dc421bcbe38 upstream.
|
|
|
|
This is another case similar to what EFI does: create a new set of
|
|
page tables, map some code at a low address, and jump to it. PTI
|
|
mistakes this low address for userspace and mistakenly marks it
|
|
non-executable in an effort to make it unusable for userspace.
|
|
|
|
Undo the poison to allow execution.
|
|
|
|
Fixes: 385ce0ea4c07 ("x86/mm/pti: Add Kconfig")
|
|
Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
|
|
Signed-off-by: Andrea Arcangeli <aarcange@redhat.com>
|
|
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
|
Cc: Alan Cox <gnomes@lxorguk.ukuu.org.uk>
|
|
Cc: Tim Chen <tim.c.chen@linux.intel.com>
|
|
Cc: Jon Masters <jcm@redhat.com>
|
|
Cc: Dave Hansen <dave.hansen@intel.com>
|
|
Cc: Andi Kleen <andi@firstfloor.org>
|
|
Cc: Jeff Law <law@redhat.com>
|
|
Cc: Paolo Bonzini <pbonzini@redhat.com>
|
|
Cc: Linus Torvalds <torvalds@linux-foundation.org>
|
|
Cc: Greg Kroah-Hartman <gregkh@linux-foundation.org>
|
|
Cc: David" <dwmw@amazon.co.uk>
|
|
Cc: Nick Clifton <nickc@redhat.com>
|
|
Link: https://lkml.kernel.org/r/20180108102805.GK25546@redhat.com
|
|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
|
Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
|
|
---
|
|
arch/x86/kernel/tboot.c | 1 +
|
|
1 file changed, 1 insertion(+)
|
|
|
|
diff --git a/arch/x86/kernel/tboot.c b/arch/x86/kernel/tboot.c
|
|
index a2486f444073..8337730f0956 100644
|
|
--- a/arch/x86/kernel/tboot.c
|
|
+++ b/arch/x86/kernel/tboot.c
|
|
@@ -127,6 +127,7 @@ static int map_tboot_page(unsigned long vaddr, unsigned long pfn,
|
|
p4d = p4d_alloc(&tboot_mm, pgd, vaddr);
|
|
if (!p4d)
|
|
return -1;
|
|
+ pgd->pgd &= ~_PAGE_NX;
|
|
pud = pud_alloc(&tboot_mm, p4d, vaddr);
|
|
if (!pud)
|
|
return -1;
|
|
--
|
|
2.14.2
|
|
|