[PATCH 2/3] x86/pti: Call pti_init() after mark_readonly()

From: Joerg Roedel
Date: Tue Jul 03 2018 - 07:52:41 EST


From: Joerg Roedel <jroedel@xxxxxxx>

PTI init code clones some parts of the kernel mappings to the user-space
page-table. For the kernel and user-space page-table to be consistent,
the cloning should happen when the relevant parts of the kernel
page-table are finished, which is right after mark_readonly() returns.

Signed-off-by: Joerg Roedel <jroedel@xxxxxxx>
---
init/main.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/init/main.c b/init/main.c
index 3b4ada1..0b5d0f1 100644
--- a/init/main.c
+++ b/init/main.c
@@ -524,8 +524,6 @@ static void __init mm_init(void)
ioremap_huge_init();
/* Should be run before the first non-init thread is created */
init_espfix_bsp();
- /* Should be run after espfix64 is set up. */
- pti_init();
}

asmlinkage __visible void __init start_kernel(void)
@@ -1065,6 +1063,12 @@ static int __ref kernel_init(void *unused)
jump_label_invalidate_initmem();
free_initmem();
mark_readonly();
+ /*
+ * Kernel text/rodata/data sections have the right protections
+ * now. If necessary, init PTI and clone the relevant pieces
+ * to the user-space page-table.
+ */
+ pti_init();
system_state = SYSTEM_RUNNING;
numa_default_policy();

--
2.7.4