All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Michael S. Tsirkin" <mst@redhat.com>
To: qemu-devel@nongnu.org
Cc: Peter Maydell <peter.maydell@linaro.org>,
	Cao jin <caoj.fnst@cn.fujitsu.com>,
	Gerd Hoffmann <kraxel@redhat.com>,
	Markus Armbruster <armbru@redhat.com>,
	Marcel Apfelbaum <marcel@redhat.com>
Subject: [Qemu-devel] [PULL v5 15/22] hcd-xhci: check & correct param before using it
Date: Tue, 31 Jan 2017 22:19:42 +0200	[thread overview]
Message-ID: <1485893872-26524-16-git-send-email-mst@redhat.com> (raw)
In-Reply-To: <1485893872-26524-1-git-send-email-mst@redhat.com>

From: Cao jin <caoj.fnst@cn.fujitsu.com>

usb_xhci_realize() corrects invalid values of property "intrs"
automatically, but the uncorrected value is passed to msi_init(),
which chokes on invalid values.  Delay that until after the
correction.

Resources allocated by usb_xhci_init() are leaked when msi_init()
fails.  Fix by calling it after msi_init().

CC: Gerd Hoffmann <kraxel@redhat.com>
CC: Markus Armbruster <armbru@redhat.com>
CC: Marcel Apfelbaum <marcel@redhat.com>
CC: Michael S. Tsirkin <mst@redhat.com>

Reviewed-by: Markus Armbruster <armbru@redhat.com>
Acked-by: Marcel Apfelbaum <marcel@redhat.com>
Signed-off-by: Cao jin <caoj.fnst@cn.fujitsu.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
 hw/usb/hcd-xhci.c | 37 ++++++++++++++++++-------------------
 1 file changed, 18 insertions(+), 19 deletions(-)

diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c
index e0b5169..6575d05 100644
--- a/hw/usb/hcd-xhci.c
+++ b/hw/usb/hcd-xhci.c
@@ -3627,25 +3627,6 @@ static void usb_xhci_realize(struct PCIDevice *dev, Error **errp)
     dev->config[PCI_CACHE_LINE_SIZE] = 0x10;
     dev->config[0x60] = 0x30; /* release number */
 
-    usb_xhci_init(xhci);
-
-    if (xhci->msi != ON_OFF_AUTO_OFF) {
-        ret = msi_init(dev, 0x70, xhci->numintrs, true, false, &err);
-        /* Any error other than -ENOTSUP(board's MSI support is broken)
-         * is a programming error */
-        assert(!ret || ret == -ENOTSUP);
-        if (ret && xhci->msi == ON_OFF_AUTO_ON) {
-            /* Can't satisfy user's explicit msi=on request, fail */
-            error_append_hint(&err, "You have to use msi=auto (default) or "
-                    "msi=off with this machine type.\n");
-            error_propagate(errp, err);
-            return;
-        }
-        assert(!err || xhci->msi == ON_OFF_AUTO_AUTO);
-        /* With msi=auto, we fall back to MSI off silently */
-        error_free(err);
-    }
-
     if (xhci->numintrs > MAXINTRS) {
         xhci->numintrs = MAXINTRS;
     }
@@ -3667,6 +3648,24 @@ static void usb_xhci_realize(struct PCIDevice *dev, Error **errp)
         xhci->max_pstreams_mask = 0;
     }
 
+    if (xhci->msi != ON_OFF_AUTO_OFF) {
+        ret = msi_init(dev, 0x70, xhci->numintrs, true, false, &err);
+        /* Any error other than -ENOTSUP(board's MSI support is broken)
+         * is a programming error */
+        assert(!ret || ret == -ENOTSUP);
+        if (ret && xhci->msi == ON_OFF_AUTO_ON) {
+            /* Can't satisfy user's explicit msi=on request, fail */
+            error_append_hint(&err, "You have to use msi=auto (default) or "
+                    "msi=off with this machine type.\n");
+            error_propagate(errp, err);
+            return;
+        }
+        assert(!err || xhci->msi == ON_OFF_AUTO_AUTO);
+        /* With msi=auto, we fall back to MSI off silently */
+        error_free(err);
+    }
+
+    usb_xhci_init(xhci);
     xhci->mfwrap_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL, xhci_mfwrap_timer, xhci);
 
     memory_region_init(&xhci->mem, OBJECT(xhci), "xhci", LEN_REGS);
