Message ID | 20200206025825.22934-6-yanaijie@huawei.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | implement KASLR for powerpc/fsl_booke/64 | expand |
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 <yanaijie@huawei.com> > Cc: Scott Wood <oss@buserror.net> > Cc: Diana Craciun <diana.craciun@nxp.com> > Cc: Michael Ellerman <mpe@ellerman.id.au> > Cc: Christophe Leroy <christophe.leroy@c-s.fr> > Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> > Cc: Paul Mackerras <paulus@samba.org> > Cc: Nicholas Piggin <npiggin@gmail.com> > Cc: Kees Cook <keescook@chromium.org> > --- > 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; >
在 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 <yanaijie@huawei.com> >> Cc: Scott Wood <oss@buserror.net> >> Cc: Diana Craciun <diana.craciun@nxp.com> >> Cc: Michael Ellerman <mpe@ellerman.id.au> >> Cc: Christophe Leroy <christophe.leroy@c-s.fr> >> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> >> Cc: Paul Mackerras <paulus@samba.org> >> Cc: Nicholas Piggin <npiggin@gmail.com> >> Cc: Kees Cook <keescook@chromium.org> >> --- >> 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; >> > > .
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 <yanaijie@huawei.com> > Cc: Scott Wood <oss@buserror.net> > Cc: Diana Craciun <diana.craciun@nxp.com> > Cc: Michael Ellerman <mpe@ellerman.id.au> > Cc: Christophe Leroy <christophe.leroy@c-s.fr> > Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> > Cc: Paul Mackerras <paulus@samba.org> > Cc: Nicholas Piggin <npiggin@gmail.com> > Cc: Kees Cook <keescook@chromium.org> > --- > 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
在 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 <yanaijie@huawei.com> >> Cc: Scott Wood <oss@buserror.net> >> Cc: Diana Craciun <diana.craciun@nxp.com> >> Cc: Michael Ellerman <mpe@ellerman.id.au> >> Cc: Christophe Leroy <christophe.leroy@c-s.fr> >> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> >> Cc: Paul Mackerras <paulus@samba.org> >> Cc: Nicholas Piggin <npiggin@gmail.com> >> Cc: Kees Cook <keescook@chromium.org> >> --- >> 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 > > > > . >
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;
The original kernel still exists in the memory, clear it now. Signed-off-by: Jason Yan <yanaijie@huawei.com> Cc: Scott Wood <oss@buserror.net> Cc: Diana Craciun <diana.craciun@nxp.com> Cc: Michael Ellerman <mpe@ellerman.id.au> Cc: Christophe Leroy <christophe.leroy@c-s.fr> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Paul Mackerras <paulus@samba.org> Cc: Nicholas Piggin <npiggin@gmail.com> Cc: Kees Cook <keescook@chromium.org> --- arch/powerpc/mm/nohash/kaslr_booke.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)