[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-ppc] [PATCH 02/22] ppc/e500_pci: Fix an array overflow issue
From: |
Alexander Graf |
Subject: |
[Qemu-ppc] [PATCH 02/22] ppc/e500_pci: Fix an array overflow issue |
Date: |
Sun, 30 Oct 2011 21:22:53 +0100 |
From: Liu Yu-B13201 <address@hidden>
When access PPCE500_PCI_IW1 the previous index get overflow.
The patch fix the issue and update all to keep consistent style.
Signed-off-by: Liu Yu <address@hidden>
Signed-off-by: Alexander Graf <address@hidden>
---
hw/ppce500_pci.c | 38 ++++++++++++++++++++++----------------
1 files changed, 22 insertions(+), 16 deletions(-)
diff --git a/hw/ppce500_pci.c b/hw/ppce500_pci.c
index 0ece422..960a5d0 100644
--- a/hw/ppce500_pci.c
+++ b/hw/ppce500_pci.c
@@ -89,6 +89,7 @@ static uint32_t pci_reg_read4(void *opaque,
target_phys_addr_t addr)
PPCE500PCIState *pci = opaque;
unsigned long win;
uint32_t value = 0;
+ int idx;
win = addr & 0xfe0;
@@ -97,18 +98,19 @@ static uint32_t pci_reg_read4(void *opaque,
target_phys_addr_t addr)
case PPCE500_PCI_OW2:
case PPCE500_PCI_OW3:
case PPCE500_PCI_OW4:
+ idx = (addr >> 5) & 0x7;
switch (addr & 0xC) {
case PCI_POTAR:
- value = pci->pob[(addr >> 5) & 0x7].potar;
+ value = pci->pob[idx].potar;
break;
case PCI_POTEAR:
- value = pci->pob[(addr >> 5) & 0x7].potear;
+ value = pci->pob[idx].potear;
break;
case PCI_POWBAR:
- value = pci->pob[(addr >> 5) & 0x7].powbar;
+ value = pci->pob[idx].powbar;
break;
case PCI_POWAR:
- value = pci->pob[(addr >> 5) & 0x7].powar;
+ value = pci->pob[idx].powar;
break;
default:
break;
@@ -118,18 +120,19 @@ static uint32_t pci_reg_read4(void *opaque,
target_phys_addr_t addr)
case PPCE500_PCI_IW3:
case PPCE500_PCI_IW2:
case PPCE500_PCI_IW1:
+ idx = ((addr >> 5) & 0x3) - 1;
switch (addr & 0xC) {
case PCI_PITAR:
- value = pci->pib[(addr >> 5) & 0x3].pitar;
+ value = pci->pib[idx].pitar;
break;
case PCI_PIWBAR:
- value = pci->pib[(addr >> 5) & 0x3].piwbar;
+ value = pci->pib[idx].piwbar;
break;
case PCI_PIWBEAR:
- value = pci->pib[(addr >> 5) & 0x3].piwbear;
+ value = pci->pib[idx].piwbear;
break;
case PCI_PIWAR:
- value = pci->pib[(addr >> 5) & 0x3].piwar;
+ value = pci->pib[idx].piwar;
break;
default:
break;
@@ -160,6 +163,7 @@ static void pci_reg_write4(void *opaque, target_phys_addr_t
addr,
{
PPCE500PCIState *pci = opaque;
unsigned long win;
+ int idx;
win = addr & 0xfe0;
@@ -171,18 +175,19 @@ static void pci_reg_write4(void *opaque,
target_phys_addr_t addr,
case PPCE500_PCI_OW2:
case PPCE500_PCI_OW3:
case PPCE500_PCI_OW4:
+ idx = (addr >> 5) & 0x7;
switch (addr & 0xC) {
case PCI_POTAR:
- pci->pob[(addr >> 5) & 0x7].potar = value;
+ pci->pob[idx].potar = value;
break;
case PCI_POTEAR:
- pci->pob[(addr >> 5) & 0x7].potear = value;
+ pci->pob[idx].potear = value;
break;
case PCI_POWBAR:
- pci->pob[(addr >> 5) & 0x7].powbar = value;
+ pci->pob[idx].powbar = value;
break;
case PCI_POWAR:
- pci->pob[(addr >> 5) & 0x7].powar = value;
+ pci->pob[idx].powar = value;
break;
default:
break;
@@ -192,18 +197,19 @@ static void pci_reg_write4(void *opaque,
target_phys_addr_t addr,
case PPCE500_PCI_IW3:
case PPCE500_PCI_IW2:
case PPCE500_PCI_IW1:
+ idx = ((addr >> 5) & 0x3) - 1;
switch (addr & 0xC) {
case PCI_PITAR:
- pci->pib[(addr >> 5) & 0x3].pitar = value;
+ pci->pib[idx].pitar = value;
break;
case PCI_PIWBAR:
- pci->pib[(addr >> 5) & 0x3].piwbar = value;
+ pci->pib[idx].piwbar = value;
break;
case PCI_PIWBEAR:
- pci->pib[(addr >> 5) & 0x3].piwbear = value;
+ pci->pib[idx].piwbear = value;
break;
case PCI_PIWAR:
- pci->pib[(addr >> 5) & 0x3].piwar = value;
+ pci->pib[idx].piwar = value;
break;
default:
break;
--
1.6.0.2
- [Qemu-ppc] [PULL 00/22] ppc patch queue 2011-10-30, Alexander Graf, 2011/10/30
- [Qemu-ppc] [PATCH 02/22] ppc/e500_pci: Fix an array overflow issue,
Alexander Graf <=
- [Qemu-ppc] [PATCH 01/22] ppc/e500_pci: Fix code style, Alexander Graf, 2011/10/30
- [Qemu-ppc] [PATCH 03/22] pseries: Support SMT systems for KVM Book3S-HV, Alexander Graf, 2011/10/30
- [Qemu-ppc] [PATCH 05/22] pseries: Use Book3S-HV TCE acceleration capabilities, Alexander Graf, 2011/10/30
- [Qemu-ppc] [PATCH 13/22] ppc: Add cpu defs for POWER7 revisions 2.1 and 2.3, Alexander Graf, 2011/10/30
- [Qemu-ppc] [PATCH 06/22] pseries: Update SLOF firmware image, Alexander Graf, 2011/10/30
- [Qemu-ppc] [PATCH 04/22] pseries: Allow KVM Book3S-HV on PPC970 CPUS, Alexander Graf, 2011/10/30
- [Qemu-ppc] [PATCH 11/22] ppc: Remove broken partial PVR matching, Alexander Graf, 2011/10/30
- [Qemu-ppc] [PATCH 15/22] PPC: Bump qemu-system-ppc to 64-bit physical address space, Alexander Graf, 2011/10/30
- [Qemu-ppc] [PATCH 09/22] pseries: Add device tree properties for VMX/VSX and DFP under kvm, Alexander Graf, 2011/10/30
- [Qemu-ppc] [PATCH 08/22] ppc: Generalize the kvmppc_get_clockfreq() function, Alexander Graf, 2011/10/30