Unverified Commit 160ce364 authored by Palmer Dabbelt's avatar Palmer Dabbelt
Browse files

Merge remote-tracking branch 'riscv/riscv-wx-mappings' into fixes

This single commit is shared between fixes and for-next, as it fixes a
concrete bug while likely conflicting with a more invasive cleanup to
avoid these oddball mappings entirely.

* riscv/riscv-wx-mappings:
  riscv: mm: Fix W+X mappings at boot
parents da2d4880 8a4102a0
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -746,14 +746,18 @@ void __init protect_kernel_text_data(void)
	unsigned long init_data_start = (unsigned long)__init_data_begin;
	unsigned long rodata_start = (unsigned long)__start_rodata;
	unsigned long data_start = (unsigned long)_data;
	unsigned long max_low = (unsigned long)(__va(PFN_PHYS(max_low_pfn)));
#if defined(CONFIG_64BIT) && defined(CONFIG_MMU)
	unsigned long end_va = kernel_virt_addr + load_sz;
#else
	unsigned long end_va = (unsigned long)(__va(PFN_PHYS(max_low_pfn)));
#endif

	set_memory_ro(text_start, (init_text_start - text_start) >> PAGE_SHIFT);
	set_memory_ro(init_text_start, (init_data_start - init_text_start) >> PAGE_SHIFT);
	set_memory_nx(init_data_start, (rodata_start - init_data_start) >> PAGE_SHIFT);
	/* rodata section is marked readonly in mark_rodata_ro */
	set_memory_nx(rodata_start, (data_start - rodata_start) >> PAGE_SHIFT);
	set_memory_nx(data_start, (max_low - data_start) >> PAGE_SHIFT);
	set_memory_nx(data_start, (end_va - data_start) >> PAGE_SHIFT);
}

void mark_rodata_ro(void)