From: Yinghai Lu <yinghai@kernel.org>
To: Simon Horman <horms@verge.net.au>,
"H. Peter Anvin" <hpa@zytor.com>, Vivek Goyal <vgoyal@redhat.com>,
"Eric W. Biederman" <ebiederm@xmission.com>
Cc: Yinghai Lu <yinghai@kernel.org>, kexec@lists.infradead.org
Subject: [PATCH v9 3/7] kexec, x86: clean boot_params area for entry-32bit path
Date: Thu, 21 Feb 2013 20:07:52 -0800 [thread overview]
Message-ID: <1361506076-13112-4-git-send-email-yinghai@kernel.org> (raw)
In-Reply-To: <1361506076-13112-1-git-send-email-yinghai@kernel.org>
kexec bzImage path setup data is shared with real-mode path, and
setup_header is copied together with setup_code.
Later 32bit just use whole area as boot_params for real_mode_data.
but those area for boot_params around setup_header is
not cleaned that will leave some field in boot_param as
non-zero value.
So clean whole buffer at first, and only copy setup_header for non
real-mode entry path.
Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
kexec/arch/i386/kexec-bzImage.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/kexec/arch/i386/kexec-bzImage.c b/kexec/arch/i386/kexec-bzImage.c
index 83a023d..35005c7 100644
--- a/kexec/arch/i386/kexec-bzImage.c
+++ b/kexec/arch/i386/kexec-bzImage.c
@@ -211,7 +211,19 @@ int do_bzImage_load(struct kexec_info *info,
/* The argument/parameter segment */
setup_size = kern16_size + command_line_len + PURGATORY_CMDLINE_SIZE;
real_mode = xmalloc(setup_size);
- memcpy(real_mode, kernel, kern16_size);
+ memset(real_mode, 0, setup_size);
+ if (!real_mode_entry) {
+ unsigned long setup_header_size = kernel[0x201] + 0x202 - 0x1f1;
+
+ /* only copy setup_header */
+ if (setup_header_size > 0x7f)
+ setup_header_size = 0x7f;
+ memcpy((unsigned char *)real_mode + 0x1f1, kernel + 0x1f1,
+ setup_header_size);
+ } else {
+ /* copy setup code and setup_header */
+ memcpy(real_mode, kernel, kern16_size);
+ }
if (info->kexec_flags & (KEXEC_ON_CRASH | KEXEC_PRESERVE_CONTEXT)) {
/* If using bzImage for capture kernel, then we will not be
--
1.7.10.4
_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec
next prev parent reply other threads:[~2013-02-22 4:08 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-02-22 4:07 [PATCH v9 0/7] kexec: put bzImage and ramdisk above 4G for x86 64bit Yinghai Lu
2013-02-22 4:07 ` [PATCH v9 1/7] kexec, x86: set booloader id in setup_header Yinghai Lu
2013-02-22 4:07 ` [PATCH v9 2/7] kexec, x86: add boot header member for version 2.12 Yinghai Lu
2013-02-22 4:07 ` Yinghai Lu [this message]
2013-02-22 4:07 ` [PATCH v9 4/7] kexec, x86: Fix bzImage real-mode booting Yinghai Lu
2013-02-22 4:07 ` [PATCH v9 5/7] kexec, x86: put ramdisk/cmd_line above 4G for 64bit bzImage Yinghai Lu
2013-02-22 4:07 ` [PATCH v9 6/7] kexec, x86_64: Load bzImage64 above 4G Yinghai Lu
2013-02-22 4:07 ` [PATCH v9 7/7] kexec, x86: handle Crash low kernel range Yinghai Lu
2013-02-26 9:18 ` [PATCH v9 0/7] kexec: put bzImage and ramdisk above 4G for x86 64bit Dave Young
2013-03-05 1:34 ` Simon Horman
2013-03-05 1:39 ` Simon Horman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1361506076-13112-4-git-send-email-yinghai@kernel.org \
--to=yinghai@kernel.org \
--cc=ebiederm@xmission.com \
--cc=horms@verge.net.au \
--cc=hpa@zytor.com \
--cc=kexec@lists.infradead.org \
--cc=vgoyal@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.