From 9bab65c49d29b178bf9e7507038df8bcad1ecd43 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Wed, 11 Apr 2012 22:40:20 +0200 Subject: [PATCH] * grub-core/loader/i386/linux.c (grub_cmd_linux): Avoid accessing kh.loadflags on pre-2.00 kernels. --- ChangeLog | 5 +++++ grub-core/loader/i386/linux.c | 14 +++++++------- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4f4913eb4..7ff7a99cc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2012-04-11 Vladimir Serbinenko + + * grub-core/loader/i386/linux.c (grub_cmd_linux): Avoid accessing + kh.loadflags on pre-2.00 kernels. + 2012-04-11 Vladimir Serbinenko Terminate UNDI and PXE before launching the payload to avoid problems diff --git a/grub-core/loader/i386/linux.c b/grub-core/loader/i386/linux.c index 8a4c9896b..8f4bd3a53 100644 --- a/grub-core/loader/i386/linux.c +++ b/grub-core/loader/i386/linux.c @@ -700,9 +700,12 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)), goto fail; } - if (! (lh.loadflags & GRUB_LINUX_FLAG_BIG_KERNEL)) + /* FIXME: 2.03 is not always good enough (Linux 2.4 can be 2.03 and + still not support 32-bit boot. */ + if (lh.header != grub_cpu_to_le32 (GRUB_LINUX_MAGIC_SIGNATURE) + || grub_le_to_cpu16 (lh.version) < 0x0203) { - grub_error (GRUB_ERR_BAD_OS, "zImage doesn't support 32-bit boot" + grub_error (GRUB_ERR_BAD_OS, "version too old for 32-bit boot" #ifdef GRUB_MACHINE_PCBIOS " (try with `linux16')" #endif @@ -710,12 +713,9 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)), goto fail; } - /* FIXME: 2.03 is not always good enough (Linux 2.4 can be 2.03 and - still not support 32-bit boot. */ - if (lh.header != grub_cpu_to_le32 (GRUB_LINUX_MAGIC_SIGNATURE) - || grub_le_to_cpu16 (lh.version) < 0x0203) + if (! (lh.loadflags & GRUB_LINUX_FLAG_BIG_KERNEL)) { - grub_error (GRUB_ERR_BAD_OS, "version too old for 32-bit boot" + grub_error (GRUB_ERR_BAD_OS, "zImage doesn't support 32-bit boot" #ifdef GRUB_MACHINE_PCBIOS " (try with `linux16')" #endif