From 57fe6a6e4a050f639ac3d2f7c32b4cd3bcde3978 Mon Sep 17 00:00:00 2001 From: Gonglei Date: Fri, 27 Feb 2015 09:49:44 +0800 Subject: bootdevice: fix segment fault when booting guest with '-kernel' and '-initrd' Reproducer: $./qemu-system-x86_64 --enable-kvm -kernel /home/vmlinuz-2.6.32.12-0.7-default \ -initrd /home/initrd-2.6.32.12-0.7-default -append \ "root=/dev/ram rw console=ttyS0,115200" -dtb guest.dtb -vnc :10 --monitor stdio -smp 2 QEMU 2.2.50 monitor - type 'help' for more information (qemu) Segmentation fault (core dumped) Reported-by: Edivaldo de Araujo Pereira Signed-off-by: Gonglei Message-Id: <1425001784-6752-1-git-send-email-arei.gonglei@huawei.com> Signed-off-by: Paolo Bonzini --- bootdevice.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'bootdevice.c') diff --git a/bootdevice.c b/bootdevice.c index c3a010c094..eacd8c88c2 100644 --- a/bootdevice.c +++ b/bootdevice.c @@ -221,10 +221,15 @@ char *get_boot_devices_list(size_t *size, bool ignore_suffixes) } if (!ignore_suffixes) { - d = qdev_get_own_fw_dev_path_from_handler(i->dev->parent_bus, i->dev); - if (d) { - assert(!i->suffix); - suffix = d; + if (i->dev) { + d = qdev_get_own_fw_dev_path_from_handler(i->dev->parent_bus, + i->dev); + if (d) { + assert(!i->suffix); + suffix = d; + } else { + suffix = g_strdup(i->suffix); + } } else { suffix = g_strdup(i->suffix); } -- cgit v1.2.3