From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex Williamson Subject: [PATCH] kvm: device-assignment: Catch GSI overflow Date: Thu, 07 May 2009 11:09:06 -0600 Message-ID: <20090507170834.26367.91907.stgit@dl380g6-3.ned.telco.ned.telco> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Cc: alex.williamson@hp.com To: kvm@vger.kernel.org Return-path: Received: from g1t0026.austin.hp.com ([15.216.28.33]:29235 "EHLO g1t0026.austin.hp.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751684AbZEGRJH (ORCPT ); Thu, 7 May 2009 13:09:07 -0400 Received: from g1t0038.austin.hp.com (g1t0038.austin.hp.com [16.236.32.44]) by g1t0026.austin.hp.com (Postfix) with ESMTP id 79E7AC498 for ; Thu, 7 May 2009 17:09:08 +0000 (UTC) Sender: kvm-owner@vger.kernel.org List-ID: 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 --- 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;