qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: qemu-devel@nongnu.org
Cc: Kevin Wolf <kwolf@redhat.com>
Subject: [Qemu-devel] [PULL 03/19] multiboot: Fix offset of bootloader name
Date: Mon, 26 Jan 2015 10:24:14 +0100	[thread overview]
Message-ID: <1422264270-19278-4-git-send-email-pbonzini@redhat.com> (raw)
In-Reply-To: <1422264270-19278-1-git-send-email-pbonzini@redhat.com>

From: Kevin Wolf <kwolf@redhat.com>

This fixes a bug introduced in commit 5eba5a66 ('Add bootloader name to
multiboot implementation').

The calculation of the bootloader name offset didn't consider space
occupied by module command lines, so some unlucky module got its command
line partially overwritten with a "qemu" string.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 hw/i386/multiboot.c | 16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/hw/i386/multiboot.c b/hw/i386/multiboot.c
index f86d351..1adbe9e 100644
--- a/hw/i386/multiboot.c
+++ b/hw/i386/multiboot.c
@@ -156,6 +156,7 @@ int load_multiboot(FWCfgState *fw_cfg,
     MultibootState mbs;
     uint8_t bootinfo[MBI_SIZE];
     uint8_t *mb_bootinfo_data;
+    uint32_t cmdline_len;
 
     /* Ok, let's see if it is a multiboot image.
        The header is 12x32bit long, so the latest entry may be 8192 - 48. */
@@ -258,27 +259,28 @@ int load_multiboot(FWCfgState *fw_cfg,
     mbs.offset_mbinfo = mbs.mb_buf_size;
 
     /* Calculate space for cmdlines, bootloader name, and mb_mods */
-    mbs.mb_buf_size += strlen(kernel_filename) + 1;
-    mbs.mb_buf_size += strlen(kernel_cmdline) + 1;
-    mbs.mb_buf_size += strlen(bootloader_name) + 1;
+    cmdline_len = strlen(kernel_filename) + 1;
+    cmdline_len += strlen(kernel_cmdline) + 1;
     if (initrd_filename) {
         const char *r = initrd_filename;
-        mbs.mb_buf_size += strlen(r) + 1;
+        cmdline_len += strlen(r) + 1;
         mbs.mb_mods_avail = 1;
         while (*(r = get_opt_value(NULL, 0, r))) {
            mbs.mb_mods_avail++;
            r++;
         }
-        mbs.mb_buf_size += MB_MOD_SIZE * mbs.mb_mods_avail;
     }
 
+    mbs.mb_buf_size += cmdline_len;
+    mbs.mb_buf_size += MB_MOD_SIZE * mbs.mb_mods_avail;
+    mbs.mb_buf_size += strlen(bootloader_name) + 1;
+
     mbs.mb_buf_size = TARGET_PAGE_ALIGN(mbs.mb_buf_size);
 
     /* enlarge mb_buf to hold cmdlines, bootloader, mb-info structs */
     mbs.mb_buf            = g_realloc(mbs.mb_buf, mbs.mb_buf_size);
     mbs.offset_cmdlines   = mbs.offset_mbinfo + mbs.mb_mods_avail * MB_MOD_SIZE;
-    mbs.offset_bootloader = mbs.offset_cmdlines + strlen(kernel_filename) + 1 
-                            + strlen(kernel_cmdline) + 1;
+    mbs.offset_bootloader = mbs.offset_cmdlines + cmdline_len;
 
     if (initrd_filename) {
         char *next_initrd, not_last;
-- 
1.8.3.1

  parent reply	other threads:[~2015-01-26  9:24 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-01-26  9:24 [Qemu-devel] [PULL 00/19] i386, KVM, misc changes for 2015-01-26 Paolo Bonzini
2015-01-26  9:24 ` [Qemu-devel] [PULL 01/19] pc: fix KVM features in pc-1.3 and earlier machine types Paolo Bonzini
2015-01-26  9:24 ` [Qemu-devel] [PULL 02/19] tests/multiboot: Update reference output Paolo Bonzini
2015-01-26  9:24 ` Paolo Bonzini [this message]
2015-01-26  9:24 ` [Qemu-devel] [PULL 04/19] tests/multiboot: Add test for modules Paolo Bonzini
2015-01-26  9:24 ` [Qemu-devel] [PULL 05/19] target-i386: use vmstate_offset_sub_array for AVX registers Paolo Bonzini
2015-01-26  9:24 ` [Qemu-devel] [PULL 06/19] target-i386: make xmm_regs 512-bit wide Paolo Bonzini
2015-01-26  9:24 ` [Qemu-devel] [PULL 07/19] qemu-timer: add timer_init and timer_init_ns/us/ms Paolo Bonzini
2015-01-26  9:24 ` [Qemu-devel] [PULL 08/19] qemu-timer: introduce timer_deinit Paolo Bonzini
2015-01-26  9:24 ` [Qemu-devel] [PULL 09/19] vmstate: accept QEMUTimer in VMSTATE_TIMER*, add VMSTATE_TIMER_PTR* Paolo Bonzini
2015-01-26  9:24 ` [Qemu-devel] [PULL 10/19] hw: misc, add educational driver Paolo Bonzini
2015-01-26  9:24 ` [Qemu-devel] [PULL 11/19] kvm_stat: Add aarch64 support Paolo Bonzini
2015-01-26  9:24 ` [Qemu-devel] [PULL 12/19] kvm_stat: Update exit reasons to the latest defintion Paolo Bonzini
2015-01-26  9:24 ` [Qemu-devel] [PULL 13/19] kvm_stat: Print errno when syscall to perf_event_open() fails Paolo Bonzini
2015-01-26  9:24 ` [Qemu-devel] [PULL 14/19] apic: do not dereference pointer before it is checked for NULL Paolo Bonzini
2015-01-26  9:24 ` [Qemu-devel] [PULL 15/19] .travis.yml: Add "--enable-modules" Paolo Bonzini
2015-01-26  9:24 ` [Qemu-devel] [PULL 16/19] exec: fix madvise of NULL pointer Paolo Bonzini
2015-01-26  9:24 ` [Qemu-devel] [PULL 17/19] sparse: Fix build with sparse on .S files Paolo Bonzini
2015-01-26  9:24 ` [Qemu-devel] [PULL 18/19] target-i386: Disable HLE and RTM on Haswell & Broadwell Paolo Bonzini
2015-01-26  9:24 ` [Qemu-devel] [PULL 19/19] kvm_stat: Add RESET support for perf event ioctl Paolo Bonzini
2015-01-26 10:30 ` [Qemu-devel] [PULL 00/19] i386, KVM, misc changes for 2015-01-26 Peter Maydell

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=1422264270-19278-4-git-send-email-pbonzini@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).