From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:41560) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UPe8K-0005Em-Hm for qemu-devel@nongnu.org; Tue, 09 Apr 2013 15:23:10 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UPe8J-0005Y1-Gy for qemu-devel@nongnu.org; Tue, 09 Apr 2013 15:23:08 -0400 Received: from e33.co.us.ibm.com ([32.97.110.151]:44832) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UPe8J-0005Xr-A8 for qemu-devel@nongnu.org; Tue, 09 Apr 2013 15:23:07 -0400 Received: from /spool/local by e33.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 9 Apr 2013 13:23:05 -0600 Message-ID: <516468E4.7020007@linux.vnet.ibm.com> Date: Tue, 09 Apr 2013 14:15:48 -0500 From: Jesse Larrew MIME-Version: 1.0 References: <1365474461-17474-1-git-send-email-lig.fnst@cn.fujitsu.com> <51639ACE.8020505@linux.vnet.ibm.com> <1365483900.9553.8.camel@liguang.fnst.cn.fujitsu.com> In-Reply-To: <1365483900.9553.8.camel@liguang.fnst.cn.fujitsu.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Subject: Re: [Qemu-devel] [PATCH v3] hw/i386/pc: prompt not multboot or morden kernel image List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: li guang Cc: qemu-trivial@nongnu.org, Stefan Hajnoczi , Anthony Liguori , qemu-devel@nongnu.org On 04/09/2013 12:05 AM, li guang wrote: > 在 2013-04-08一的 23:36 -0500,Jesse Larrew写道: >> On 04/08/2013 09:27 PM, liguang wrote: >>> if head magic is missing or wrong unexpectedly, we'd >>> better to prompt memssage for this. >>> 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. >>> >> >> Yes, that message would definitely be misleading in this case. >> >>> Signed-off-by: liguang >>> --- >>> hw/i386/pc.c | 2 ++ >>> 1 files changed, 2 insertions(+), 0 deletions(-) >>> >>> diff --git a/hw/i386/pc.c b/hw/i386/pc.c >>> index ebbf059..6b29c3f 100644 >>> --- a/hw/i386/pc.c >>> +++ b/hw/i386/pc.c >>> @@ -686,6 +686,8 @@ 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, "warn: invalid multiboot or modern kernel image\n"); >>> } >>> protocol = 0; >>> } >>> >> >> My impression from reading through the code is that this branch can be >> legitimately triggered by an older kernel (protocol < 0x200). > > right. > >> In that case,the error message above would also be misleading. > > the warning message is saying: hey, we prefer modern kernel image > or multiboot, but you specify neither, what are you doing? > do you want to boot an old(obsolete) kernel? > > or, add a line like fprintf(stderr, "do you boot an old kernel?\n") :-) > Ah, I understand now. Thanks for explaining that. :) >> >> I think a better solution might be to simply validate that the arch >> specified in the ELF header matches the arch that qemu is emulating. >> I'll look into this more tomorrow morning. :) > > that's fine > Looking at Documentation/x86/boot.txt in the kernel source, it looks like there is a separate word of header magic that all x86 kernels should have -- even the oldest images. Adding a separate check for that magic might be a more complete solution: --- hw/i386/pc.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/hw/i386/pc.c b/hw/i386/pc.c index 8d75b34..e120427 100644 --- a/hw/i386/pc.c +++ b/hw/i386/pc.c @@ -686,6 +686,14 @@ static void load_linux(void *fw_cfg, if (load_multiboot(fw_cfg, f, kernel_filename, initrd_filename, kernel_cmdline, kernel_size, header)) { return; + } else { + /* This is the closest thing old Linux kernels have to a + magic number. */ + if (lduw_p(header+0x01FE) != 0xAA55) { + fprintf(stderr, "qemu: '%s' is not an x86 kernel image.\n", + kernel_filename); + exit(1); + } } protocol = 0; } -- 1.7.11.7 Jesse Larrew Software Engineer, KVM Team IBM Linux Technology Center Phone: (512) 973-2052 (T/L: 363-2052) jlarrew@linux.vnet.ibm.com