]> xenbits.xensource.com Git - xenclient/kernel.git/commitdiff
pciback: Avoid large array allocation on kernel stack.
authorKeir Fraser <keir.fraser@citrix.com>
Sat, 6 Sep 2008 13:14:42 +0000 (14:14 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Sat, 6 Sep 2008 13:14:42 +0000 (14:14 +0100)
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
drivers/xen/pciback/conf_space_capability_msi.c

index 1336be2a2af76f29fe43345c2bd40408f8f03a8a..2d7615f4b6e4fd5a834f89f45f627922486da227 100644 (file)
@@ -2,6 +2,7 @@
  * PCI Backend -- Configuration overlay for MSI capability
  */
 #include <linux/pci.h>
+#include <linux/slab.h>
 #include "conf_space.h"
 #include "conf_space_capability.h"
 #include <xen/interface/io/pciif.h>
@@ -37,13 +38,16 @@ int pciback_disable_msi(struct pciback_device *pdev,
 int pciback_enable_msix(struct pciback_device *pdev,
                struct pci_dev *dev, struct xen_pci_op *op)
 {
-       int i;
-       int result;
-       struct msix_entry entries[op->value];
+       int i, result;
+       struct msix_entry *entries;
 
        if (op->value > SH_INFO_MAX_VEC)
                return -EINVAL;
 
+       entries = kmalloc(op->value * sizeof(*entries));
+       if (entries == NULL)
+               return -ENOMEM;
+
        for (i = 0; i < op->value; i++) {
                entries[i].entry = op->msix_entries[i].entry;
                entries[i].vector = op->msix_entries[i].vector;
@@ -56,6 +60,8 @@ int pciback_enable_msix(struct pciback_device *pdev,
                op->msix_entries[i].vector = entries[i].vector;
        }
 
+       kfree(entries);
+
        op->value = result;
 
        return result;