From: Alex Williamson <alex.williamson@redhat.com>
To: qemu-devel@nongnu.org
Subject: [Qemu-devel] [PULL 02/19] vfio/pci: Cleanup vfio_early_setup_msix() error path
Date: Wed, 23 Sep 2015 14:23:11 -0600 [thread overview]
Message-ID: <20150923202311.6569.41046.stgit@gimli.home> (raw)
In-Reply-To: <20150923202200.6569.64538.stgit@gimli.home>
With the addition of the Chelsio quirk we have an error path out of
vfio_early_setup_msix() that doesn't free the allocated VFIOMSIXInfo
struct. This doesn't introduce a leak as it still gets freed in the
vfio_put_device() path, but it's complicated and sloppy to rely on
that. Restructure to free the allocated data on error and only link
it into the vdev on success.
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
Reported-by: Laszlo Ersek <lersek@redhat.com>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
---
hw/vfio/pci.c | 27 +++++++++++++--------------
1 file changed, 13 insertions(+), 14 deletions(-)
diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c
index 77f92f1..839751d 100644
--- a/hw/vfio/pci.c
+++ b/hw/vfio/pci.c
@@ -2203,6 +2203,7 @@ static int vfio_early_setup_msix(VFIOPCIDevice *vdev)
uint16_t ctrl;
uint32_t table, pba;
int fd = vdev->vbasedev.fd;
+ VFIOMSIXInfo *msix;
pos = pci_find_capability(&vdev->pdev, PCI_CAP_ID_MSIX);
if (!pos) {
@@ -2228,21 +2229,19 @@ static int vfio_early_setup_msix(VFIOPCIDevice *vdev)
table = le32_to_cpu(table);
pba = le32_to_cpu(pba);
- vdev->msix = g_malloc0(sizeof(*(vdev->msix)));
- vdev->msix->table_bar = table & PCI_MSIX_FLAGS_BIRMASK;
- vdev->msix->table_offset = table & ~PCI_MSIX_FLAGS_BIRMASK;
- vdev->msix->pba_bar = pba & PCI_MSIX_FLAGS_BIRMASK;
- vdev->msix->pba_offset = pba & ~PCI_MSIX_FLAGS_BIRMASK;
- vdev->msix->entries = (ctrl & PCI_MSIX_FLAGS_QSIZE) + 1;
+ msix = g_malloc0(sizeof(*msix));
+ msix->table_bar = table & PCI_MSIX_FLAGS_BIRMASK;
+ msix->table_offset = table & ~PCI_MSIX_FLAGS_BIRMASK;
+ msix->pba_bar = pba & PCI_MSIX_FLAGS_BIRMASK;
+ msix->pba_offset = pba & ~PCI_MSIX_FLAGS_BIRMASK;
+ msix->entries = (ctrl & PCI_MSIX_FLAGS_QSIZE) + 1;
/*
* Test the size of the pba_offset variable and catch if it extends outside
* of the specified BAR. If it is the case, we need to apply a hardware
* specific quirk if the device is known or we have a broken configuration.
*/
- if (vdev->msix->pba_offset >=
- vdev->bars[vdev->msix->pba_bar].region.size) {
-
+ if (msix->pba_offset >= vdev->bars[msix->pba_bar].region.size) {
PCIDevice *pdev = &vdev->pdev;
uint16_t vendor = pci_get_word(pdev->config + PCI_VENDOR_ID);
uint16_t device = pci_get_word(pdev->config + PCI_DEVICE_ID);
@@ -2254,18 +2253,18 @@ static int vfio_early_setup_msix(VFIOPCIDevice *vdev)
* is 0x1000, so we hard code that here.
*/
if (vendor == PCI_VENDOR_ID_CHELSIO && (device & 0xff00) == 0x5800) {
- vdev->msix->pba_offset = 0x1000;
+ msix->pba_offset = 0x1000;
} else {
error_report("vfio: Hardware reports invalid configuration, "
"MSIX PBA outside of specified BAR");
+ g_free(msix);
return -EINVAL;
}
}
- trace_vfio_early_setup_msix(vdev->vbasedev.name, pos,
- vdev->msix->table_bar,
- vdev->msix->table_offset,
- vdev->msix->entries);
+ trace_vfio_early_setup_msix(vdev->vbasedev.name, pos, msix->table_bar,
+ msix->table_offset, msix->entries);
+ vdev->msix = msix;
return 0;
}
next prev parent reply other threads:[~2015-09-23 20:23 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-23 20:23 [Qemu-devel] [PULL 00/19] VFIO updates Alex Williamson
2015-09-23 20:23 ` [Qemu-devel] [PULL 01/19] vfio/pci: Cleanup RTL8168 quirk and tracing Alex Williamson
2015-09-23 20:23 ` Alex Williamson [this message]
2015-09-23 20:23 ` [Qemu-devel] [PULL 03/19] vfio/pci: Rename INTx functions for easier tracing Alex Williamson
2015-09-23 20:23 ` [Qemu-devel] [PULL 04/19] vfio/pci: Rename MSI/X " Alex Williamson
2015-09-23 20:23 ` [Qemu-devel] [PULL 05/19] vfio/pci: Make interrupt bypass runtime configurable Alex Williamson
2015-09-23 20:23 ` [Qemu-devel] [PULL 06/19] vfio: Change polarity of our no-mmap option Alex Williamson
2015-09-23 20:23 ` [Qemu-devel] [PULL 07/19] vfio/pci: Extract PCI structures to a separate header Alex Williamson
2015-09-23 20:23 ` [Qemu-devel] [PULL 08/19] vfio/pci: Split quirks to a separate file Alex Williamson
2015-09-23 20:23 ` [Qemu-devel] [PULL 09/19] vfio/pci: Cleanup ROM blacklist quirk Alex Williamson
2015-09-23 20:23 ` [Qemu-devel] [PULL 10/19] vfio/pci: Foundation for new quirk structure Alex Williamson
2015-09-24 2:54 ` Wen Congyang
2015-09-24 3:22 ` Alex Williamson
2015-09-24 3:27 ` Wen Congyang
2015-09-23 20:24 ` [Qemu-devel] [PULL 11/19] vfio/pci: Cleanup ATI 0x3c3 quirk Alex Williamson
2015-09-23 20:24 ` [Qemu-devel] [PULL 12/19] vfio/pci: Cleanup Nvidia 0x3d0 quirk Alex Williamson
2015-09-23 20:24 ` [Qemu-devel] [PULL 13/19] vfio/pci: Rework RTL8168 quirk Alex Williamson
2015-09-23 20:24 ` [Qemu-devel] [PULL 14/19] vfio/pci: Config window quirks Alex Williamson
2015-09-23 20:24 ` [Qemu-devel] [PULL 15/19] vfio/pci: Config mirror quirk Alex Williamson
2015-09-23 20:24 ` [Qemu-devel] [PULL 16/19] vfio/pci: Remove old config window and mirror quirks Alex Williamson
2015-09-23 20:24 ` [Qemu-devel] [PULL 17/19] vfio/pci: Move AMD device specific reset to quirks Alex Williamson
2015-09-23 20:24 ` [Qemu-devel] [PULL 18/19] vfio/pci: Cache vendor and device ID Alex Williamson
2015-09-23 20:24 ` [Qemu-devel] [PULL 19/19] vfio/pci: Add emulated PCI IDs Alex Williamson
2015-09-24 0:02 ` [Qemu-devel] [PULL 00/19] VFIO updates Peter Maydell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20150923202311.6569.41046.stgit@gimli.home \
--to=alex.williamson@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).