From 2569bcbf43eed8f22377f6bc9ce596b190439b08 Mon Sep 17 00:00:00 2001 From: OBattler Date: Tue, 8 Sep 2020 03:42:42 +0200 Subject: [PATCH] Added a sanity check on write to PIIX4(E) DDMA base PCI registers. --- src/chipset/intel_piix.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/chipset/intel_piix.c b/src/chipset/intel_piix.c index 2b3b1e812..2557c8a80 100644 --- a/src/chipset/intel_piix.c +++ b/src/chipset/intel_piix.c @@ -275,6 +275,7 @@ piix_write(int func, int addr, uint8_t val, void *priv) { piix_t *dev = (piix_t *) priv; uint8_t *fregs; + uint16_t base; int i; /* Return on unsupported function. */ @@ -443,8 +444,11 @@ piix_write(int func, int addr, uint8_t val, void *priv) else fregs[addr] = val & 0xc0; + base = fregs[addr | 0x01] << 8; + base |= fregs[addr & 0xfe]; + for (i = 0; i < 4; i++) - ddma_update_io_mapping(dev->ddma, (addr & 4) + i, fregs[addr & 0xfe] + (i << 4), fregs[addr | 0x01], 1); + ddma_update_io_mapping(dev->ddma, (addr & 4) + i, fregs[addr & 0xfe] + (i << 4), fregs[addr | 0x01], (base != 0x0000)); } break; case 0xa0: