[PATCH 2/3] xen-pcifront: Sanity check the MSI/MSI-X values

Konrad Rzeszutek Wilk
2011-02-16T22:19:00Z

Check the returned vector values for any values that are
odd or plain incorrect (say vector value zero), and if so
print a warning. Also fixup the return values.

Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
---
drivers/pci/xen-pcifront.c | 17 ++++++++++++++---
1 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/drivers/pci/xen-pcifront.c b/drivers/pci/xen-pcifront.c
index 3a5a6fc..6acf6ae 100644
--- a/drivers/pci/xen-pcifront.c
+++ b/drivers/pci/xen-pcifront.c
@@ -277,13 +277,20 @@ static int pci_frontend_enable_msix(struct pci_dev *dev,
if (likely(!err)) {
if (likely(!op.value)) {
/* we get the result */
- for (i = 0; i < nvec; i++)
+ for (i = 0; i < nvec; i++) {
+ if (op.msix_entries[i].vector <= 0) {
+ dev_warn(&dev->dev, "MSI-X entry %d" \
+ " is zero!\n", i);
+ err = -EINVAL;
+ continue;
+ }
*(*vector+i) = op.msix_entries[i].vector;
- return 0;
+ }
+ return err;
} else {
printk(KERN_DEBUG "enable msix get value %x\n",
op.value);
- return op.value;
+ return err;
}
} else {
dev_err(&dev->dev, "enable msix get err %x\n", err);
@@ -325,6 +332,10 @@ static int pci_frontend_enable_msi(struct pci_dev *dev, int **vector)
err = do_pci_op(pdev, &op);
if (likely(!err)) {
*(*vector) = op.value;
+ if (op.value <= 0) {
+ dev_warn(&dev->dev, "MSI entry is zero!\n");
+ err = -EINVAL;
+ }
} else {
dev_err(&dev->dev, "pci frontend enable msi failed for dev "
"%x:%x\n", op.bus, op.devfn);
--
1.7.1