Message ID | 20190807065706.11411-10-yanaijie@huawei.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | implement KASLR for powerpc/fsl_booke/32 | expand |
Jason Yan <yanaijie@huawei.com> writes: > diff --git a/arch/powerpc/kernel/kaslr_booke.c b/arch/powerpc/kernel/kaslr_booke.c > index c6b326424b54..436f9a03f385 100644 > --- a/arch/powerpc/kernel/kaslr_booke.c > +++ b/arch/powerpc/kernel/kaslr_booke.c > @@ -361,6 +361,18 @@ static unsigned long __init kaslr_choose_location(void *dt_ptr, phys_addr_t size > return kaslr_offset; > } > > +static inline __init bool kaslr_disabled(void) > +{ > + char *str; > + > + str = strstr(boot_command_line, "nokaslr"); > + if (str == boot_command_line || > + (str > boot_command_line && *(str - 1) == ' ')) > + return true; This extra logic doesn't work for "nokaslrfoo". Is it worth it? cheers
On 2019/8/7 21:03, Michael Ellerman wrote: > Jason Yan <yanaijie@huawei.com> writes: >> diff --git a/arch/powerpc/kernel/kaslr_booke.c b/arch/powerpc/kernel/kaslr_booke.c >> index c6b326424b54..436f9a03f385 100644 >> --- a/arch/powerpc/kernel/kaslr_booke.c >> +++ b/arch/powerpc/kernel/kaslr_booke.c >> @@ -361,6 +361,18 @@ static unsigned long __init kaslr_choose_location(void *dt_ptr, phys_addr_t size >> return kaslr_offset; >> } >> >> +static inline __init bool kaslr_disabled(void) >> +{ >> + char *str; >> + >> + str = strstr(boot_command_line, "nokaslr"); >> + if (str == boot_command_line || >> + (str > boot_command_line && *(str - 1) == ' ')) >> + return true; > > This extra logic doesn't work for "nokaslrfoo". Is it worth it? > Seems nobody likes this logic. Maybe I can delete this logic for now and see if anyone has any objections. > cheers > > . >
diff --git a/arch/powerpc/kernel/kaslr_booke.c b/arch/powerpc/kernel/kaslr_booke.c index c6b326424b54..436f9a03f385 100644 --- a/arch/powerpc/kernel/kaslr_booke.c +++ b/arch/powerpc/kernel/kaslr_booke.c @@ -361,6 +361,18 @@ static unsigned long __init kaslr_choose_location(void *dt_ptr, phys_addr_t size return kaslr_offset; } +static inline __init bool kaslr_disabled(void) +{ + char *str; + + str = strstr(boot_command_line, "nokaslr"); + if (str == boot_command_line || + (str > boot_command_line && *(str - 1) == ' ')) + return true; + + return false; +} + /* * To see if we need to relocate the kernel to a random offset * void *dt_ptr - address of the device tree @@ -376,6 +388,8 @@ notrace void __init kaslr_early_init(void *dt_ptr, phys_addr_t size) kernel_sz = (unsigned long)_end - KERNELBASE; kaslr_get_cmdline(dt_ptr); + if (kaslr_disabled()) + return; offset = kaslr_choose_location(dt_ptr, size, kernel_sz);