mirror of
https://github.com/torvalds/linux.git
synced 2025-11-02 01:29:02 +02:00
x86/mm/64: Always use dynamic memory layout
Dynamic memory layout is used by KASLR and 5-level paging. CONFIG_X86_5LEVEL is going to be removed, making 5-level paging support unconditional which requires unconditional support of dynamic memory layout. Remove CONFIG_DYNAMIC_MEMORY_LAYOUT. Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Signed-off-by: Ingo Molnar <mingo@kernel.org> Reviewed-by: Ard Biesheuvel <ardb@kernel.org> Reviewed-by: Borislav Petkov (AMD) <bp@alien8.de> Cc: Jan Kiszka <jan.kiszka@siemens.com> Cc: Kieran Bingham <kbingham@kernel.org> Cc: H. Peter Anvin <hpa@zytor.com> Cc: Dave Hansen <dave.hansen@linux.intel.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Link: https://lore.kernel.org/r/20250516123306.3812286-2-kirill.shutemov@linux.intel.com
This commit is contained in:
parent
a0f3fe547e
commit
1bffe6f689
5 changed files with 1 additions and 23 deletions
|
|
@ -1467,7 +1467,6 @@ config X86_PAE
|
||||||
config X86_5LEVEL
|
config X86_5LEVEL
|
||||||
bool "Enable 5-level page tables support"
|
bool "Enable 5-level page tables support"
|
||||||
default y
|
default y
|
||||||
select DYNAMIC_MEMORY_LAYOUT
|
|
||||||
select SPARSEMEM_VMEMMAP
|
select SPARSEMEM_VMEMMAP
|
||||||
depends on X86_64
|
depends on X86_64
|
||||||
help
|
help
|
||||||
|
|
@ -2168,17 +2167,10 @@ config PHYSICAL_ALIGN
|
||||||
|
|
||||||
Don't change this unless you know what you are doing.
|
Don't change this unless you know what you are doing.
|
||||||
|
|
||||||
config DYNAMIC_MEMORY_LAYOUT
|
|
||||||
bool
|
|
||||||
help
|
|
||||||
This option makes base addresses of vmalloc and vmemmap as well as
|
|
||||||
__PAGE_OFFSET movable during boot.
|
|
||||||
|
|
||||||
config RANDOMIZE_MEMORY
|
config RANDOMIZE_MEMORY
|
||||||
bool "Randomize the kernel memory sections"
|
bool "Randomize the kernel memory sections"
|
||||||
depends on X86_64
|
depends on X86_64
|
||||||
depends on RANDOMIZE_BASE
|
depends on RANDOMIZE_BASE
|
||||||
select DYNAMIC_MEMORY_LAYOUT
|
|
||||||
default RANDOMIZE_BASE
|
default RANDOMIZE_BASE
|
||||||
help
|
help
|
||||||
Randomizes the base virtual address of kernel memory sections
|
Randomizes the base virtual address of kernel memory sections
|
||||||
|
|
|
||||||
|
|
@ -41,11 +41,7 @@
|
||||||
#define __PAGE_OFFSET_BASE_L5 _AC(0xff11000000000000, UL)
|
#define __PAGE_OFFSET_BASE_L5 _AC(0xff11000000000000, UL)
|
||||||
#define __PAGE_OFFSET_BASE_L4 _AC(0xffff888000000000, UL)
|
#define __PAGE_OFFSET_BASE_L4 _AC(0xffff888000000000, UL)
|
||||||
|
|
||||||
#ifdef CONFIG_DYNAMIC_MEMORY_LAYOUT
|
|
||||||
#define __PAGE_OFFSET page_offset_base
|
#define __PAGE_OFFSET page_offset_base
|
||||||
#else
|
|
||||||
#define __PAGE_OFFSET __PAGE_OFFSET_BASE_L4
|
|
||||||
#endif /* CONFIG_DYNAMIC_MEMORY_LAYOUT */
|
|
||||||
|
|
||||||
#define __START_KERNEL_map _AC(0xffffffff80000000, UL)
|
#define __START_KERNEL_map _AC(0xffffffff80000000, UL)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -128,15 +128,9 @@ extern unsigned int ptrs_per_p4d;
|
||||||
#define __VMEMMAP_BASE_L4 0xffffea0000000000UL
|
#define __VMEMMAP_BASE_L4 0xffffea0000000000UL
|
||||||
#define __VMEMMAP_BASE_L5 0xffd4000000000000UL
|
#define __VMEMMAP_BASE_L5 0xffd4000000000000UL
|
||||||
|
|
||||||
#ifdef CONFIG_DYNAMIC_MEMORY_LAYOUT
|
|
||||||
# define VMALLOC_START vmalloc_base
|
# define VMALLOC_START vmalloc_base
|
||||||
# define VMALLOC_SIZE_TB (pgtable_l5_enabled() ? VMALLOC_SIZE_TB_L5 : VMALLOC_SIZE_TB_L4)
|
# define VMALLOC_SIZE_TB (pgtable_l5_enabled() ? VMALLOC_SIZE_TB_L5 : VMALLOC_SIZE_TB_L4)
|
||||||
# define VMEMMAP_START vmemmap_base
|
# define VMEMMAP_START vmemmap_base
|
||||||
#else
|
|
||||||
# define VMALLOC_START __VMALLOC_BASE_L4
|
|
||||||
# define VMALLOC_SIZE_TB VMALLOC_SIZE_TB_L4
|
|
||||||
# define VMEMMAP_START __VMEMMAP_BASE_L4
|
|
||||||
#endif /* CONFIG_DYNAMIC_MEMORY_LAYOUT */
|
|
||||||
|
|
||||||
#ifdef CONFIG_RANDOMIZE_MEMORY
|
#ifdef CONFIG_RANDOMIZE_MEMORY
|
||||||
# define DIRECT_MAP_PHYSMEM_END direct_map_physmem_end
|
# define DIRECT_MAP_PHYSMEM_END direct_map_physmem_end
|
||||||
|
|
|
||||||
|
|
@ -59,14 +59,12 @@ unsigned int ptrs_per_p4d __ro_after_init = 1;
|
||||||
EXPORT_SYMBOL(ptrs_per_p4d);
|
EXPORT_SYMBOL(ptrs_per_p4d);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_DYNAMIC_MEMORY_LAYOUT
|
|
||||||
unsigned long page_offset_base __ro_after_init = __PAGE_OFFSET_BASE_L4;
|
unsigned long page_offset_base __ro_after_init = __PAGE_OFFSET_BASE_L4;
|
||||||
EXPORT_SYMBOL(page_offset_base);
|
EXPORT_SYMBOL(page_offset_base);
|
||||||
unsigned long vmalloc_base __ro_after_init = __VMALLOC_BASE_L4;
|
unsigned long vmalloc_base __ro_after_init = __VMALLOC_BASE_L4;
|
||||||
EXPORT_SYMBOL(vmalloc_base);
|
EXPORT_SYMBOL(vmalloc_base);
|
||||||
unsigned long vmemmap_base __ro_after_init = __VMEMMAP_BASE_L4;
|
unsigned long vmemmap_base __ro_after_init = __VMEMMAP_BASE_L4;
|
||||||
EXPORT_SYMBOL(vmemmap_base);
|
EXPORT_SYMBOL(vmemmap_base);
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Wipe all early page tables except for the kernel symbol map */
|
/* Wipe all early page tables except for the kernel symbol map */
|
||||||
static void __init reset_early_page_tables(void)
|
static void __init reset_early_page_tables(void)
|
||||||
|
|
|
||||||
|
|
@ -29,11 +29,9 @@ def page_mask(level=1):
|
||||||
raise Exception(f'Unknown page level: {level}')
|
raise Exception(f'Unknown page level: {level}')
|
||||||
|
|
||||||
|
|
||||||
#page_offset_base in case CONFIG_DYNAMIC_MEMORY_LAYOUT is disabled
|
|
||||||
POB_NO_DYNAMIC_MEM_LAYOUT = '0xffff888000000000'
|
|
||||||
def _page_offset_base():
|
def _page_offset_base():
|
||||||
pob_symbol = gdb.lookup_global_symbol('page_offset_base')
|
pob_symbol = gdb.lookup_global_symbol('page_offset_base')
|
||||||
pob = pob_symbol.name if pob_symbol else POB_NO_DYNAMIC_MEM_LAYOUT
|
pob = pob_symbol.name
|
||||||
return gdb.parse_and_eval(pob)
|
return gdb.parse_and_eval(pob)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue