2014-02-11 10:07:56

by Dave Young

[permalink] [raw]
Subject: [PATCH] disable kaslr in kdump kernel


KASLR does not work in kdump kernel because it's too early that mem=exactmap
has not been parsed.

Since KASLR does not make much sense for kdump kernel thus let's disable it
for kdump kernel. To check if it is a kdump kernel I just check the cmdline
param elfcorehdr just like is_kdump_kernel.

Signed-off-by: Dave Young <[email protected]>
---
linux-2.6/arch/x86/boot/compressed/aslr.c | 5 +++++
1 file changed, 5 insertions(+)

Index: dyoung/git/linux-2.6/arch/x86/boot/compressed/aslr.c
===================================================================
--- linux-2.6/arch/x86/boot/compressed/aslr.c
+++ linux-2.6/arch/x86/boot/compressed/aslr.c
@@ -293,6 +293,11 @@ unsigned char *choose_kernel_location(un
goto out;
}

+ if (cmdline_find_option("elfcorehdr", NULL, 0) != -1) {
+ debug_putstr("KASLR disabled...\n");
+ goto out;
+ }
+
/* Record the various known unsafe memory ranges. */
mem_avoid_init((unsigned long)input, input_size,
(unsigned long)output, output_size);


2014-02-11 13:16:44

by Vivek Goyal

[permalink] [raw]
Subject: Re: [PATCH] disable kaslr in kdump kernel

On Tue, Feb 11, 2014 at 06:08:38PM +0800, Dave Young wrote:
>
> KASLR does not work in kdump kernel because it's too early that mem=exactmap
> has not been parsed.
>
> Since KASLR does not make much sense for kdump kernel thus let's disable it
> for kdump kernel. To check if it is a kdump kernel I just check the cmdline
> param elfcorehdr just like is_kdump_kernel.
>
> Signed-off-by: Dave Young <[email protected]>

I don't think it is a good idea. I don't like hardcoding second kernel's
behavior. I rather vary second kernel's behavior based on command line
parameters or based on values passed in bootparams.

So I am more than happy to pass command line option "nokaslr" instead
of hardcoding this in kernel.

Thanks
Vivek

> ---
> linux-2.6/arch/x86/boot/compressed/aslr.c | 5 +++++
> 1 file changed, 5 insertions(+)
>
> Index: dyoung/git/linux-2.6/arch/x86/boot/compressed/aslr.c
> ===================================================================
> --- linux-2.6/arch/x86/boot/compressed/aslr.c
> +++ linux-2.6/arch/x86/boot/compressed/aslr.c
> @@ -293,6 +293,11 @@ unsigned char *choose_kernel_location(un
> goto out;
> }
>
> + if (cmdline_find_option("elfcorehdr", NULL, 0) != -1) {
> + debug_putstr("KASLR disabled...\n");
> + goto out;
> + }
> +
> /* Record the various known unsafe memory ranges. */
> mem_avoid_init((unsigned long)input, input_size,
> (unsigned long)output, output_size);

2014-02-12 01:36:46

by Dave Young

[permalink] [raw]
Subject: Re: [PATCH] disable kaslr in kdump kernel

On 02/11/14 at 08:16am, Vivek Goyal wrote:
> On Tue, Feb 11, 2014 at 06:08:38PM +0800, Dave Young wrote:
> >
> > KASLR does not work in kdump kernel because it's too early that mem=exactmap
> > has not been parsed.
> >
> > Since KASLR does not make much sense for kdump kernel thus let's disable it
> > for kdump kernel. To check if it is a kdump kernel I just check the cmdline
> > param elfcorehdr just like is_kdump_kernel.
> >
> > Signed-off-by: Dave Young <[email protected]>
>
> I don't think it is a good idea. I don't like hardcoding second kernel's
> behavior. I rather vary second kernel's behavior based on command line
> parameters or based on values passed in bootparams.
>
> So I am more than happy to pass command line option "nokaslr" instead
> of hardcoding this in kernel.

That's also fine to me, but I think we'd better add it to documentation?

>
> Thanks
> Vivek
>
> > ---
> > linux-2.6/arch/x86/boot/compressed/aslr.c | 5 +++++
> > 1 file changed, 5 insertions(+)
> >
> > Index: dyoung/git/linux-2.6/arch/x86/boot/compressed/aslr.c
> > ===================================================================
> > --- linux-2.6/arch/x86/boot/compressed/aslr.c
> > +++ linux-2.6/arch/x86/boot/compressed/aslr.c
> > @@ -293,6 +293,11 @@ unsigned char *choose_kernel_location(un
> > goto out;
> > }
> >
> > + if (cmdline_find_option("elfcorehdr", NULL, 0) != -1) {
> > + debug_putstr("KASLR disabled...\n");
> > + goto out;
> > + }
> > +
> > /* Record the various known unsafe memory ranges. */
> > mem_avoid_init((unsigned long)input, input_size,
> > (unsigned long)output, output_size);

2014-02-12 14:05:22

by Vivek Goyal

[permalink] [raw]
Subject: Re: [PATCH] disable kaslr in kdump kernel

On Wed, Feb 12, 2014 at 09:37:34AM +0800, Dave Young wrote:
> On 02/11/14 at 08:16am, Vivek Goyal wrote:
> > On Tue, Feb 11, 2014 at 06:08:38PM +0800, Dave Young wrote:
> > >
> > > KASLR does not work in kdump kernel because it's too early that mem=exactmap
> > > has not been parsed.
> > >
> > > Since KASLR does not make much sense for kdump kernel thus let's disable it
> > > for kdump kernel. To check if it is a kdump kernel I just check the cmdline
> > > param elfcorehdr just like is_kdump_kernel.
> > >
> > > Signed-off-by: Dave Young <[email protected]>
> >
> > I don't think it is a good idea. I don't like hardcoding second kernel's
> > behavior. I rather vary second kernel's behavior based on command line
> > parameters or based on values passed in bootparams.
> >
> > So I am more than happy to pass command line option "nokaslr" instead
> > of hardcoding this in kernel.
>
> That's also fine to me, but I think we'd better add it to documentation?

Adding documentation is fine. May be Documentation/kdump/kdump.txt. Create
a section where we mention some of the preferred command line settings
for kdump to work.

Thanks
Vivek