[PATCH] kvm: device-assignment: Catch GSI overflow

Alex Williamson
2009-05-07T17:09:07Z

Fix the index at which we return -ENOSPC since the kernel side will
reject a GSI >= KVM_MAX_IRQ_ROUTES. Also, mask as a signed int before
testing for error.

Signed-off-by: Alex Williamson <alex.williamson@hp.com>
---

hw/device-assignment.c | 2 +-
kvm/libkvm/libkvm.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/hw/device-assignment.c b/hw/device-assignment.c
index a7365c8..e06dd08 100644
--- a/hw/device-assignment.c
+++ b/hw/device-assignment.c
@@ -796,7 +796,7 @@ static void assigned_dev_update_msi(PCIDevice *pci_dev, unsigned int ctrl_pos)
pci_dev->cap.start + PCI_MSI_DATA_32);
assigned_dev->entry->type = KVM_IRQ_ROUTING_MSI;
assigned_dev->entry->gsi = kvm_get_irq_route_gsi(kvm_context);
- if (assigned_dev->entry->gsi < 0) {
+ if ((int)(assigned_dev->entry->gsi) < 0) {
perror("assigned_dev_update_msi: kvm_get_irq_route_gsi");
return;
}
diff --git a/kvm/libkvm/libkvm.c b/kvm/libkvm/libkvm.c
index ba0a5d1..2a4165a 100644
--- a/kvm/libkvm/libkvm.c
+++ b/kvm/libkvm/libkvm.c
@@ -1408,7 +1408,7 @@ int kvm_get_irq_route_gsi(kvm_context_t kvm)
{
#ifdef KVM_CAP_IRQ_ROUTING
if (kvm->max_used_gsi >= KVM_IOAPIC_NUM_PINS) {
- if (kvm->max_used_gsi <= kvm_get_gsi_count(kvm))
+ if (kvm->max_used_gsi + 1 < kvm_get_gsi_count(kvm))
return kvm->max_used_gsi + 1;
else
return -ENOSPC;