Re: [tip:x86/boot] ACPI/NUMA: Add warning message if the padding size for KASLR is not enough
On Wed, Oct 03, 2018 at 02:48:14PM +0200, Borislav Petkov wrote: > On Wed, Oct 03, 2018 at 02:34:02PM +0200, Peter Zijlstra wrote: > > > > Subject: ACPI/NUMA: Fix KASLR build error > > > > There is no point in trying to compile KASLR specific code when there is > > no KASLR. > > > > Signed-off-by: Peter Zijlstra (Intel) > > --- > > Yeah, Peter and I were just talking on IRC and he gave me a much better > idea how to fix this, see below. I'll run this through the *config builder and > commit it if no complaints. Hi Boris and Peter, Thank you for the fix. It is great! - Masa > > --- > From: "Peter Zijlstra (Intel)" > Date: Wed, 3 Oct 2018 14:41:27 +0200 > Subject: [PATCH] ACPI/NUMA: Fix KASLR build error > > There is no point in trying to compile KASLR specific code when there is > no KASLR. > > [ bp: Move the whole crap into kaslr.c and make >rand_mem_physical_padding static. ] > > Signed-off-by: Peter Zijlstra (Intel) > Signed-off-by: Borislav Petkov > Cc: > Cc: > Cc: > Cc: > Cc: > Cc: > Link: > http://lkml.kernel.org/r/20181003123402.ga15...@hirez.programming.kicks-ass.net > --- > arch/x86/include/asm/kaslr.h | 2 ++ > arch/x86/include/asm/setup.h | 2 -- > arch/x86/mm/kaslr.c | 18 +- > drivers/acpi/numa.c | 15 +++ > 4 files changed, 22 insertions(+), 15 deletions(-) > > diff --git a/arch/x86/include/asm/kaslr.h b/arch/x86/include/asm/kaslr.h > index db7ba2feb947..95ef3fc01d12 100644 > --- a/arch/x86/include/asm/kaslr.h > +++ b/arch/x86/include/asm/kaslr.h > @@ -6,8 +6,10 @@ unsigned long kaslr_get_random_long(const char *purpose); > > #ifdef CONFIG_RANDOMIZE_MEMORY > void kernel_randomize_memory(void); > +void kaslr_check_padding(void); > #else > static inline void kernel_randomize_memory(void) { } > +static inline void kaslr_check_padding(void) { } > #endif /* CONFIG_RANDOMIZE_MEMORY */ > > #endif > diff --git a/arch/x86/include/asm/setup.h b/arch/x86/include/asm/setup.h > index 65a5bf8f6aba..ae13bc974416 100644 > --- a/arch/x86/include/asm/setup.h > +++ b/arch/x86/include/asm/setup.h > @@ -80,8 +80,6 @@ static inline unsigned long kaslr_offset(void) > return (unsigned long)&_text - __START_KERNEL; > } > > -extern int rand_mem_physical_padding; > - > /* > * Do NOT EVER look at the BIOS memory size location. > * It does not work on many machines. > diff --git a/arch/x86/mm/kaslr.c b/arch/x86/mm/kaslr.c > index 00cf4cae38f5..d58b7da0d55c 100644 > --- a/arch/x86/mm/kaslr.c > +++ b/arch/x86/mm/kaslr.c > @@ -40,7 +40,7 @@ > */ > static const unsigned long vaddr_end = CPU_ENTRY_AREA_BASE; > > -int __initdata rand_mem_physical_padding = > CONFIG_RANDOMIZE_MEMORY_PHYSICAL_PADDING; > +static int __initdata rand_mem_physical_padding = > CONFIG_RANDOMIZE_MEMORY_PHYSICAL_PADDING; > /* > * Memory regions randomized by KASLR (except modules that use a separate > logic > * earlier during boot). The list is ordered based on virtual addresses. This > @@ -70,6 +70,22 @@ static inline bool kaslr_memory_enabled(void) > return kaslr_enabled() && !IS_ENABLED(CONFIG_KASAN); > } > > +/* > + * Check the padding size for KASLR is enough. > + */ > +void kaslr_check_padding(void) > +{ > + u64 max_possible_phys, max_actual_phys, threshold; > + > + max_actual_phys = roundup(PFN_PHYS(max_pfn), 1ULL << 40); > + max_possible_phys = roundup(PFN_PHYS(max_possible_pfn), 1ULL << 40); > + threshold = max_actual_phys + ((u64)rand_mem_physical_padding << 40); > + > + if (max_possible_phys > threshold) > + pr_warn("Set 'rand_mem_physical_padding=%llu' to avoid memory > hotadd failure.\n", > + (max_possible_phys - max_actual_phys) >> 40); > +} > + > static int __init rand_mem_physical_padding_setup(char *str) > { > int max_padding = (1 << (MAX_PHYSMEM_BITS - TB_SHIFT)) - 1; > diff --git a/drivers/acpi/numa.c b/drivers/acpi/numa.c > index 3d69834c692f..4408e37600ef 100644 > --- a/drivers/acpi/numa.c > +++ b/drivers/acpi/numa.c > @@ -32,7 +32,7 @@ > #include > #include > #include > -#include > +#include > > static nodemask_t nodes_found_map = NODE_MASK_NONE; > > @@ -436,7 +436,6 @@ acpi_table_parse_srat(enum acpi_srat_type id, > int __init acpi_numa_init(void) > { > int cnt = 0; > - u64 max_possible_phys, max_actual_phys, threshold; > > if (acpi_disabled) > return -EINVAL; > @@ -466,17 +465,9 @@ int __init acpi_numa_init(void) > cnt = acpi_table_parse_srat(ACPI_SRAT_TYPE_MEMORY_AFFINITY, > acpi_parse_memory_affinity, 0); > > - /* check the padding size for KASLR is enough. */ > - if (parsed_numa_memblks && kaslr_enabled()) { > - max_actual_phys = roundup(PFN_PHYS(max_pfn), 1ULL << > 40); > - max_possible_phys = roundup(PFN_PHYS(max_possible_pfn), > 1ULL << 40); > - threshold
Re: [tip:x86/boot] ACPI/NUMA: Add warning message if the padding size for KASLR is not enough
On Wed, Oct 03, 2018 at 02:48:14PM +0200, Borislav Petkov wrote: > On Wed, Oct 03, 2018 at 02:34:02PM +0200, Peter Zijlstra wrote: > > > > Subject: ACPI/NUMA: Fix KASLR build error > > > > There is no point in trying to compile KASLR specific code when there is > > no KASLR. > > > > Signed-off-by: Peter Zijlstra (Intel) > > --- > > Yeah, Peter and I were just talking on IRC and he gave me a much better > idea how to fix this, see below. I'll run this through the *config builder and > commit it if no complaints. Hi Boris and Peter, Thank you for the fix. It is great! - Masa > > --- > From: "Peter Zijlstra (Intel)" > Date: Wed, 3 Oct 2018 14:41:27 +0200 > Subject: [PATCH] ACPI/NUMA: Fix KASLR build error > > There is no point in trying to compile KASLR specific code when there is > no KASLR. > > [ bp: Move the whole crap into kaslr.c and make >rand_mem_physical_padding static. ] > > Signed-off-by: Peter Zijlstra (Intel) > Signed-off-by: Borislav Petkov > Cc: > Cc: > Cc: > Cc: > Cc: > Cc: > Link: > http://lkml.kernel.org/r/20181003123402.ga15...@hirez.programming.kicks-ass.net > --- > arch/x86/include/asm/kaslr.h | 2 ++ > arch/x86/include/asm/setup.h | 2 -- > arch/x86/mm/kaslr.c | 18 +- > drivers/acpi/numa.c | 15 +++ > 4 files changed, 22 insertions(+), 15 deletions(-) > > diff --git a/arch/x86/include/asm/kaslr.h b/arch/x86/include/asm/kaslr.h > index db7ba2feb947..95ef3fc01d12 100644 > --- a/arch/x86/include/asm/kaslr.h > +++ b/arch/x86/include/asm/kaslr.h > @@ -6,8 +6,10 @@ unsigned long kaslr_get_random_long(const char *purpose); > > #ifdef CONFIG_RANDOMIZE_MEMORY > void kernel_randomize_memory(void); > +void kaslr_check_padding(void); > #else > static inline void kernel_randomize_memory(void) { } > +static inline void kaslr_check_padding(void) { } > #endif /* CONFIG_RANDOMIZE_MEMORY */ > > #endif > diff --git a/arch/x86/include/asm/setup.h b/arch/x86/include/asm/setup.h > index 65a5bf8f6aba..ae13bc974416 100644 > --- a/arch/x86/include/asm/setup.h > +++ b/arch/x86/include/asm/setup.h > @@ -80,8 +80,6 @@ static inline unsigned long kaslr_offset(void) > return (unsigned long)&_text - __START_KERNEL; > } > > -extern int rand_mem_physical_padding; > - > /* > * Do NOT EVER look at the BIOS memory size location. > * It does not work on many machines. > diff --git a/arch/x86/mm/kaslr.c b/arch/x86/mm/kaslr.c > index 00cf4cae38f5..d58b7da0d55c 100644 > --- a/arch/x86/mm/kaslr.c > +++ b/arch/x86/mm/kaslr.c > @@ -40,7 +40,7 @@ > */ > static const unsigned long vaddr_end = CPU_ENTRY_AREA_BASE; > > -int __initdata rand_mem_physical_padding = > CONFIG_RANDOMIZE_MEMORY_PHYSICAL_PADDING; > +static int __initdata rand_mem_physical_padding = > CONFIG_RANDOMIZE_MEMORY_PHYSICAL_PADDING; > /* > * Memory regions randomized by KASLR (except modules that use a separate > logic > * earlier during boot). The list is ordered based on virtual addresses. This > @@ -70,6 +70,22 @@ static inline bool kaslr_memory_enabled(void) > return kaslr_enabled() && !IS_ENABLED(CONFIG_KASAN); > } > > +/* > + * Check the padding size for KASLR is enough. > + */ > +void kaslr_check_padding(void) > +{ > + u64 max_possible_phys, max_actual_phys, threshold; > + > + max_actual_phys = roundup(PFN_PHYS(max_pfn), 1ULL << 40); > + max_possible_phys = roundup(PFN_PHYS(max_possible_pfn), 1ULL << 40); > + threshold = max_actual_phys + ((u64)rand_mem_physical_padding << 40); > + > + if (max_possible_phys > threshold) > + pr_warn("Set 'rand_mem_physical_padding=%llu' to avoid memory > hotadd failure.\n", > + (max_possible_phys - max_actual_phys) >> 40); > +} > + > static int __init rand_mem_physical_padding_setup(char *str) > { > int max_padding = (1 << (MAX_PHYSMEM_BITS - TB_SHIFT)) - 1; > diff --git a/drivers/acpi/numa.c b/drivers/acpi/numa.c > index 3d69834c692f..4408e37600ef 100644 > --- a/drivers/acpi/numa.c > +++ b/drivers/acpi/numa.c > @@ -32,7 +32,7 @@ > #include > #include > #include > -#include > +#include > > static nodemask_t nodes_found_map = NODE_MASK_NONE; > > @@ -436,7 +436,6 @@ acpi_table_parse_srat(enum acpi_srat_type id, > int __init acpi_numa_init(void) > { > int cnt = 0; > - u64 max_possible_phys, max_actual_phys, threshold; > > if (acpi_disabled) > return -EINVAL; > @@ -466,17 +465,9 @@ int __init acpi_numa_init(void) > cnt = acpi_table_parse_srat(ACPI_SRAT_TYPE_MEMORY_AFFINITY, > acpi_parse_memory_affinity, 0); > > - /* check the padding size for KASLR is enough. */ > - if (parsed_numa_memblks && kaslr_enabled()) { > - max_actual_phys = roundup(PFN_PHYS(max_pfn), 1ULL << > 40); > - max_possible_phys = roundup(PFN_PHYS(max_possible_pfn), > 1ULL << 40); > - threshold
Re: [tip:x86/boot] ACPI/NUMA: Add warning message if the padding size for KASLR is not enough
On Wed, Oct 03, 2018 at 02:34:02PM +0200, Peter Zijlstra wrote: > > Subject: ACPI/NUMA: Fix KASLR build error > > There is no point in trying to compile KASLR specific code when there is > no KASLR. > > Signed-off-by: Peter Zijlstra (Intel) > --- Yeah, Peter and I were just talking on IRC and he gave me a much better idea how to fix this, see below. I'll run this through the *config builder and commit it if no complaints. --- From: "Peter Zijlstra (Intel)" Date: Wed, 3 Oct 2018 14:41:27 +0200 Subject: [PATCH] ACPI/NUMA: Fix KASLR build error There is no point in trying to compile KASLR specific code when there is no KASLR. [ bp: Move the whole crap into kaslr.c and make rand_mem_physical_padding static. ] Signed-off-by: Peter Zijlstra (Intel) Signed-off-by: Borislav Petkov Cc: Cc: Cc: Cc: Cc: Cc: Link: http://lkml.kernel.org/r/20181003123402.ga15...@hirez.programming.kicks-ass.net --- arch/x86/include/asm/kaslr.h | 2 ++ arch/x86/include/asm/setup.h | 2 -- arch/x86/mm/kaslr.c | 18 +- drivers/acpi/numa.c | 15 +++ 4 files changed, 22 insertions(+), 15 deletions(-) diff --git a/arch/x86/include/asm/kaslr.h b/arch/x86/include/asm/kaslr.h index db7ba2feb947..95ef3fc01d12 100644 --- a/arch/x86/include/asm/kaslr.h +++ b/arch/x86/include/asm/kaslr.h @@ -6,8 +6,10 @@ unsigned long kaslr_get_random_long(const char *purpose); #ifdef CONFIG_RANDOMIZE_MEMORY void kernel_randomize_memory(void); +void kaslr_check_padding(void); #else static inline void kernel_randomize_memory(void) { } +static inline void kaslr_check_padding(void) { } #endif /* CONFIG_RANDOMIZE_MEMORY */ #endif diff --git a/arch/x86/include/asm/setup.h b/arch/x86/include/asm/setup.h index 65a5bf8f6aba..ae13bc974416 100644 --- a/arch/x86/include/asm/setup.h +++ b/arch/x86/include/asm/setup.h @@ -80,8 +80,6 @@ static inline unsigned long kaslr_offset(void) return (unsigned long)&_text - __START_KERNEL; } -extern int rand_mem_physical_padding; - /* * Do NOT EVER look at the BIOS memory size location. * It does not work on many machines. diff --git a/arch/x86/mm/kaslr.c b/arch/x86/mm/kaslr.c index 00cf4cae38f5..d58b7da0d55c 100644 --- a/arch/x86/mm/kaslr.c +++ b/arch/x86/mm/kaslr.c @@ -40,7 +40,7 @@ */ static const unsigned long vaddr_end = CPU_ENTRY_AREA_BASE; -int __initdata rand_mem_physical_padding = CONFIG_RANDOMIZE_MEMORY_PHYSICAL_PADDING; +static int __initdata rand_mem_physical_padding = CONFIG_RANDOMIZE_MEMORY_PHYSICAL_PADDING; /* * Memory regions randomized by KASLR (except modules that use a separate logic * earlier during boot). The list is ordered based on virtual addresses. This @@ -70,6 +70,22 @@ static inline bool kaslr_memory_enabled(void) return kaslr_enabled() && !IS_ENABLED(CONFIG_KASAN); } +/* + * Check the padding size for KASLR is enough. + */ +void kaslr_check_padding(void) +{ + u64 max_possible_phys, max_actual_phys, threshold; + + max_actual_phys = roundup(PFN_PHYS(max_pfn), 1ULL << 40); + max_possible_phys = roundup(PFN_PHYS(max_possible_pfn), 1ULL << 40); + threshold = max_actual_phys + ((u64)rand_mem_physical_padding << 40); + + if (max_possible_phys > threshold) + pr_warn("Set 'rand_mem_physical_padding=%llu' to avoid memory hotadd failure.\n", + (max_possible_phys - max_actual_phys) >> 40); +} + static int __init rand_mem_physical_padding_setup(char *str) { int max_padding = (1 << (MAX_PHYSMEM_BITS - TB_SHIFT)) - 1; diff --git a/drivers/acpi/numa.c b/drivers/acpi/numa.c index 3d69834c692f..4408e37600ef 100644 --- a/drivers/acpi/numa.c +++ b/drivers/acpi/numa.c @@ -32,7 +32,7 @@ #include #include #include -#include +#include static nodemask_t nodes_found_map = NODE_MASK_NONE; @@ -436,7 +436,6 @@ acpi_table_parse_srat(enum acpi_srat_type id, int __init acpi_numa_init(void) { int cnt = 0; - u64 max_possible_phys, max_actual_phys, threshold; if (acpi_disabled) return -EINVAL; @@ -466,17 +465,9 @@ int __init acpi_numa_init(void) cnt = acpi_table_parse_srat(ACPI_SRAT_TYPE_MEMORY_AFFINITY, acpi_parse_memory_affinity, 0); - /* check the padding size for KASLR is enough. */ - if (parsed_numa_memblks && kaslr_enabled()) { - max_actual_phys = roundup(PFN_PHYS(max_pfn), 1ULL << 40); - max_possible_phys = roundup(PFN_PHYS(max_possible_pfn), 1ULL << 40); - threshold = max_actual_phys + ((u64)rand_mem_physical_padding << 40); + if (parsed_numa_memblks) + kaslr_check_padding(); - if (max_possible_phys > threshold) { - pr_warn("Set 'rand_mem_physical_padding=%llu' to avoid memory hotadd failure.\n", -
Re: [tip:x86/boot] ACPI/NUMA: Add warning message if the padding size for KASLR is not enough
On Wed, Oct 03, 2018 at 02:34:02PM +0200, Peter Zijlstra wrote: > > Subject: ACPI/NUMA: Fix KASLR build error > > There is no point in trying to compile KASLR specific code when there is > no KASLR. > > Signed-off-by: Peter Zijlstra (Intel) > --- Yeah, Peter and I were just talking on IRC and he gave me a much better idea how to fix this, see below. I'll run this through the *config builder and commit it if no complaints. --- From: "Peter Zijlstra (Intel)" Date: Wed, 3 Oct 2018 14:41:27 +0200 Subject: [PATCH] ACPI/NUMA: Fix KASLR build error There is no point in trying to compile KASLR specific code when there is no KASLR. [ bp: Move the whole crap into kaslr.c and make rand_mem_physical_padding static. ] Signed-off-by: Peter Zijlstra (Intel) Signed-off-by: Borislav Petkov Cc: Cc: Cc: Cc: Cc: Cc: Link: http://lkml.kernel.org/r/20181003123402.ga15...@hirez.programming.kicks-ass.net --- arch/x86/include/asm/kaslr.h | 2 ++ arch/x86/include/asm/setup.h | 2 -- arch/x86/mm/kaslr.c | 18 +- drivers/acpi/numa.c | 15 +++ 4 files changed, 22 insertions(+), 15 deletions(-) diff --git a/arch/x86/include/asm/kaslr.h b/arch/x86/include/asm/kaslr.h index db7ba2feb947..95ef3fc01d12 100644 --- a/arch/x86/include/asm/kaslr.h +++ b/arch/x86/include/asm/kaslr.h @@ -6,8 +6,10 @@ unsigned long kaslr_get_random_long(const char *purpose); #ifdef CONFIG_RANDOMIZE_MEMORY void kernel_randomize_memory(void); +void kaslr_check_padding(void); #else static inline void kernel_randomize_memory(void) { } +static inline void kaslr_check_padding(void) { } #endif /* CONFIG_RANDOMIZE_MEMORY */ #endif diff --git a/arch/x86/include/asm/setup.h b/arch/x86/include/asm/setup.h index 65a5bf8f6aba..ae13bc974416 100644 --- a/arch/x86/include/asm/setup.h +++ b/arch/x86/include/asm/setup.h @@ -80,8 +80,6 @@ static inline unsigned long kaslr_offset(void) return (unsigned long)&_text - __START_KERNEL; } -extern int rand_mem_physical_padding; - /* * Do NOT EVER look at the BIOS memory size location. * It does not work on many machines. diff --git a/arch/x86/mm/kaslr.c b/arch/x86/mm/kaslr.c index 00cf4cae38f5..d58b7da0d55c 100644 --- a/arch/x86/mm/kaslr.c +++ b/arch/x86/mm/kaslr.c @@ -40,7 +40,7 @@ */ static const unsigned long vaddr_end = CPU_ENTRY_AREA_BASE; -int __initdata rand_mem_physical_padding = CONFIG_RANDOMIZE_MEMORY_PHYSICAL_PADDING; +static int __initdata rand_mem_physical_padding = CONFIG_RANDOMIZE_MEMORY_PHYSICAL_PADDING; /* * Memory regions randomized by KASLR (except modules that use a separate logic * earlier during boot). The list is ordered based on virtual addresses. This @@ -70,6 +70,22 @@ static inline bool kaslr_memory_enabled(void) return kaslr_enabled() && !IS_ENABLED(CONFIG_KASAN); } +/* + * Check the padding size for KASLR is enough. + */ +void kaslr_check_padding(void) +{ + u64 max_possible_phys, max_actual_phys, threshold; + + max_actual_phys = roundup(PFN_PHYS(max_pfn), 1ULL << 40); + max_possible_phys = roundup(PFN_PHYS(max_possible_pfn), 1ULL << 40); + threshold = max_actual_phys + ((u64)rand_mem_physical_padding << 40); + + if (max_possible_phys > threshold) + pr_warn("Set 'rand_mem_physical_padding=%llu' to avoid memory hotadd failure.\n", + (max_possible_phys - max_actual_phys) >> 40); +} + static int __init rand_mem_physical_padding_setup(char *str) { int max_padding = (1 << (MAX_PHYSMEM_BITS - TB_SHIFT)) - 1; diff --git a/drivers/acpi/numa.c b/drivers/acpi/numa.c index 3d69834c692f..4408e37600ef 100644 --- a/drivers/acpi/numa.c +++ b/drivers/acpi/numa.c @@ -32,7 +32,7 @@ #include #include #include -#include +#include static nodemask_t nodes_found_map = NODE_MASK_NONE; @@ -436,7 +436,6 @@ acpi_table_parse_srat(enum acpi_srat_type id, int __init acpi_numa_init(void) { int cnt = 0; - u64 max_possible_phys, max_actual_phys, threshold; if (acpi_disabled) return -EINVAL; @@ -466,17 +465,9 @@ int __init acpi_numa_init(void) cnt = acpi_table_parse_srat(ACPI_SRAT_TYPE_MEMORY_AFFINITY, acpi_parse_memory_affinity, 0); - /* check the padding size for KASLR is enough. */ - if (parsed_numa_memblks && kaslr_enabled()) { - max_actual_phys = roundup(PFN_PHYS(max_pfn), 1ULL << 40); - max_possible_phys = roundup(PFN_PHYS(max_possible_pfn), 1ULL << 40); - threshold = max_actual_phys + ((u64)rand_mem_physical_padding << 40); + if (parsed_numa_memblks) + kaslr_check_padding(); - if (max_possible_phys > threshold) { - pr_warn("Set 'rand_mem_physical_padding=%llu' to avoid memory hotadd failure.\n", -
Re: [tip:x86/boot] ACPI/NUMA: Add warning message if the padding size for KASLR is not enough
Subject: ACPI/NUMA: Fix KASLR build error There is no point in trying to compile KASLR specific code when there is no KASLR. Signed-off-by: Peter Zijlstra (Intel) --- diff --git a/drivers/acpi/numa.c b/drivers/acpi/numa.c index 3d69834c692f..5767733976b3 100644 --- a/drivers/acpi/numa.c +++ b/drivers/acpi/numa.c @@ -436,7 +436,6 @@ acpi_table_parse_srat(enum acpi_srat_type id, int __init acpi_numa_init(void) { int cnt = 0; - u64 max_possible_phys, max_actual_phys, threshold; if (acpi_disabled) return -EINVAL; @@ -466,8 +465,11 @@ int __init acpi_numa_init(void) cnt = acpi_table_parse_srat(ACPI_SRAT_TYPE_MEMORY_AFFINITY, acpi_parse_memory_affinity, 0); +#ifdef CONFIG_RANDOMIZE_MEMORY /* check the padding size for KASLR is enough. */ if (parsed_numa_memblks && kaslr_enabled()) { + u64 max_possible_phys, max_actual_phys, threshold; + max_actual_phys = roundup(PFN_PHYS(max_pfn), 1ULL << 40); max_possible_phys = roundup(PFN_PHYS(max_possible_pfn), 1ULL << 40); threshold = max_actual_phys + ((u64)rand_mem_physical_padding << 40); @@ -477,6 +479,7 @@ int __init acpi_numa_init(void) (max_possible_phys - max_actual_phys) >> 40); } } +#endif } /* SLIT: System Locality Information Table */
Re: [tip:x86/boot] ACPI/NUMA: Add warning message if the padding size for KASLR is not enough
Subject: ACPI/NUMA: Fix KASLR build error There is no point in trying to compile KASLR specific code when there is no KASLR. Signed-off-by: Peter Zijlstra (Intel) --- diff --git a/drivers/acpi/numa.c b/drivers/acpi/numa.c index 3d69834c692f..5767733976b3 100644 --- a/drivers/acpi/numa.c +++ b/drivers/acpi/numa.c @@ -436,7 +436,6 @@ acpi_table_parse_srat(enum acpi_srat_type id, int __init acpi_numa_init(void) { int cnt = 0; - u64 max_possible_phys, max_actual_phys, threshold; if (acpi_disabled) return -EINVAL; @@ -466,8 +465,11 @@ int __init acpi_numa_init(void) cnt = acpi_table_parse_srat(ACPI_SRAT_TYPE_MEMORY_AFFINITY, acpi_parse_memory_affinity, 0); +#ifdef CONFIG_RANDOMIZE_MEMORY /* check the padding size for KASLR is enough. */ if (parsed_numa_memblks && kaslr_enabled()) { + u64 max_possible_phys, max_actual_phys, threshold; + max_actual_phys = roundup(PFN_PHYS(max_pfn), 1ULL << 40); max_possible_phys = roundup(PFN_PHYS(max_possible_pfn), 1ULL << 40); threshold = max_actual_phys + ((u64)rand_mem_physical_padding << 40); @@ -477,6 +479,7 @@ int __init acpi_numa_init(void) (max_possible_phys - max_actual_phys) >> 40); } } +#endif } /* SLIT: System Locality Information Table */
Re: [tip:x86/boot] ACPI/NUMA: Add warning message if the padding size for KASLR is not enough
From: Masayoshi Mizuma Subject: [PATCH] Fix for build error if CONFIG_RANDOMIZE_BASE is not defined. Fix the following build error. ld: drivers/acpi/numa.o: in function `acpi_numa_init': drivers/acpi/numa.c:473: undefined reference to `rand_mem_physical_padding' make: *** [Makefile:1030: vmlinux] Error 1 - Add get_rand_mem_physical_padding() which returns rand_mem_physical_padding or 0 if CONFIG_RANDOMIZE_MEMORY is not defined. - Make rand_mem_physical_padding static Signed-off-by: Masayoshi Mizuma --- arch/x86/include/asm/setup.h | 9 - arch/x86/mm/kaslr.c | 9 +++-- drivers/acpi/numa.c | 3 ++- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/arch/x86/include/asm/setup.h b/arch/x86/include/asm/setup.h index 65a5bf8..1765a15 100644 --- a/arch/x86/include/asm/setup.h +++ b/arch/x86/include/asm/setup.h @@ -80,7 +80,14 @@ static inline unsigned long kaslr_offset(void) return (unsigned long)&_text - __START_KERNEL; } -extern int rand_mem_physical_padding; +#ifdef CONFIG_RANDOMIZE_MEMORY +extern inline int __init get_rand_mem_physical_padding(void); +#else +static inline int __init get_rand_mem_physical_padding(void) +{ + return 0; +} +#endif /* * Do NOT EVER look at the BIOS memory size location. diff --git a/arch/x86/mm/kaslr.c b/arch/x86/mm/kaslr.c index 00cf4ca..eb47f05 100644 --- a/arch/x86/mm/kaslr.c +++ b/arch/x86/mm/kaslr.c @@ -40,7 +40,7 @@ */ static const unsigned long vaddr_end = CPU_ENTRY_AREA_BASE; -int __initdata rand_mem_physical_padding = CONFIG_RANDOMIZE_MEMORY_PHYSICAL_PADDING; +static int rand_mem_physical_padding __initdata = CONFIG_RANDOMIZE_MEMORY_PHYSICAL_PADDING; /* * Memory regions randomized by KASLR (except modules that use a separate logic * earlier during boot). The list is ordered based on virtual addresses. This @@ -70,6 +70,11 @@ static inline bool kaslr_memory_enabled(void) return kaslr_enabled() && !IS_ENABLED(CONFIG_KASAN); } +inline int __init get_rand_mem_physical_padding(void) +{ + return rand_mem_physical_padding; +} + static int __init rand_mem_physical_padding_setup(char *str) { int max_padding = (1 << (MAX_PHYSMEM_BITS - TB_SHIFT)) - 1; @@ -117,7 +122,7 @@ void __init kernel_randomize_memory(void) */ BUG_ON(kaslr_regions[0].base != _offset_base); memory_tb = DIV_ROUND_UP(max_pfn << PAGE_SHIFT, 1UL << TB_SHIFT) + - rand_mem_physical_padding; + get_rand_mem_physical_padding(); /* Adapt phyiscal memory region size based on available memory */ if (memory_tb < kaslr_regions[0].size_tb) diff --git a/drivers/acpi/numa.c b/drivers/acpi/numa.c index 3d69834..303b024 100644 --- a/drivers/acpi/numa.c +++ b/drivers/acpi/numa.c @@ -470,7 +470,8 @@ int __init acpi_numa_init(void) if (parsed_numa_memblks && kaslr_enabled()) { max_actual_phys = roundup(PFN_PHYS(max_pfn), 1ULL << 40); max_possible_phys = roundup(PFN_PHYS(max_possible_pfn), 1ULL << 40); - threshold = max_actual_phys + ((u64)rand_mem_physical_padding << 40); + threshold = max_actual_phys + + ((u64)get_rand_mem_physical_padding() << 40); if (max_possible_phys > threshold) { pr_warn("Set 'rand_mem_physical_padding=%llu' to avoid memory hotadd failure.\n", -- 2.18.0 On Tue, Oct 02, 2018 at 03:18:41AM -0700, tip-bot for Masayoshi Mizuma wrote: > Commit-ID: 3b054ca88c4f4dd5f516a12d4b6d6bd0ae826f41 > Gitweb: > https://git.kernel.org/tip/3b054ca88c4f4dd5f516a12d4b6d6bd0ae826f41 > Author: Masayoshi Mizuma > AuthorDate: Mon, 1 Oct 2018 10:08:42 -0400 > Committer: Ingo Molnar > CommitDate: Tue, 2 Oct 2018 11:47:21 +0200 > > ACPI/NUMA: Add warning message if the padding size for KASLR is not enough > > Add warning message if the padding size for KASLR, > rand_mem_physical_padding, is not enough. The message also > says the suitable padding size. > > Signed-off-by: Masayoshi Mizuma > Cc: Baoquan He > Cc: Borislav Petkov > Cc: Linus Torvalds > Cc: Masayoshi Mizuma > Cc: Peter Zijlstra > Cc: Thomas Gleixner > Link: http://lkml.kernel.org/r/20181001140843.26137-3-msys.miz...@gmail.com > Signed-off-by: Ingo Molnar > --- > arch/x86/include/asm/setup.h | 2 ++ > drivers/acpi/numa.c | 14 ++ > 2 files changed, 16 insertions(+) > > diff --git a/arch/x86/include/asm/setup.h b/arch/x86/include/asm/setup.h > index ae13bc974416..65a5bf8f6aba 100644 > --- a/arch/x86/include/asm/setup.h > +++ b/arch/x86/include/asm/setup.h > @@ -80,6 +80,8 @@ static inline unsigned long kaslr_offset(void) > return (unsigned long)&_text - __START_KERNEL; > } > > +extern int rand_mem_physical_padding; > + > /* > * Do NOT EVER look at the BIOS memory size location. > * It does not work on many machines. > diff --git
Re: [tip:x86/boot] ACPI/NUMA: Add warning message if the padding size for KASLR is not enough
From: Masayoshi Mizuma Subject: [PATCH] Fix for build error if CONFIG_RANDOMIZE_BASE is not defined. Fix the following build error. ld: drivers/acpi/numa.o: in function `acpi_numa_init': drivers/acpi/numa.c:473: undefined reference to `rand_mem_physical_padding' make: *** [Makefile:1030: vmlinux] Error 1 - Add get_rand_mem_physical_padding() which returns rand_mem_physical_padding or 0 if CONFIG_RANDOMIZE_MEMORY is not defined. - Make rand_mem_physical_padding static Signed-off-by: Masayoshi Mizuma --- arch/x86/include/asm/setup.h | 9 - arch/x86/mm/kaslr.c | 9 +++-- drivers/acpi/numa.c | 3 ++- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/arch/x86/include/asm/setup.h b/arch/x86/include/asm/setup.h index 65a5bf8..1765a15 100644 --- a/arch/x86/include/asm/setup.h +++ b/arch/x86/include/asm/setup.h @@ -80,7 +80,14 @@ static inline unsigned long kaslr_offset(void) return (unsigned long)&_text - __START_KERNEL; } -extern int rand_mem_physical_padding; +#ifdef CONFIG_RANDOMIZE_MEMORY +extern inline int __init get_rand_mem_physical_padding(void); +#else +static inline int __init get_rand_mem_physical_padding(void) +{ + return 0; +} +#endif /* * Do NOT EVER look at the BIOS memory size location. diff --git a/arch/x86/mm/kaslr.c b/arch/x86/mm/kaslr.c index 00cf4ca..eb47f05 100644 --- a/arch/x86/mm/kaslr.c +++ b/arch/x86/mm/kaslr.c @@ -40,7 +40,7 @@ */ static const unsigned long vaddr_end = CPU_ENTRY_AREA_BASE; -int __initdata rand_mem_physical_padding = CONFIG_RANDOMIZE_MEMORY_PHYSICAL_PADDING; +static int rand_mem_physical_padding __initdata = CONFIG_RANDOMIZE_MEMORY_PHYSICAL_PADDING; /* * Memory regions randomized by KASLR (except modules that use a separate logic * earlier during boot). The list is ordered based on virtual addresses. This @@ -70,6 +70,11 @@ static inline bool kaslr_memory_enabled(void) return kaslr_enabled() && !IS_ENABLED(CONFIG_KASAN); } +inline int __init get_rand_mem_physical_padding(void) +{ + return rand_mem_physical_padding; +} + static int __init rand_mem_physical_padding_setup(char *str) { int max_padding = (1 << (MAX_PHYSMEM_BITS - TB_SHIFT)) - 1; @@ -117,7 +122,7 @@ void __init kernel_randomize_memory(void) */ BUG_ON(kaslr_regions[0].base != _offset_base); memory_tb = DIV_ROUND_UP(max_pfn << PAGE_SHIFT, 1UL << TB_SHIFT) + - rand_mem_physical_padding; + get_rand_mem_physical_padding(); /* Adapt phyiscal memory region size based on available memory */ if (memory_tb < kaslr_regions[0].size_tb) diff --git a/drivers/acpi/numa.c b/drivers/acpi/numa.c index 3d69834..303b024 100644 --- a/drivers/acpi/numa.c +++ b/drivers/acpi/numa.c @@ -470,7 +470,8 @@ int __init acpi_numa_init(void) if (parsed_numa_memblks && kaslr_enabled()) { max_actual_phys = roundup(PFN_PHYS(max_pfn), 1ULL << 40); max_possible_phys = roundup(PFN_PHYS(max_possible_pfn), 1ULL << 40); - threshold = max_actual_phys + ((u64)rand_mem_physical_padding << 40); + threshold = max_actual_phys + + ((u64)get_rand_mem_physical_padding() << 40); if (max_possible_phys > threshold) { pr_warn("Set 'rand_mem_physical_padding=%llu' to avoid memory hotadd failure.\n", -- 2.18.0 On Tue, Oct 02, 2018 at 03:18:41AM -0700, tip-bot for Masayoshi Mizuma wrote: > Commit-ID: 3b054ca88c4f4dd5f516a12d4b6d6bd0ae826f41 > Gitweb: > https://git.kernel.org/tip/3b054ca88c4f4dd5f516a12d4b6d6bd0ae826f41 > Author: Masayoshi Mizuma > AuthorDate: Mon, 1 Oct 2018 10:08:42 -0400 > Committer: Ingo Molnar > CommitDate: Tue, 2 Oct 2018 11:47:21 +0200 > > ACPI/NUMA: Add warning message if the padding size for KASLR is not enough > > Add warning message if the padding size for KASLR, > rand_mem_physical_padding, is not enough. The message also > says the suitable padding size. > > Signed-off-by: Masayoshi Mizuma > Cc: Baoquan He > Cc: Borislav Petkov > Cc: Linus Torvalds > Cc: Masayoshi Mizuma > Cc: Peter Zijlstra > Cc: Thomas Gleixner > Link: http://lkml.kernel.org/r/20181001140843.26137-3-msys.miz...@gmail.com > Signed-off-by: Ingo Molnar > --- > arch/x86/include/asm/setup.h | 2 ++ > drivers/acpi/numa.c | 14 ++ > 2 files changed, 16 insertions(+) > > diff --git a/arch/x86/include/asm/setup.h b/arch/x86/include/asm/setup.h > index ae13bc974416..65a5bf8f6aba 100644 > --- a/arch/x86/include/asm/setup.h > +++ b/arch/x86/include/asm/setup.h > @@ -80,6 +80,8 @@ static inline unsigned long kaslr_offset(void) > return (unsigned long)&_text - __START_KERNEL; > } > > +extern int rand_mem_physical_padding; > + > /* > * Do NOT EVER look at the BIOS memory size location. > * It does not work on many machines. > diff --git
Re: [tip:x86/boot] ACPI/NUMA: Add warning message if the padding size for KASLR is not enough
On Tue, Oct 02, 2018 at 05:05:18PM +0200, Borislav Petkov wrote: > On Tue, Oct 02, 2018 at 03:18:41AM -0700, tip-bot for Masayoshi Mizuma wrote: > > Commit-ID: 3b054ca88c4f4dd5f516a12d4b6d6bd0ae826f41 > > Gitweb: > > https://git.kernel.org/tip/3b054ca88c4f4dd5f516a12d4b6d6bd0ae826f41 > > Author: Masayoshi Mizuma > > AuthorDate: Mon, 1 Oct 2018 10:08:42 -0400 > > Committer: Ingo Molnar > > CommitDate: Tue, 2 Oct 2018 11:47:21 +0200 > > > > ACPI/NUMA: Add warning message if the padding size for KASLR is not enough > > > > Add warning message if the padding size for KASLR, > > rand_mem_physical_padding, is not enough. The message also > > says the suitable padding size. > > > > Signed-off-by: Masayoshi Mizuma > > Cc: Baoquan He > > Cc: Borislav Petkov > > Cc: Linus Torvalds > > Cc: Masayoshi Mizuma > > Cc: Peter Zijlstra > > Cc: Thomas Gleixner > > Link: http://lkml.kernel.org/r/20181001140843.26137-3-msys.miz...@gmail.com > > Signed-off-by: Ingo Molnar > > --- > > arch/x86/include/asm/setup.h | 2 ++ > > drivers/acpi/numa.c | 14 ++ > > 2 files changed, 16 insertions(+) > > > > diff --git a/arch/x86/include/asm/setup.h b/arch/x86/include/asm/setup.h > > index ae13bc974416..65a5bf8f6aba 100644 > > --- a/arch/x86/include/asm/setup.h > > +++ b/arch/x86/include/asm/setup.h > > @@ -80,6 +80,8 @@ static inline unsigned long kaslr_offset(void) > > return (unsigned long)&_text - __START_KERNEL; > > } > > > > +extern int rand_mem_physical_padding; > > + > > /* > > * Do NOT EVER look at the BIOS memory size location. > > * It does not work on many machines. > > diff --git a/drivers/acpi/numa.c b/drivers/acpi/numa.c > > index 85167603b9c9..3d69834c692f 100644 > > --- a/drivers/acpi/numa.c > > +++ b/drivers/acpi/numa.c > > @@ -32,6 +32,7 @@ > > #include > > #include > > #include > > +#include > > > > static nodemask_t nodes_found_map = NODE_MASK_NONE; > > > > @@ -435,6 +436,7 @@ acpi_table_parse_srat(enum acpi_srat_type id, > > int __init acpi_numa_init(void) > > { > > int cnt = 0; > > + u64 max_possible_phys, max_actual_phys, threshold; > > > > if (acpi_disabled) > > return -EINVAL; > > @@ -463,6 +465,18 @@ int __init acpi_numa_init(void) > > > > cnt = acpi_table_parse_srat(ACPI_SRAT_TYPE_MEMORY_AFFINITY, > > acpi_parse_memory_affinity, 0); > > + > > + /* check the padding size for KASLR is enough. */ > > + if (parsed_numa_memblks && kaslr_enabled()) { > > + max_actual_phys = roundup(PFN_PHYS(max_pfn), 1ULL << > > 40); > > + max_possible_phys = roundup(PFN_PHYS(max_possible_pfn), > > 1ULL << 40); > > + threshold = max_actual_phys + > > ((u64)rand_mem_physical_padding << 40); > > Nope, not really: > > ld: drivers/acpi/numa.o: in function `acpi_numa_init': > /home/boris/kernel/linux/drivers/acpi/numa.c:473: undefined reference to > `rand_mem_physical_padding' > make: *** [Makefile:1030: vmlinux] Error 1 > > due to CONFIG_RANDOMIZE_MEMORY=n in my .config. > > You need to add a fix ontop which adds a function > get_rand_mem_physical_padding() which is defined in CONFIG_RANDOMIZE_MEMORY=y > and outside returns 0. > > And then make that rand_mem_physical_padding static and do not export it > to anything outside of kaslr.c but use the accessor. Thank you for the report and suggetions! I'll fix it and resubmit soon. Thanks, Masa
Re: [tip:x86/boot] ACPI/NUMA: Add warning message if the padding size for KASLR is not enough
On Tue, Oct 02, 2018 at 05:05:18PM +0200, Borislav Petkov wrote: > On Tue, Oct 02, 2018 at 03:18:41AM -0700, tip-bot for Masayoshi Mizuma wrote: > > Commit-ID: 3b054ca88c4f4dd5f516a12d4b6d6bd0ae826f41 > > Gitweb: > > https://git.kernel.org/tip/3b054ca88c4f4dd5f516a12d4b6d6bd0ae826f41 > > Author: Masayoshi Mizuma > > AuthorDate: Mon, 1 Oct 2018 10:08:42 -0400 > > Committer: Ingo Molnar > > CommitDate: Tue, 2 Oct 2018 11:47:21 +0200 > > > > ACPI/NUMA: Add warning message if the padding size for KASLR is not enough > > > > Add warning message if the padding size for KASLR, > > rand_mem_physical_padding, is not enough. The message also > > says the suitable padding size. > > > > Signed-off-by: Masayoshi Mizuma > > Cc: Baoquan He > > Cc: Borislav Petkov > > Cc: Linus Torvalds > > Cc: Masayoshi Mizuma > > Cc: Peter Zijlstra > > Cc: Thomas Gleixner > > Link: http://lkml.kernel.org/r/20181001140843.26137-3-msys.miz...@gmail.com > > Signed-off-by: Ingo Molnar > > --- > > arch/x86/include/asm/setup.h | 2 ++ > > drivers/acpi/numa.c | 14 ++ > > 2 files changed, 16 insertions(+) > > > > diff --git a/arch/x86/include/asm/setup.h b/arch/x86/include/asm/setup.h > > index ae13bc974416..65a5bf8f6aba 100644 > > --- a/arch/x86/include/asm/setup.h > > +++ b/arch/x86/include/asm/setup.h > > @@ -80,6 +80,8 @@ static inline unsigned long kaslr_offset(void) > > return (unsigned long)&_text - __START_KERNEL; > > } > > > > +extern int rand_mem_physical_padding; > > + > > /* > > * Do NOT EVER look at the BIOS memory size location. > > * It does not work on many machines. > > diff --git a/drivers/acpi/numa.c b/drivers/acpi/numa.c > > index 85167603b9c9..3d69834c692f 100644 > > --- a/drivers/acpi/numa.c > > +++ b/drivers/acpi/numa.c > > @@ -32,6 +32,7 @@ > > #include > > #include > > #include > > +#include > > > > static nodemask_t nodes_found_map = NODE_MASK_NONE; > > > > @@ -435,6 +436,7 @@ acpi_table_parse_srat(enum acpi_srat_type id, > > int __init acpi_numa_init(void) > > { > > int cnt = 0; > > + u64 max_possible_phys, max_actual_phys, threshold; > > > > if (acpi_disabled) > > return -EINVAL; > > @@ -463,6 +465,18 @@ int __init acpi_numa_init(void) > > > > cnt = acpi_table_parse_srat(ACPI_SRAT_TYPE_MEMORY_AFFINITY, > > acpi_parse_memory_affinity, 0); > > + > > + /* check the padding size for KASLR is enough. */ > > + if (parsed_numa_memblks && kaslr_enabled()) { > > + max_actual_phys = roundup(PFN_PHYS(max_pfn), 1ULL << > > 40); > > + max_possible_phys = roundup(PFN_PHYS(max_possible_pfn), > > 1ULL << 40); > > + threshold = max_actual_phys + > > ((u64)rand_mem_physical_padding << 40); > > Nope, not really: > > ld: drivers/acpi/numa.o: in function `acpi_numa_init': > /home/boris/kernel/linux/drivers/acpi/numa.c:473: undefined reference to > `rand_mem_physical_padding' > make: *** [Makefile:1030: vmlinux] Error 1 > > due to CONFIG_RANDOMIZE_MEMORY=n in my .config. > > You need to add a fix ontop which adds a function > get_rand_mem_physical_padding() which is defined in CONFIG_RANDOMIZE_MEMORY=y > and outside returns 0. > > And then make that rand_mem_physical_padding static and do not export it > to anything outside of kaslr.c but use the accessor. Thank you for the report and suggetions! I'll fix it and resubmit soon. Thanks, Masa
Re: [tip:x86/boot] ACPI/NUMA: Add warning message if the padding size for KASLR is not enough
On Tue, Oct 02, 2018 at 03:18:41AM -0700, tip-bot for Masayoshi Mizuma wrote: > Commit-ID: 3b054ca88c4f4dd5f516a12d4b6d6bd0ae826f41 > Gitweb: > https://git.kernel.org/tip/3b054ca88c4f4dd5f516a12d4b6d6bd0ae826f41 > Author: Masayoshi Mizuma > AuthorDate: Mon, 1 Oct 2018 10:08:42 -0400 > Committer: Ingo Molnar > CommitDate: Tue, 2 Oct 2018 11:47:21 +0200 > > ACPI/NUMA: Add warning message if the padding size for KASLR is not enough > > Add warning message if the padding size for KASLR, > rand_mem_physical_padding, is not enough. The message also > says the suitable padding size. > > Signed-off-by: Masayoshi Mizuma > Cc: Baoquan He > Cc: Borislav Petkov > Cc: Linus Torvalds > Cc: Masayoshi Mizuma > Cc: Peter Zijlstra > Cc: Thomas Gleixner > Link: http://lkml.kernel.org/r/20181001140843.26137-3-msys.miz...@gmail.com > Signed-off-by: Ingo Molnar > --- > arch/x86/include/asm/setup.h | 2 ++ > drivers/acpi/numa.c | 14 ++ > 2 files changed, 16 insertions(+) > > diff --git a/arch/x86/include/asm/setup.h b/arch/x86/include/asm/setup.h > index ae13bc974416..65a5bf8f6aba 100644 > --- a/arch/x86/include/asm/setup.h > +++ b/arch/x86/include/asm/setup.h > @@ -80,6 +80,8 @@ static inline unsigned long kaslr_offset(void) > return (unsigned long)&_text - __START_KERNEL; > } > > +extern int rand_mem_physical_padding; > + > /* > * Do NOT EVER look at the BIOS memory size location. > * It does not work on many machines. > diff --git a/drivers/acpi/numa.c b/drivers/acpi/numa.c > index 85167603b9c9..3d69834c692f 100644 > --- a/drivers/acpi/numa.c > +++ b/drivers/acpi/numa.c > @@ -32,6 +32,7 @@ > #include > #include > #include > +#include > > static nodemask_t nodes_found_map = NODE_MASK_NONE; > > @@ -435,6 +436,7 @@ acpi_table_parse_srat(enum acpi_srat_type id, > int __init acpi_numa_init(void) > { > int cnt = 0; > + u64 max_possible_phys, max_actual_phys, threshold; > > if (acpi_disabled) > return -EINVAL; > @@ -463,6 +465,18 @@ int __init acpi_numa_init(void) > > cnt = acpi_table_parse_srat(ACPI_SRAT_TYPE_MEMORY_AFFINITY, > acpi_parse_memory_affinity, 0); > + > + /* check the padding size for KASLR is enough. */ > + if (parsed_numa_memblks && kaslr_enabled()) { > + max_actual_phys = roundup(PFN_PHYS(max_pfn), 1ULL << > 40); > + max_possible_phys = roundup(PFN_PHYS(max_possible_pfn), > 1ULL << 40); > + threshold = max_actual_phys + > ((u64)rand_mem_physical_padding << 40); Nope, not really: ld: drivers/acpi/numa.o: in function `acpi_numa_init': /home/boris/kernel/linux/drivers/acpi/numa.c:473: undefined reference to `rand_mem_physical_padding' make: *** [Makefile:1030: vmlinux] Error 1 due to CONFIG_RANDOMIZE_MEMORY=n in my .config. You need to add a fix ontop which adds a function get_rand_mem_physical_padding() which is defined in CONFIG_RANDOMIZE_MEMORY=y and outside returns 0. And then make that rand_mem_physical_padding static and do not export it to anything outside of kaslr.c but use the accessor. Thx. -- Regards/Gruss, Boris. Good mailing practices for 400: avoid top-posting and trim the reply.
Re: [tip:x86/boot] ACPI/NUMA: Add warning message if the padding size for KASLR is not enough
On Tue, Oct 02, 2018 at 03:18:41AM -0700, tip-bot for Masayoshi Mizuma wrote: > Commit-ID: 3b054ca88c4f4dd5f516a12d4b6d6bd0ae826f41 > Gitweb: > https://git.kernel.org/tip/3b054ca88c4f4dd5f516a12d4b6d6bd0ae826f41 > Author: Masayoshi Mizuma > AuthorDate: Mon, 1 Oct 2018 10:08:42 -0400 > Committer: Ingo Molnar > CommitDate: Tue, 2 Oct 2018 11:47:21 +0200 > > ACPI/NUMA: Add warning message if the padding size for KASLR is not enough > > Add warning message if the padding size for KASLR, > rand_mem_physical_padding, is not enough. The message also > says the suitable padding size. > > Signed-off-by: Masayoshi Mizuma > Cc: Baoquan He > Cc: Borislav Petkov > Cc: Linus Torvalds > Cc: Masayoshi Mizuma > Cc: Peter Zijlstra > Cc: Thomas Gleixner > Link: http://lkml.kernel.org/r/20181001140843.26137-3-msys.miz...@gmail.com > Signed-off-by: Ingo Molnar > --- > arch/x86/include/asm/setup.h | 2 ++ > drivers/acpi/numa.c | 14 ++ > 2 files changed, 16 insertions(+) > > diff --git a/arch/x86/include/asm/setup.h b/arch/x86/include/asm/setup.h > index ae13bc974416..65a5bf8f6aba 100644 > --- a/arch/x86/include/asm/setup.h > +++ b/arch/x86/include/asm/setup.h > @@ -80,6 +80,8 @@ static inline unsigned long kaslr_offset(void) > return (unsigned long)&_text - __START_KERNEL; > } > > +extern int rand_mem_physical_padding; > + > /* > * Do NOT EVER look at the BIOS memory size location. > * It does not work on many machines. > diff --git a/drivers/acpi/numa.c b/drivers/acpi/numa.c > index 85167603b9c9..3d69834c692f 100644 > --- a/drivers/acpi/numa.c > +++ b/drivers/acpi/numa.c > @@ -32,6 +32,7 @@ > #include > #include > #include > +#include > > static nodemask_t nodes_found_map = NODE_MASK_NONE; > > @@ -435,6 +436,7 @@ acpi_table_parse_srat(enum acpi_srat_type id, > int __init acpi_numa_init(void) > { > int cnt = 0; > + u64 max_possible_phys, max_actual_phys, threshold; > > if (acpi_disabled) > return -EINVAL; > @@ -463,6 +465,18 @@ int __init acpi_numa_init(void) > > cnt = acpi_table_parse_srat(ACPI_SRAT_TYPE_MEMORY_AFFINITY, > acpi_parse_memory_affinity, 0); > + > + /* check the padding size for KASLR is enough. */ > + if (parsed_numa_memblks && kaslr_enabled()) { > + max_actual_phys = roundup(PFN_PHYS(max_pfn), 1ULL << > 40); > + max_possible_phys = roundup(PFN_PHYS(max_possible_pfn), > 1ULL << 40); > + threshold = max_actual_phys + > ((u64)rand_mem_physical_padding << 40); Nope, not really: ld: drivers/acpi/numa.o: in function `acpi_numa_init': /home/boris/kernel/linux/drivers/acpi/numa.c:473: undefined reference to `rand_mem_physical_padding' make: *** [Makefile:1030: vmlinux] Error 1 due to CONFIG_RANDOMIZE_MEMORY=n in my .config. You need to add a fix ontop which adds a function get_rand_mem_physical_padding() which is defined in CONFIG_RANDOMIZE_MEMORY=y and outside returns 0. And then make that rand_mem_physical_padding static and do not export it to anything outside of kaslr.c but use the accessor. Thx. -- Regards/Gruss, Boris. Good mailing practices for 400: avoid top-posting and trim the reply.
[tip:x86/boot] ACPI/NUMA: Add warning message if the padding size for KASLR is not enough
Commit-ID: 3b054ca88c4f4dd5f516a12d4b6d6bd0ae826f41 Gitweb: https://git.kernel.org/tip/3b054ca88c4f4dd5f516a12d4b6d6bd0ae826f41 Author: Masayoshi Mizuma AuthorDate: Mon, 1 Oct 2018 10:08:42 -0400 Committer: Ingo Molnar CommitDate: Tue, 2 Oct 2018 11:47:21 +0200 ACPI/NUMA: Add warning message if the padding size for KASLR is not enough Add warning message if the padding size for KASLR, rand_mem_physical_padding, is not enough. The message also says the suitable padding size. Signed-off-by: Masayoshi Mizuma Cc: Baoquan He Cc: Borislav Petkov Cc: Linus Torvalds Cc: Masayoshi Mizuma Cc: Peter Zijlstra Cc: Thomas Gleixner Link: http://lkml.kernel.org/r/20181001140843.26137-3-msys.miz...@gmail.com Signed-off-by: Ingo Molnar --- arch/x86/include/asm/setup.h | 2 ++ drivers/acpi/numa.c | 14 ++ 2 files changed, 16 insertions(+) diff --git a/arch/x86/include/asm/setup.h b/arch/x86/include/asm/setup.h index ae13bc974416..65a5bf8f6aba 100644 --- a/arch/x86/include/asm/setup.h +++ b/arch/x86/include/asm/setup.h @@ -80,6 +80,8 @@ static inline unsigned long kaslr_offset(void) return (unsigned long)&_text - __START_KERNEL; } +extern int rand_mem_physical_padding; + /* * Do NOT EVER look at the BIOS memory size location. * It does not work on many machines. diff --git a/drivers/acpi/numa.c b/drivers/acpi/numa.c index 85167603b9c9..3d69834c692f 100644 --- a/drivers/acpi/numa.c +++ b/drivers/acpi/numa.c @@ -32,6 +32,7 @@ #include #include #include +#include static nodemask_t nodes_found_map = NODE_MASK_NONE; @@ -435,6 +436,7 @@ acpi_table_parse_srat(enum acpi_srat_type id, int __init acpi_numa_init(void) { int cnt = 0; + u64 max_possible_phys, max_actual_phys, threshold; if (acpi_disabled) return -EINVAL; @@ -463,6 +465,18 @@ int __init acpi_numa_init(void) cnt = acpi_table_parse_srat(ACPI_SRAT_TYPE_MEMORY_AFFINITY, acpi_parse_memory_affinity, 0); + + /* check the padding size for KASLR is enough. */ + if (parsed_numa_memblks && kaslr_enabled()) { + max_actual_phys = roundup(PFN_PHYS(max_pfn), 1ULL << 40); + max_possible_phys = roundup(PFN_PHYS(max_possible_pfn), 1ULL << 40); + threshold = max_actual_phys + ((u64)rand_mem_physical_padding << 40); + + if (max_possible_phys > threshold) { + pr_warn("Set 'rand_mem_physical_padding=%llu' to avoid memory hotadd failure.\n", + (max_possible_phys - max_actual_phys) >> 40); + } + } } /* SLIT: System Locality Information Table */
[tip:x86/boot] ACPI/NUMA: Add warning message if the padding size for KASLR is not enough
Commit-ID: 3b054ca88c4f4dd5f516a12d4b6d6bd0ae826f41 Gitweb: https://git.kernel.org/tip/3b054ca88c4f4dd5f516a12d4b6d6bd0ae826f41 Author: Masayoshi Mizuma AuthorDate: Mon, 1 Oct 2018 10:08:42 -0400 Committer: Ingo Molnar CommitDate: Tue, 2 Oct 2018 11:47:21 +0200 ACPI/NUMA: Add warning message if the padding size for KASLR is not enough Add warning message if the padding size for KASLR, rand_mem_physical_padding, is not enough. The message also says the suitable padding size. Signed-off-by: Masayoshi Mizuma Cc: Baoquan He Cc: Borislav Petkov Cc: Linus Torvalds Cc: Masayoshi Mizuma Cc: Peter Zijlstra Cc: Thomas Gleixner Link: http://lkml.kernel.org/r/20181001140843.26137-3-msys.miz...@gmail.com Signed-off-by: Ingo Molnar --- arch/x86/include/asm/setup.h | 2 ++ drivers/acpi/numa.c | 14 ++ 2 files changed, 16 insertions(+) diff --git a/arch/x86/include/asm/setup.h b/arch/x86/include/asm/setup.h index ae13bc974416..65a5bf8f6aba 100644 --- a/arch/x86/include/asm/setup.h +++ b/arch/x86/include/asm/setup.h @@ -80,6 +80,8 @@ static inline unsigned long kaslr_offset(void) return (unsigned long)&_text - __START_KERNEL; } +extern int rand_mem_physical_padding; + /* * Do NOT EVER look at the BIOS memory size location. * It does not work on many machines. diff --git a/drivers/acpi/numa.c b/drivers/acpi/numa.c index 85167603b9c9..3d69834c692f 100644 --- a/drivers/acpi/numa.c +++ b/drivers/acpi/numa.c @@ -32,6 +32,7 @@ #include #include #include +#include static nodemask_t nodes_found_map = NODE_MASK_NONE; @@ -435,6 +436,7 @@ acpi_table_parse_srat(enum acpi_srat_type id, int __init acpi_numa_init(void) { int cnt = 0; + u64 max_possible_phys, max_actual_phys, threshold; if (acpi_disabled) return -EINVAL; @@ -463,6 +465,18 @@ int __init acpi_numa_init(void) cnt = acpi_table_parse_srat(ACPI_SRAT_TYPE_MEMORY_AFFINITY, acpi_parse_memory_affinity, 0); + + /* check the padding size for KASLR is enough. */ + if (parsed_numa_memblks && kaslr_enabled()) { + max_actual_phys = roundup(PFN_PHYS(max_pfn), 1ULL << 40); + max_possible_phys = roundup(PFN_PHYS(max_possible_pfn), 1ULL << 40); + threshold = max_actual_phys + ((u64)rand_mem_physical_padding << 40); + + if (max_possible_phys > threshold) { + pr_warn("Set 'rand_mem_physical_padding=%llu' to avoid memory hotadd failure.\n", + (max_possible_phys - max_actual_phys) >> 40); + } + } } /* SLIT: System Locality Information Table */