qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [Qemu-trivial] [PATCH] hw/i386/pc: reject to boot a wro


From: li guang
Subject: Re: [Qemu-devel] [Qemu-trivial] [PATCH] hw/i386/pc: reject to boot a wrong header magic kernel
Date: Mon, 01 Apr 2013 09:16:46 +0800

OK, Thanks!
I will update this patch as your comment.

在 2013-03-29五的 15:46 +0100,Stefan Hajnoczi写道:
> On Fri, Mar 29, 2013 at 1:38 AM, li guang <address@hidden> wrote:
> > 在 2013-03-28四的 10:42 +0100,Stefan Hajnoczi写道:
> >> On Wed, Mar 27, 2013 at 02:10:31PM +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 <address@hidden>
> >> > ---
> >> >  hw/i386/pc.c |    4 +++-
> >> >  1 files changed, 3 insertions(+), 1 deletions(-)
> >> >
> >> > diff --git a/hw/i386/pc.c b/hw/i386/pc.c
> >> > index b1e06fa..2b78dfc 100644
> >> > --- a/hw/i386/pc.c
> >> > +++ b/hw/i386/pc.c
> >> > @@ -683,8 +683,10 @@ 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, "please assure specicified kernel is for 
> >> > x86!\n");
> >> > +            exit(1);
> >>
> >> load_multiboot() can fail for other reasons so this error messing is
> >> misleading.  Giving QEMU a non-x86 kernel is just one scenario where
> >> this may fail.
> >
> > according to my check of load_mutiboot function,
> > mostly it will return 0 if it's not multboot,
> > or 1 it's a multiboot, so print this message,
> > or can I just print "wrong kernel image!" ?
> 
> Yes, load_multiboot() fails if the image is not a valid multiboot
> image.  An error message like "not a valid multiboot image" is good.
> 
> >>
> >> >          }
> >> > -        protocol = 0;
> >> >      }
> >>
> >> Why did you drop protocol = 0?
> >
> > I think we only want either normal or multi boot linux kernel,
> > I can't see meaning let other case go on.
> > so, here, if a normal kernel, OK, go on,
> > if multiboot, OK, go on,
> > others, NO, end up.
> > so, "protocol = 0" is meaningless here.
> 
> I looked in more detail now and here is why we cannot drop this line of code:
> 
>     uint16_t protocol;
> 
> Note that the variable is not initialized.
> 
> [...]
>     if (ldl_p(header+0x202) == 0x53726448)
>     protocol = lduw_p(header+0x206);
>     else {
>     /* This looks like a multiboot kernel. If it is, let's stop
>        treating it like a Linux kernel. */
>         if (load_multiboot(fw_cfg, f, kernel_filename, initrd_filename,
>                            kernel_cmdline, kernel_size, header))
>             return;
>     protocol = 0;
> 
> Set it to 0 here so it's initialized
> 
>     }
>     if (protocol < 0x200 || !(header[0x211] & 0x01)) {
> 
> Use variable here - so we *must* initialize it before use.
> 
> Stefan





reply via email to

[Prev in Thread] Current Thread [Next in Thread]