diff mbox

qemu/pci: clarify pci config load routine

Message ID 20091005204611.GA4384@redhat.com
State Superseded
Headers show

Commit Message

Michael S. Tsirkin Oct. 5, 2009, 8:46 p.m. UTC
PCI load routine has to be called with size equal to 256 (otherwise it
will crash in weird ways).  So assert this, making code clearer.
Also avoid dynamically sized array on stack - good for portability.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Cc: Juan Quintela <quintela@redhat.com>
---
 hw/pci.c |    9 +++++----
 1 files changed, 5 insertions(+), 4 deletions(-)

Comments

Juan Quintela Oct. 5, 2009, 10:47 p.m. UTC | #1
"Michael S. Tsirkin" <mst@redhat.com> wrote:
> PCI load routine has to be called with size equal to 256 (otherwise it
> will crash in weird ways).  So assert this,

Agreed with the assert().

> making code clearer.
> Also avoid dynamically sized array on stack - good for portability.

size has the right value, namely sizeof(PCIDevice.config).  Only real
advantage is that you are not using a dynamically sized array on the
stack.

I don't care one way or another.  And as you are more probable to touch
that code than me, it is up to you :)

Later, Juan.
diff mbox

Patch

diff --git a/hw/pci.c b/hw/pci.c
index ade778f..196297a 100644
--- a/hw/pci.c
+++ b/hw/pci.c
@@ -193,14 +193,15 @@  int pci_bus_num(PCIBus *s)
 static int get_pci_config_device(QEMUFile *f, void *pv, size_t size)
 {
     PCIDevice *s = container_of(pv, PCIDevice, config);
-    uint8_t config[size];
+    uint8_t config[PCI_CONFIG_SPACE_SIZE];
     int i;
 
-    qemu_get_buffer(f, config, size);
-    for (i = 0; i < size; ++i)
+    assert(size == sizeof config);
+    qemu_get_buffer(f, config, sizeof config);
+    for (i = 0; i < sizeof config; ++i)
         if ((config[i] ^ s->config[i]) & s->cmask[i] & ~s->wmask[i])
             return -EINVAL;
-    memcpy(s->config, config, size);
+    memcpy(s->config, config, sizeof config);
 
     pci_update_mappings(s);