Message ID | 20220316132402.1190346-4-thuth@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Fix crash when adding a second ISA VGA device | expand |
diff --git a/hw/display/vga.c b/hw/display/vga.c index 7fc6ab7e4f..1dca3dd7c0 100644 --- a/hw/display/vga.c +++ b/hw/display/vga.c @@ -2206,6 +2206,12 @@ void vga_common_init(VGACommonState *s, Object *obj, Error **errp) s->vbe_size_mask = s->vbe_size - 1; s->is_vbe_vmstate = 1; + + if (s->global_vmstate && qemu_ram_block_by_name("vga.vram")) { + error_setg(errp, "A global VGA device has already been registered"); + return; + } + memory_region_init_ram_nomigrate(&s->vram, obj, "vga.vram", s->vram_size, &local_err); if (local_err) {
QEMU currently abort()s if the user tries to add a second ISA VGA device, for example: $ ./qemu-system-x86_64 -device isa-vga -device isa-vga RAMBlock "vga.vram" already registered, abort! Aborted (core dumped) $ ./qemu-system-x86_64 -device isa-cirrus-vga -device isa-cirrus-vga RAMBlock "vga.vram" already registered, abort! Aborted (core dumped) $ ./qemu-system-mips64el -M pica61 -device isa-vga RAMBlock "vga.vram" already registered, abort! Aborted (core dumped) Such a crash should never happen just because of giving bad parameters at the command line. Let's return a proper error message instead. (The idea is based on an original patch by Jose R. Ziviani for the isa-vga device, but this now fixes it for the isa-cirrus-vga device, too) Resolves: https://gitlab.com/qemu-project/qemu/-/issues/44 Signed-off-by: Thomas Huth <thuth@redhat.com> --- hw/display/vga.c | 6 ++++++ 1 file changed, 6 insertions(+)