From 4ebf2861189776f60b4a2de755b5b65ca636700b Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Sat, 6 Sep 2008 14:14:42 +0100 Subject: [PATCH] pciback: Avoid large array allocation on kernel stack. Signed-off-by: Keir Fraser --- drivers/xen/pciback/conf_space_capability_msi.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/drivers/xen/pciback/conf_space_capability_msi.c b/drivers/xen/pciback/conf_space_capability_msi.c index 1336be2a..2d7615f4 100644 --- a/drivers/xen/pciback/conf_space_capability_msi.c +++ b/drivers/xen/pciback/conf_space_capability_msi.c @@ -2,6 +2,7 @@ * PCI Backend -- Configuration overlay for MSI capability */ #include +#include #include "conf_space.h" #include "conf_space_capability.h" #include @@ -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; -- 2.39.5