Patchwork [v2] hw/i386/pc: reject to boot a wrong header magic kernel

login
register
mail settings
Submitter liguang
Date April 1, 2013, 1:21 a.m.
Message ID <1364779317-3963-1-git-send-email-lig.fnst@cn.fujitsu.com>
Download mbox | patch
Permalink /patch/232662/
State New
Headers show

Comments

liguang - April 1, 2013, 1:21 a.m.
if head magic is missing or wrong unexpectedly, we'd
better to reject booting.
e.g.
I make a mistake to boot a vmlinuz for MIPS(which
I think it's for x86) like this:
qemu-system-x86_64 -kernel vmlinuz -initrd demord
then qemu report:
"qemu: linux kernel too old to load a ram disk"
that's misleading.

Signed-off-by: liguang <lig.fnst@cn.fujitsu.com>
---
 hw/i386/pc.c |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)
Stefan Hajnoczi - April 5, 2013, 12:59 p.m.
On Mon, Apr 01, 2013 at 09:21:57AM +0800, liguang wrote:
> if head magic is missing or wrong unexpectedly, we'd
> better to reject booting.
> e.g.
> I make a mistake to boot a vmlinuz for MIPS(which
> I think it's for x86) like this:
> qemu-system-x86_64 -kernel vmlinuz -initrd demord
> then qemu report:
> "qemu: linux kernel too old to load a ram disk"
> that's misleading.
> 
> Signed-off-by: liguang <lig.fnst@cn.fujitsu.com>
> ---
>  hw/i386/pc.c |    3 +++
>  1 files changed, 3 insertions(+), 0 deletions(-)
> 
> diff --git a/hw/i386/pc.c b/hw/i386/pc.c
> index b1e06fa..bfbb5fe 100644
> --- a/hw/i386/pc.c
> +++ b/hw/i386/pc.c
> @@ -683,6 +683,9 @@ static void load_linux(void *fw_cfg,
>          if (load_multiboot(fw_cfg, f, kernel_filename, initrd_filename,
>                             kernel_cmdline, kernel_size, header)) {
>              return;
> +        } else {
> +            fprintf(stderr, "not a valid multiboot image!\n");
> +            exit(1);
>          }
>          protocol = 0;

The point of protocol = 0 is to support old Linux kernels.  If we exit
when probing load_multiboot() fails then QEMU will no longer load old
Linux kernels!

I suggest just:
fprintf(stderr, "warning: not a valid multiboot or modern kernel image\n");

Stefan
liguang - April 8, 2013, 12:13 a.m.
在 2013-04-05五的 14:59 +0200,Stefan Hajnoczi写道:
> On Mon, Apr 01, 2013 at 09:21:57AM +0800, liguang wrote:
> > if head magic is missing or wrong unexpectedly, we'd
> > better to reject booting.
> > e.g.
> > I make a mistake to boot a vmlinuz for MIPS(which
> > I think it's for x86) like this:
> > qemu-system-x86_64 -kernel vmlinuz -initrd demord
> > then qemu report:
> > "qemu: linux kernel too old to load a ram disk"
> > that's misleading.
> > 
> > Signed-off-by: liguang <lig.fnst@cn.fujitsu.com>
> > ---
> >  hw/i386/pc.c |    3 +++
> >  1 files changed, 3 insertions(+), 0 deletions(-)
> > 
> > diff --git a/hw/i386/pc.c b/hw/i386/pc.c
> > index b1e06fa..bfbb5fe 100644
> > --- a/hw/i386/pc.c
> > +++ b/hw/i386/pc.c
> > @@ -683,6 +683,9 @@ static void load_linux(void *fw_cfg,
> >          if (load_multiboot(fw_cfg, f, kernel_filename, initrd_filename,
> >                             kernel_cmdline, kernel_size, header)) {
> >              return;
> > +        } else {
> > +            fprintf(stderr, "not a valid multiboot image!\n");
> > +            exit(1);
> >          }
> >          protocol = 0;
> 
> The point of protocol = 0 is to support old Linux kernels.  If we exit
> when probing load_multiboot() fails then QEMU will no longer load old
> Linux kernels!
> 
> I suggest just:
> fprintf(stderr, "warning: not a valid multiboot or modern kernel image\n");
> 
> Stefan

OK, Thanks!

Patch

diff --git a/hw/i386/pc.c b/hw/i386/pc.c
index b1e06fa..bfbb5fe 100644
--- a/hw/i386/pc.c
+++ b/hw/i386/pc.c
@@ -683,6 +683,9 @@  static void load_linux(void *fw_cfg,
         if (load_multiboot(fw_cfg, f, kernel_filename, initrd_filename,
                            kernel_cmdline, kernel_size, header)) {
             return;
+        } else {
+            fprintf(stderr, "not a valid multiboot image!\n");
+            exit(1);
         }
         protocol = 0;
     }