pci: sprinkle assert in PCI pin number
If a device model (a) doesn't set the value to a correct interrupt number and then (b) triggers an interrupt for itself, it's device model bug. Add assert on interrupt pin number to catch this kind of bug more obviously. Suggested-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Isaku Yamahata <isaku.yamahata@intel.com> Message-Id: <9cf8ac3b17e162daac0971d7be32deb6a33ae6ec.1616532563.git.isaku.yamahata@intel.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
44421c60c9
commit
8ddf543248
@ -1450,6 +1450,8 @@ static void pci_irq_handler(void *opaque, int irq_num, int level)
|
|||||||
PCIDevice *pci_dev = opaque;
|
PCIDevice *pci_dev = opaque;
|
||||||
int change;
|
int change;
|
||||||
|
|
||||||
|
assert(0 <= irq_num && irq_num < PCI_NUM_PINS);
|
||||||
|
assert(level == 0 || level == 1);
|
||||||
change = level - pci_irq_state(pci_dev, irq_num);
|
change = level - pci_irq_state(pci_dev, irq_num);
|
||||||
if (!change)
|
if (!change)
|
||||||
return;
|
return;
|
||||||
@ -1469,6 +1471,7 @@ static inline int pci_intx(PCIDevice *pci_dev)
|
|||||||
qemu_irq pci_allocate_irq(PCIDevice *pci_dev)
|
qemu_irq pci_allocate_irq(PCIDevice *pci_dev)
|
||||||
{
|
{
|
||||||
int intx = pci_intx(pci_dev);
|
int intx = pci_intx(pci_dev);
|
||||||
|
assert(0 <= intx && intx < PCI_NUM_PINS);
|
||||||
|
|
||||||
return qemu_allocate_irq(pci_irq_handler, pci_dev, intx);
|
return qemu_allocate_irq(pci_irq_handler, pci_dev, intx);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user