Re: [tip:x86/boot] ACPI/NUMA: Add warning message if the padding size for KASLR is not enough

2018-10-03 Thread Masayoshi Mizuma
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

2018-10-03 Thread Masayoshi Mizuma
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

2018-10-03 Thread Borislav Petkov
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

2018-10-03 Thread Borislav Petkov
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

2018-10-03 Thread Peter Zijlstra


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

2018-10-03 Thread Peter Zijlstra


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

2018-10-03 Thread Masayoshi Mizuma
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

2018-10-03 Thread Masayoshi Mizuma
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

2018-10-02 Thread Masayoshi Mizuma
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

2018-10-02 Thread Masayoshi Mizuma
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

2018-10-02 Thread Borislav Petkov
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

2018-10-02 Thread Borislav Petkov
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

2018-10-02 Thread tip-bot for Masayoshi Mizuma
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

2018-10-02 Thread tip-bot for Masayoshi Mizuma
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 */