Skip to content

Commit d4d3ef8

Browse files
MQ-mengqingtsbogend
authored andcommitted
MIPS: relocatable: Provide kaslr_offset() to get the kernel offset
Provide kaslr_offset() to get the kernel offset when KASLR is enabled. Error may occur before update_kaslr_offset(), so put it at the end of the offset branch. Fixes: a307a4c ("MIPS: Loongson64: Add KASLR support") Reported-by: kernel test robot <[email protected]> Signed-off-by: Jinyang He <[email protected]> Signed-off-by: Thomas Bogendoerfer <[email protected]>
1 parent 1ddc96b commit d4d3ef8

File tree

3 files changed

+19
-0
lines changed

3 files changed

+19
-0
lines changed

arch/mips/include/asm/page.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,12 @@ extern bool __virt_addr_valid(const volatile void *kaddr);
255255

256256
#define VM_DATA_DEFAULT_FLAGS VM_DATA_FLAGS_TSK_EXEC
257257

258+
extern unsigned long __kaslr_offset;
259+
static inline unsigned long kaslr_offset(void)
260+
{
261+
return __kaslr_offset;
262+
}
263+
258264
#include <asm-generic/memory_model.h>
259265
#include <asm-generic/getorder.h>
260266

arch/mips/kernel/relocate.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -300,6 +300,13 @@ static inline int __init relocation_addr_valid(void *loc_new)
300300
return 1;
301301
}
302302

303+
static inline void __init update_kaslr_offset(unsigned long *addr, long offset)
304+
{
305+
unsigned long *new_addr = (unsigned long *)RELOCATED(addr);
306+
307+
*new_addr = (unsigned long)offset;
308+
}
309+
303310
#if defined(CONFIG_USE_OF)
304311
void __weak *plat_get_fdt(void)
305312
{
@@ -410,6 +417,9 @@ void *__init relocate_kernel(void)
410417

411418
/* Return the new kernel's entry point */
412419
kernel_entry = RELOCATED(start_kernel);
420+
421+
/* Error may occur before, so keep it at last */
422+
update_kaslr_offset(&__kaslr_offset, offset);
413423
}
414424
out:
415425
return kernel_entry;

arch/mips/kernel/setup.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,9 @@ static struct resource code_resource = { .name = "Kernel code", };
8484
static struct resource data_resource = { .name = "Kernel data", };
8585
static struct resource bss_resource = { .name = "Kernel bss", };
8686

87+
unsigned long __kaslr_offset __ro_after_init;
88+
EXPORT_SYMBOL(__kaslr_offset);
89+
8790
static void *detect_magic __initdata = detect_memory_region;
8891

8992
#ifdef CONFIG_MIPS_AUTO_PFN_OFFSET

0 commit comments

Comments
 (0)