[PATCH 1/9] msix: avoid leaking kvm data on init failure

Avi Kivity
2010-09-20T15:06:52Z

Move initialization after we're certain to succeed, so we don't leak
memory on failure.

Signed-off-by: Avi Kivity <avi@redhat.com>
---
hw/msix.c | 13 +++++++------
1 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/hw/msix.c b/hw/msix.c
index 3dd0456..312439a 100644
--- a/hw/msix.c
+++ b/hw/msix.c
@@ -373,12 +373,6 @@ int msix_init(struct PCIDevice *dev, unsigned short nentries,
if (nentries > MSIX_MAX_ENTRIES)
return -EINVAL;

-#ifdef KVM_CAP_IRQCHIP
- if (kvm_enabled() && kvm_irqchip_in_kernel()) {
- dev->msix_irq_entries = qemu_malloc(nentries *
- sizeof *dev->msix_irq_entries);
- }
-#endif
dev->msix_mask_notifier_opaque =
qemu_mallocz(nentries * sizeof *dev->msix_mask_notifier_opaque);
dev->msix_mask_notifier = NULL;
@@ -400,6 +394,13 @@ int msix_init(struct PCIDevice *dev, unsigned short nentries,
if (ret)
goto err_config;

+#ifdef KVM_CAP_IRQCHIP
+ if (kvm_enabled() && kvm_irqchip_in_kernel()) {
+ dev->msix_irq_entries = qemu_malloc(nentries *
+ sizeof *dev->msix_irq_entries);
+ }
+#endif
+
dev->cap_present |= QEMU_PCI_CAP_MSIX;
return 0;

--
1.7.2.3