-- 
MST

  parent reply	other threads:[~2017-01-31 20:19 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-01-31 20:18 [Qemu-devel] [PULL v5 00/22] virtio, vhost, pci: fixes, features Michael S. Tsirkin
2017-01-31 20:18 ` [Qemu-devel] [PULL v5 01/22] compiler: drop ; after BUILD_BUG_ON Michael S. Tsirkin
2017-01-31 20:18 ` [Qemu-devel] [PULL v5 02/22] qxl: switch to constants within BUILD_BUG_ON Michael S. Tsirkin
2017-01-31 20:19 ` [Qemu-devel] [PULL v5 03/22] ppc: " Michael S. Tsirkin
2017-01-31 20:19 ` [Qemu-devel] [PULL v5 04/22] QEMU_BUILD_BUG_ON: use __COUNTER__ Michael S. Tsirkin
2017-01-31 20:19 ` [Qemu-devel] [PULL v5 05/22] compiler: rework BUG_ON using a struct Michael S. Tsirkin
2017-01-31 20:19 ` [Qemu-devel] [PULL v5 06/22] compiler: expression version of QEMU_BUILD_BUG_ON Michael S. Tsirkin
2017-01-31 20:19 ` [Qemu-devel] [PULL v5 07/22] ARRAY_SIZE: check that argument is an array Michael S. Tsirkin
2017-01-31 20:19 ` [Qemu-devel] [PULL v5 08/22] pci: mark ROMs read-only Michael S. Tsirkin
2017-01-31 20:19 ` [Qemu-devel] [PULL v5 09/22] intel_iommu: fix and simplify size calculation in process_device_iotlb_desc() Michael S. Tsirkin
2017-01-31 20:19 ` [Qemu-devel] [PULL v5 10/22] hw/pcie: Introduce a base class for PCI Express Root Ports Michael S. Tsirkin
2017-01-31 20:19 ` [Qemu-devel] [PULL v5 11/22] hw/ioh3420: derive from PCI Express Root Port base class Michael S. Tsirkin
2017-01-31 20:19 ` [Qemu-devel] [PULL v5 12/22] hw/pcie: Introduce Generic PCI Express Root Port Michael S. Tsirkin
2017-01-31 20:19 ` [Qemu-devel] [PULL v5 13/22] hw/i386: check if nvdimm is enabled before plugging Michael S. Tsirkin
2017-01-31 20:19 ` [Qemu-devel] [PULL v5 14/22] msix: Follow CODING_STYLE Michael S. Tsirkin
2017-01-31 20:19 ` Michael S. Tsirkin [this message]
2017-01-31 20:19 ` [Qemu-devel] [PULL v5 16/22] pci: Convert msix_init() to Error and fix callers Michael S. Tsirkin
2017-01-31 20:19 ` [Qemu-devel] [PULL v5 17/22] virtio: make virtio_should_notify static Michael S. Tsirkin
2017-01-31 20:19 ` [Qemu-devel] [PULL v5 18/22] vhost: skip ROM sections Michael S. Tsirkin
2017-01-31 20:20 ` [Qemu-devel] [PULL v5 19/22] vhost-user: delete chardev on cleanup Michael S. Tsirkin
2017-01-31 20:20 ` [Qemu-devel] [PULL v5 20/22] hw/pci: disable pci-bridge's shpc by default Michael S. Tsirkin
2017-01-31 20:20 ` [Qemu-devel] [PULL v5 21/22] arm: better stub version for MISMATCH_CHECK Michael S. Tsirkin
2017-01-31 20:20 ` [Qemu-devel] [PULL v5 22/22] arm: add trailing ; after MISMATCH_CHECK Michael S. Tsirkin
2017-02-02 13:56 ` [Qemu-devel] [PULL v5 00/22] virtio, vhost, pci: fixes, features Peter Maydell
2017-02-02 16:25   ` Peter Maydell
2017-02-02 19:01     ` Stefan Weil
2017-02-02 19:08     ` [Qemu-devel] tci build failure (was Re: [PULL v5 00/22] virtio, vhost, pci: fixes, features) Michael S. Tsirkin

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=1485893872-26524-16-git-send-email-mst@redhat.com \
    --to=mst@redhat.com \
    --cc=armbru@redhat.com \
    --cc=caoj.fnst@cn.fujitsu.com \
    --cc=kraxel@redhat.com \
    --cc=marcel@redhat.com \
    --cc=peter.maydell@linaro.org \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.