qxl: map rom r/o
authorGerd Hoffmann <kraxel@redhat.com>
Tue, 25 Feb 2020 05:59:19 +0000 (06:59 +0100)
committerGerd Hoffmann <kraxel@redhat.com>
Mon, 2 Mar 2020 07:24:36 +0000 (08:24 +0100)
Map qxl rom read-only into the guest, so the guest can't tamper with the
content.  qxl has a shadow copy of the rom to deal with that, but the
shadow doesn't cover the mode list.  A privilidged user in the guest can
manipulate the mode list and that to trick qemu into oob reads, leading
to a DoS via segfault if that read access happens to hit unmapped memory.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Message-id: 20200225055920.17261-2-kraxel@redhat.com

hw/display/qxl.c

index 21a43a1d5ec210cb6df54682e2b463471d73f62a..227da69a50d9a688a98733cb8b15f07f6bf5b9fe 100644 (file)
@@ -2136,7 +2136,7 @@ static void qxl_realize_common(PCIQXLDevice *qxl, Error **errp)
     pci_set_byte(&config[PCI_INTERRUPT_PIN], 1);
 
     qxl->rom_size = qxl_rom_size();
-    memory_region_init_ram(&qxl->rom_bar, OBJECT(qxl), "qxl.vrom",
+    memory_region_init_rom(&qxl->rom_bar, OBJECT(qxl), "qxl.vrom",
                            qxl->rom_size, &error_fatal);
     init_qxl_rom(qxl);
     init_qxl_ram(qxl);