|
|
9ae3a8 |
From c3f813d2f53fb8f9e2dc7e2b3c6b17d7fadb2de5 Mon Sep 17 00:00:00 2001
|
|
|
9ae3a8 |
From: Laszlo Ersek <lersek@redhat.com>
|
|
|
9ae3a8 |
Date: Tue, 27 Jan 2015 17:48:11 +0100
|
|
|
9ae3a8 |
Subject: [PATCH 08/16] pc_sysfw: prevent pflash and/or mis-sized firmware for
|
|
|
9ae3a8 |
rhel6.x.0 machtypes
|
|
|
9ae3a8 |
|
|
|
9ae3a8 |
Message-id: <1422380891-11054-3-git-send-email-lersek@redhat.com>
|
|
|
9ae3a8 |
Patchwork-id: 63585
|
|
|
9ae3a8 |
O-Subject: [RHEL-7.2 qemu-kvm PATCH 2/2] pc_sysfw: prevent pflash and/or mis-sized firmware for rhel6.x.0 machtypes
|
|
|
9ae3a8 |
Bugzilla: 1176283
|
|
|
9ae3a8 |
RH-Acked-by: Paolo Bonzini <pbonzini@redhat.com>
|
|
|
9ae3a8 |
RH-Acked-by: Vitaly Kuznetsov <vkuznets@redhat.com>
|
|
|
9ae3a8 |
RH-Acked-by: Markus Armbruster <armbru@redhat.com>
|
|
|
9ae3a8 |
|
|
|
9ae3a8 |
QE tried to boot OVMF on a rhel6.x.0 machine type. The shadow_bios()
|
|
|
9ae3a8 |
migration hack that is in effect for those machine types is not compatible
|
|
|
9ae3a8 |
with the OVMF image. An assert() in shadow_bios() catches it, but -- given
|
|
|
9ae3a8 |
that OVMF has never been intended for rhel6.x.0 machine types -- QE has
|
|
|
9ae3a8 |
rather requested us to deny such startups cleanly.
|
|
|
9ae3a8 |
|
|
|
9ae3a8 |
The first hunk prevents "-M rhel6.x.0 -bios ..." style invocations where
|
|
|
9ae3a8 |
the BIOS image is not 128 KB in size. This was suggested by Paolo and it
|
|
|
9ae3a8 |
prevents the case when someone passes an OVMF binary via -bios.
|
|
|
9ae3a8 |
|
|
|
9ae3a8 |
The second hunk prevents "-M rhel6.x.0 -pflash ...", since that
|
|
|
9ae3a8 |
configuration (for boot firmware purposes or otherwise) was never
|
|
|
9ae3a8 |
supported.
|
|
|
9ae3a8 |
|
|
|
9ae3a8 |
Downstream only.
|
|
|
9ae3a8 |
|
|
|
9ae3a8 |
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
|
|
|
9ae3a8 |
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
|
9ae3a8 |
---
|
|
|
9ae3a8 |
hw/i386/pc_sysfw.c | 11 +++++++++++
|
|
|
9ae3a8 |
1 file changed, 11 insertions(+)
|
|
|
9ae3a8 |
|
|
|
9ae3a8 |
diff --git a/hw/i386/pc_sysfw.c b/hw/i386/pc_sysfw.c
|
|
|
9ae3a8 |
index 6f5ecde..2f26ff5 100644
|
|
|
9ae3a8 |
--- a/hw/i386/pc_sysfw.c
|
|
|
9ae3a8 |
+++ b/hw/i386/pc_sysfw.c
|
|
|
9ae3a8 |
@@ -191,6 +191,11 @@ static void old_pc_system_rom_init(MemoryRegion *rom_memory, bool isapc_ram_fw)
|
|
|
9ae3a8 |
(bios_size % 65536) != 0) {
|
|
|
9ae3a8 |
goto bios_error;
|
|
|
9ae3a8 |
}
|
|
|
9ae3a8 |
+ if (shadow_bios_after_incoming && bios_size != 128 * 1024) {
|
|
|
9ae3a8 |
+ error_report("machine %s only supports a 128KB BIOS image",
|
|
|
9ae3a8 |
+ current_machine->name);
|
|
|
9ae3a8 |
+ exit(1);
|
|
|
9ae3a8 |
+ }
|
|
|
9ae3a8 |
bios = g_malloc(sizeof(*bios));
|
|
|
9ae3a8 |
memory_region_init_ram(bios, "pc.bios", bios_size);
|
|
|
9ae3a8 |
vmstate_register_ram_global(bios);
|
|
|
9ae3a8 |
@@ -241,6 +246,12 @@ void pc_system_firmware_init(MemoryRegion *rom_memory, bool isapc_ram_fw)
|
|
|
9ae3a8 |
return;
|
|
|
9ae3a8 |
}
|
|
|
9ae3a8 |
|
|
|
9ae3a8 |
+ if (shadow_bios_after_incoming) {
|
|
|
9ae3a8 |
+ error_report("flash-based firmware is not supported by machine %s",
|
|
|
9ae3a8 |
+ current_machine->name);
|
|
|
9ae3a8 |
+ exit(1);
|
|
|
9ae3a8 |
+ }
|
|
|
9ae3a8 |
+
|
|
|
9ae3a8 |
if (kvm_enabled() && !kvm_readonly_mem_enabled()) {
|
|
|
9ae3a8 |
/* Older KVM cannot execute from device memory. So, flash memory
|
|
|
9ae3a8 |
* cannot be used unless the readonly memory kvm capability is present. */
|
|
|
9ae3a8 |
--
|
|
|
9ae3a8 |
1.8.3.1
|
|
|
9ae3a8 |
|