diff --git a/kexec-tools-edd-fix b/kexec-tools-edd-fix new file mode 100644 index 0000000..f786012 --- /dev/null +++ b/kexec-tools-edd-fix @@ -0,0 +1,34 @@ +From 86ff227557dde6398317f0cea9448391314b070a Mon Sep 17 00:00:00 2001 +From: Bernhard Walle +Date: Mon, 26 May 2008 23:12:58 +0200 +Subject: [PATCH] EDD fix + +This patch fixes EDD support where the BIOS reports a length lower than the +actual length of raw_data in sysfs. That's no problem -- the check only +needs to catch the case where the sysfs file is *smaller* than the +BIOS reported length. + +Also add a newline at the end of the error message. + +The problem was introduced in 3bf0213789d56054f601c5a06372f78567aacdd9 by +myself, the initial EDD implementation. + + +Signed-off-by: Bernhard Walle + +diff --git a/kexec/arch/i386/x86-linux-setup.c b/kexec/arch/i386/x86-linux-setup.c +index 05a087e..cbb9d30 100644 +--- a/kexec/arch/i386/x86-linux-setup.c ++++ b/kexec/arch/i386/x86-linux-setup.c +@@ -254,9 +254,9 @@ static int read_edd_raw_data(const char *dir, struct edd_info *edd_info) + len = ((uint16_t *)edd_info->edd_device_params)[0]; + dbgprintf("EDD raw data has length %d\n", len); + +- if (read_chars != len) { ++ if (read_chars < len) { + fprintf(stderr, "BIOS reported EDD length of %hd but only " +- "%d chars read.", len, (int)read_chars); ++ "%d chars read.\n", len, (int)read_chars); + return -1; + } + diff --git a/kexec-tools.changes b/kexec-tools.changes index be2e644..9fc4d93 100644 --- a/kexec-tools.changes +++ b/kexec-tools.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Mon May 26 23:14:15 CEST 2008 - bwalle@suse.de + +- fix EDD support when the BIOS-reported length is smaller than + the sysfs raw_data size (bnc#388754) + ------------------------------------------------------------------- Mon May 26 14:15:00 CEST 2008 - bwalle@suse.de diff --git a/kexec-tools.spec b/kexec-tools.spec index 27ae3b6..6fbcf19 100644 --- a/kexec-tools.spec +++ b/kexec-tools.spec @@ -23,7 +23,7 @@ Requires: %insserv_prereq %fillup_prereq AutoReqProv: on Summary: Tools for fast kernel loading Version: 1.101 -Release: 198 +Release: 199 Source: %{name}-%{package_version}.tar.bz2 Source1: README.SUSE Url: http://ftp.kernel.org/pub/linux/kernel/people/horms/kexec-tools/ @@ -34,6 +34,7 @@ Patch2: kexec-tools.gcc-bug.patch Patch3: kexec-tools-edd-support Patch4: kexec-tools-refactor-architecture-detection Patch5: kexec-tools-fix-arch-on-unload +Patch6: kexec-tools-edd-fix %description Kexec is a user space utility for loading another kernel and asking the @@ -59,6 +60,7 @@ Authors: %patch3 -p1 %patch4 -p1 %patch5 -p1 +%patch6 -p1 %build %{?suse_update_config -f} @@ -94,6 +96,9 @@ install -c -m 0644 kexec/kexec.8 $RPM_BUILD_ROOT%{_mandir}/man8 %endif %changelog +* Tue May 27 2008 bwalle@suse.de +- fix EDD support when the BIOS-reported length is smaller than + the sysfs raw_data size (bnc#388754) * Mon May 26 2008 bwalle@suse.de - fix kexec unload (rckdump stop) on ppc64 (bnc#394216) * Tue May 13 2008 bwalle@suse.de