aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAvi Kivity <avi@redhat.com>2012-01-04 16:28:42 +0200
committerMichael S. Tsirkin <mst@redhat.com>2012-04-15 12:17:23 +0300
commitcdde6ffc27517bdf069734fbc5693ce2b14edc75 (patch)
tree8c1c0eaeb7db49bf60e491bdbd19adab7136f66c
parent54bfa546a0b5af335128ef5c477f8af9834df498 (diff)
pci: fix corrupted pci conf index register by unaligned write
Commit d0ed8076cbdc261 converted the PCI config access to the memory API, but also inadvertantly changed it to accept unaligned writes, and corrupt the index register in the process. This causes a regression booting NetBSD. Fix by ignoring unaligned or non-dword writes. https://bugs.launchpad.net/qemu/+bug/897771 Reported-by: Andreas Gustafsson <gson@gson.org> Signed-off-by: Avi Kivity <avi@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
-rw-r--r--hw/pci_host.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/hw/pci_host.c b/hw/pci_host.c
index 44c6c207a9..804177891a 100644
--- a/hw/pci_host.c
+++ b/hw/pci_host.c
@@ -101,6 +101,9 @@ static void pci_host_config_write(void *opaque, target_phys_addr_t addr,
PCI_DPRINTF("%s addr " TARGET_FMT_plx " len %d val %"PRIx64"\n",
__func__, addr, len, val);
+ if (addr != 0 || len != 4) {
+ return;
+ }
s->config_reg = val;
}