[Qemu-devel] [PATCH v2 0/9] Dealing with Null devices in usb_ep_get()

Liam Merwick posted 9 patches 6 years, 9 months ago
Test docker-mingw@fedora passed
Test asan passed
Test checkpatch passed
Test docker-clang@ubuntu passed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/1549460216-25808-1-git-send-email-liam.merwick@oracle.com
Maintainers: Gerd Hoffmann <kraxel@redhat.com>
hw/usb/core.c     | 6 ++----
hw/usb/hcd-ehci.c | 7 +++++--
hw/usb/hcd-musb.c | 8 ++++----
hw/usb/hcd-ohci.c | 8 ++++++++
hw/usb/hcd-uhci.c | 8 +++++---
hw/usb/hcd-xhci.c | 6 ++++--
hw/usb/redirect.c | 3 ++-
7 files changed, 30 insertions(+), 16 deletions(-)
[Qemu-devel] [PATCH v2 0/9] Dealing with Null devices in usb_ep_get()
Posted by Liam Merwick 6 years, 9 months ago
This series is in response to feedback from Gerd Hoffman (below) on 
<1548859022-3969-1-git-send-email-liam.merwick@oracle.com>

Instead of checking if usb_ep_get() returns NULL, ensure it never is passed
a NULL device.

===

The usb device emulation (hw/usb/dev-*.c) never ever calls usb_ep_get()
with dev == NULL.  There are some places in usb host adapter emulation
(hw/usb/hcd-*) which might do this.  uhci for example has this ...

	[ ... ]
        USBDevice *dev = uhci_find_device(s, (td->token >> 8) & 0x7f);
        USBEndpoint *ep = usb_ep_get(dev, pid, (td->token >> 15) & 0xf);

        if (ep == NULL) {
	[ ... ]

... and uhci_find_device can return NULL.

So, I'd suggest to check all usb_ep_get() callers, fix them if needed,
then remove the 'if (dev== NULL)' check in usb_ep_get() and add the
assert() instead.

===

Passes QEMU 'make check' and kvm-unit-tests


Liam Merwick (9):
  usb: rearrange usb_ep_get()
  xhci: add asserts to help with static code analysis
  xhci: check device is not NULL before calling usb_ep_get()
  ehci: check device is not NULL before calling usb_ep_get()
  ohci: check device is not NULL before calling usb_ep_get()
  uhci: check device is not NULL before calling usb_ep_get()
  usb: check device is not NULL before calling usb_ep_get()
  usb: add device checks before redirector calls to usb_ep_get()
  usb: remove unnecessary NULL device check from usb_ep_get()

 hw/usb/core.c     | 6 ++----
 hw/usb/hcd-ehci.c | 7 +++++--
 hw/usb/hcd-musb.c | 8 ++++----
 hw/usb/hcd-ohci.c | 8 ++++++++
 hw/usb/hcd-uhci.c | 8 +++++---
 hw/usb/hcd-xhci.c | 6 ++++--
 hw/usb/redirect.c | 3 ++-
 7 files changed, 30 insertions(+), 16 deletions(-)

-- 
1.8.3.1


Re: [Qemu-devel] [PATCH v2 0/9] Dealing with Null devices in usb_ep_get()
Posted by Gerd Hoffmann 6 years, 9 months ago
On Wed, Feb 06, 2019 at 01:36:47PM +0000, Liam Merwick wrote:
> This series is in response to feedback from Gerd Hoffman (below) on 
> <1548859022-3969-1-git-send-email-liam.merwick@oracle.com>
> 
> Instead of checking if usb_ep_get() returns NULL, ensure it never is passed
> a NULL device.

Added all to usb queue.

thanks,
  Gerd