Revision 91011d4f hw/pci.c

b/hw/pci.c
856 856
    int i;
857 857
    uint32_t config_size = pci_config_size(d);
858 858

  
859
    for(i = 0; i < l && addr < config_size; val >>= 8, ++i, ++addr) {
860
        uint8_t wmask = d->wmask[addr];
861
        d->config[addr] = (d->config[addr] & ~wmask) | (val & wmask);
859
    for (i = 0; i < l && addr + i < config_size; val >>= 8, ++i) {
860
        uint8_t wmask = d->wmask[addr + i];
861
        d->config[addr + i] = (d->config[addr + i] & ~wmask) | (val & wmask);
862 862
    }
863 863
    if (ranges_overlap(addr, l, PCI_BASE_ADDRESS_0, 24) ||
864 864
        ranges_overlap(addr, l, PCI_ROM_ADDRESS, 4) ||

Also available in: Unified diff