Skip to content

Commit f0af339

Browse files
jgoulyctmarinas
authored andcommitted
arm64: add PTE_UXN/PTE_WRITE to SWAPPER_*_FLAGS
With PIE enabled, the swapper PTEs would have a Permission Indirection Index (PIIndex) of 0. A PIIndex of 0 is not currently used by any other PTEs. To avoid using index 0 specifically for the swapper PTEs, mark them as PTE_UXN and PTE_WRITE, so that they map to a PAGE_KERNEL_EXEC equivalent. This also adds PTE_WRITE to KPTI_NG_PTE_FLAGS, which was tested by booting with kpti=on. Signed-off-by: Joey Gouly <[email protected]> Cc: Will Deacon <[email protected]> Cc: Mark Rutland <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Catalin Marinas <[email protected]>
1 parent 8ef67c6 commit f0af339

File tree

3 files changed

+10
-10
lines changed

3 files changed

+10
-10
lines changed

arch/arm64/include/asm/kernel-pgtable.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -107,14 +107,14 @@
107107
/*
108108
* Initial memory map attributes.
109109
*/
110-
#define SWAPPER_PTE_FLAGS (PTE_TYPE_PAGE | PTE_AF | PTE_SHARED)
111-
#define SWAPPER_PMD_FLAGS (PMD_TYPE_SECT | PMD_SECT_AF | PMD_SECT_S)
110+
#define SWAPPER_PTE_FLAGS (PTE_TYPE_PAGE | PTE_AF | PTE_SHARED | PTE_UXN)
111+
#define SWAPPER_PMD_FLAGS (PMD_TYPE_SECT | PMD_SECT_AF | PMD_SECT_S | PTE_UXN)
112112

113113
#ifdef CONFIG_ARM64_4K_PAGES
114-
#define SWAPPER_RW_MMUFLAGS (PMD_ATTRINDX(MT_NORMAL) | SWAPPER_PMD_FLAGS)
114+
#define SWAPPER_RW_MMUFLAGS (PMD_ATTRINDX(MT_NORMAL) | SWAPPER_PMD_FLAGS | PTE_WRITE)
115115
#define SWAPPER_RX_MMUFLAGS (SWAPPER_RW_MMUFLAGS | PMD_SECT_RDONLY)
116116
#else
117-
#define SWAPPER_RW_MMUFLAGS (PTE_ATTRINDX(MT_NORMAL) | SWAPPER_PTE_FLAGS)
117+
#define SWAPPER_RW_MMUFLAGS (PTE_ATTRINDX(MT_NORMAL) | SWAPPER_PTE_FLAGS | PTE_WRITE)
118118
#define SWAPPER_RX_MMUFLAGS (SWAPPER_RW_MMUFLAGS | PTE_RDONLY)
119119
#endif
120120

arch/arm64/kernel/head.S

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -382,7 +382,7 @@ SYM_FUNC_START_LOCAL(create_idmap)
382382
adrp x0, init_idmap_pg_dir
383383
adrp x3, _text
384384
adrp x6, _end + MAX_FDT_SIZE + SWAPPER_BLOCK_SIZE
385-
mov x7, SWAPPER_RX_MMUFLAGS
385+
mov_q x7, SWAPPER_RX_MMUFLAGS
386386

387387
map_memory x0, x1, x3, x6, x7, x3, IDMAP_PGD_ORDER, x10, x11, x12, x13, x14, EXTRA_SHIFT
388388

@@ -391,7 +391,7 @@ SYM_FUNC_START_LOCAL(create_idmap)
391391
adrp x2, init_pg_dir
392392
adrp x3, init_pg_end
393393
bic x4, x2, #SWAPPER_BLOCK_SIZE - 1
394-
mov x5, SWAPPER_RW_MMUFLAGS
394+
mov_q x5, SWAPPER_RW_MMUFLAGS
395395
mov x6, #SWAPPER_BLOCK_SHIFT
396396
bl remap_region
397397

@@ -402,7 +402,7 @@ SYM_FUNC_START_LOCAL(create_idmap)
402402
bfi x22, x21, #0, #SWAPPER_BLOCK_SHIFT // remapped FDT address
403403
add x3, x2, #MAX_FDT_SIZE + SWAPPER_BLOCK_SIZE
404404
bic x4, x21, #SWAPPER_BLOCK_SIZE - 1
405-
mov x5, SWAPPER_RW_MMUFLAGS
405+
mov_q x5, SWAPPER_RW_MMUFLAGS
406406
mov x6, #SWAPPER_BLOCK_SHIFT
407407
bl remap_region
408408

@@ -430,7 +430,7 @@ SYM_FUNC_START_LOCAL(create_kernel_mapping)
430430
adrp x3, _text // runtime __pa(_text)
431431
sub x6, x6, x3 // _end - _text
432432
add x6, x6, x5 // runtime __va(_end)
433-
mov x7, SWAPPER_RW_MMUFLAGS
433+
mov_q x7, SWAPPER_RW_MMUFLAGS
434434

435435
map_memory x0, x1, x5, x6, x7, x3, (VA_BITS - PGDIR_SHIFT), x10, x11, x12, x13, x14
436436

arch/arm64/mm/proc.S

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ SYM_FUNC_END(idmap_cpu_replace_ttbr1)
199199

200200
#ifdef CONFIG_UNMAP_KERNEL_AT_EL0
201201

202-
#define KPTI_NG_PTE_FLAGS (PTE_ATTRINDX(MT_NORMAL) | SWAPPER_PTE_FLAGS)
202+
#define KPTI_NG_PTE_FLAGS (PTE_ATTRINDX(MT_NORMAL) | SWAPPER_PTE_FLAGS | PTE_WRITE)
203203

204204
.pushsection ".idmap.text", "a"
205205

@@ -290,7 +290,7 @@ SYM_TYPED_FUNC_START(idmap_kpti_install_ng_mappings)
290290
isb
291291

292292
mov temp_pte, x5
293-
mov pte_flags, #KPTI_NG_PTE_FLAGS
293+
mov_q pte_flags, KPTI_NG_PTE_FLAGS
294294

295295
/* Everybody is enjoying the idmap, so we can rewrite swapper. */
296296
/* PGD */

0 commit comments

Comments
 (0)