Re: [PATCH v3 5/6] powerpc/fsl_booke/64: clear the original kernel if randomized

2020-03-04 Thread Jason Yan




在 2020/3/5 5:53, Scott Wood 写道:

On Thu, 2020-02-06 at 10:58 +0800, Jason Yan wrote:

The original kernel still exists in the memory, clear it now.

Signed-off-by: Jason Yan 
Cc: Scott Wood 
Cc: Diana Craciun 
Cc: Michael Ellerman 
Cc: Christophe Leroy 
Cc: Benjamin Herrenschmidt 
Cc: Paul Mackerras 
Cc: Nicholas Piggin 
Cc: Kees Cook 
---
  arch/powerpc/mm/nohash/kaslr_booke.c | 4 +++-
  1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/arch/powerpc/mm/nohash/kaslr_booke.c
b/arch/powerpc/mm/nohash/kaslr_booke.c
index c6f5c1db1394..ed1277059368 100644
--- a/arch/powerpc/mm/nohash/kaslr_booke.c
+++ b/arch/powerpc/mm/nohash/kaslr_booke.c
@@ -378,8 +378,10 @@ notrace void __init kaslr_early_init(void *dt_ptr,
phys_addr_t size)
unsigned int *__kaslr_offset = (unsigned int *)(KERNELBASE + 0x58);
unsigned int *__run_at_load = (unsigned int *)(KERNELBASE + 0x5c);
  
-	if (*__run_at_load == 1)

+   if (*__run_at_load == 1) {
+   kaslr_late_init();
return;
+   }


What if you're here because kexec set __run_at_load (or
CONFIG_RELOCATABLE_TEST is enabled), not because kaslr happened?



Nothing will happen because kaslr_late_init() only clears memory when
kernstart_virt_addr is not KERNELBASE. When __run_at_load is set then
KASLR will not take effect.


-Scott



.





Re: [PATCH v3 5/6] powerpc/fsl_booke/64: clear the original kernel if randomized

2020-03-04 Thread Scott Wood
On Thu, 2020-02-06 at 10:58 +0800, Jason Yan wrote:
> The original kernel still exists in the memory, clear it now.
> 
> Signed-off-by: Jason Yan 
> Cc: Scott Wood 
> Cc: Diana Craciun 
> Cc: Michael Ellerman 
> Cc: Christophe Leroy 
> Cc: Benjamin Herrenschmidt 
> Cc: Paul Mackerras 
> Cc: Nicholas Piggin 
> Cc: Kees Cook 
> ---
>  arch/powerpc/mm/nohash/kaslr_booke.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/powerpc/mm/nohash/kaslr_booke.c
> b/arch/powerpc/mm/nohash/kaslr_booke.c
> index c6f5c1db1394..ed1277059368 100644
> --- a/arch/powerpc/mm/nohash/kaslr_booke.c
> +++ b/arch/powerpc/mm/nohash/kaslr_booke.c
> @@ -378,8 +378,10 @@ notrace void __init kaslr_early_init(void *dt_ptr,
> phys_addr_t size)
>   unsigned int *__kaslr_offset = (unsigned int *)(KERNELBASE + 0x58);
>   unsigned int *__run_at_load = (unsigned int *)(KERNELBASE + 0x5c);
>  
> - if (*__run_at_load == 1)
> + if (*__run_at_load == 1) {
> + kaslr_late_init();
>   return;
> + }

What if you're here because kexec set __run_at_load (or
CONFIG_RELOCATABLE_TEST is enabled), not because kaslr happened?

-Scott




Re: [PATCH v3 5/6] powerpc/fsl_booke/64: clear the original kernel if randomized

2020-02-25 Thread Jason Yan




在 2020/2/20 21:49, Christophe Leroy 写道:



Le 06/02/2020 à 03:58, Jason Yan a écrit :

The original kernel still exists in the memory, clear it now.


No such problem with PPC32 ? Or is that common ?



PPC32 did this in relocate_init() in fsl_booke.c because PPC32 will not 
reach kaslr_early_init for the second pass after relocation.


Thanks,
Jason


Christophe



Signed-off-by: Jason Yan 
Cc: Scott Wood 
Cc: Diana Craciun 
Cc: Michael Ellerman 
Cc: Christophe Leroy 
Cc: Benjamin Herrenschmidt 
Cc: Paul Mackerras 
Cc: Nicholas Piggin 
Cc: Kees Cook 
---
  arch/powerpc/mm/nohash/kaslr_booke.c | 4 +++-
  1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/arch/powerpc/mm/nohash/kaslr_booke.c 
b/arch/powerpc/mm/nohash/kaslr_booke.c

index c6f5c1db1394..ed1277059368 100644
--- a/arch/powerpc/mm/nohash/kaslr_booke.c
+++ b/arch/powerpc/mm/nohash/kaslr_booke.c
@@ -378,8 +378,10 @@ notrace void __init kaslr_early_init(void 
*dt_ptr, phys_addr_t size)

  unsigned int *__kaslr_offset = (unsigned int *)(KERNELBASE + 0x58);
  unsigned int *__run_at_load = (unsigned int *)(KERNELBASE + 0x5c);
-    if (*__run_at_load == 1)
+    if (*__run_at_load == 1) {
+    kaslr_late_init();
  return;
+    }
  /* Setup flat device-tree pointer */
  initial_boot_params = dt_ptr;



.




Re: [PATCH v3 5/6] powerpc/fsl_booke/64: clear the original kernel if randomized

2020-02-20 Thread Christophe Leroy




Le 06/02/2020 à 03:58, Jason Yan a écrit :

The original kernel still exists in the memory, clear it now.


No such problem with PPC32 ? Or is that common ?

Christophe



Signed-off-by: Jason Yan 
Cc: Scott Wood 
Cc: Diana Craciun 
Cc: Michael Ellerman 
Cc: Christophe Leroy 
Cc: Benjamin Herrenschmidt 
Cc: Paul Mackerras 
Cc: Nicholas Piggin 
Cc: Kees Cook 
---
  arch/powerpc/mm/nohash/kaslr_booke.c | 4 +++-
  1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/arch/powerpc/mm/nohash/kaslr_booke.c 
b/arch/powerpc/mm/nohash/kaslr_booke.c
index c6f5c1db1394..ed1277059368 100644
--- a/arch/powerpc/mm/nohash/kaslr_booke.c
+++ b/arch/powerpc/mm/nohash/kaslr_booke.c
@@ -378,8 +378,10 @@ notrace void __init kaslr_early_init(void *dt_ptr, 
phys_addr_t size)
unsigned int *__kaslr_offset = (unsigned int *)(KERNELBASE + 0x58);
unsigned int *__run_at_load = (unsigned int *)(KERNELBASE + 0x5c);
  
-	if (*__run_at_load == 1)

+   if (*__run_at_load == 1) {
+   kaslr_late_init();
return;
+   }
  
  	/* Setup flat device-tree pointer */

initial_boot_params = dt_ptr;