From: Gerd Hoffmann Date: Mon, 27 Feb 2012 10:23:08 +0000 (+0100) Subject: usb-ehci: sanity-check iso xfers X-Git-Tag: v1.1-rc0~292^2~12 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=aa0568ff2559d7717f4684af6a83d0bd1a125f56;p=thirdparty%2Fqemu.git usb-ehci: sanity-check iso xfers This patch adds a sanity check to itd processing to make sure the endpoint addressed by the guest is actually an iso endpoint. Also verify that usb drivers don't return USB_RET_ASYNC which is illegal for iso xfers. Signed-off-by: Gerd Hoffmann --- diff --git a/hw/usb-ehci.c b/hw/usb-ehci.c index b9da26ada80..048eb7663e1 100644 --- a/hw/usb-ehci.c +++ b/hw/usb-ehci.c @@ -1459,12 +1459,16 @@ static int ehci_process_itd(EHCIState *ehci, dev = ehci_find_device(ehci, devaddr); ep = usb_ep_get(dev, pid, endp); - usb_packet_setup(&ehci->ipacket, pid, ep); - usb_packet_map(&ehci->ipacket, &ehci->isgl); - - ret = usb_handle_packet(dev, &ehci->ipacket); - - usb_packet_unmap(&ehci->ipacket); + if (ep->type == USB_ENDPOINT_XFER_ISOC) { + usb_packet_setup(&ehci->ipacket, pid, ep); + usb_packet_map(&ehci->ipacket, &ehci->isgl); + ret = usb_handle_packet(dev, &ehci->ipacket); + assert(ret != USB_RET_ASYNC); + usb_packet_unmap(&ehci->ipacket); + } else { + DPRINTF("ISOCH: attempt to addess non-iso endpoint\n"); + ret = USB_RET_NAK; + } qemu_sglist_destroy(&ehci->isgl); #if 0