diff options
author | Liam Merwick <liam.merwick@oracle.com> | 2019-02-06 13:36:54 +0000 |
---|---|---|
committer | Gerd Hoffmann <kraxel@redhat.com> | 2019-02-20 09:41:23 +0100 |
commit | e87fd1e6e547a80b3e403e882b829d2750e24e44 (patch) | |
tree | 6af1f6c8720f4ad3888bf2548f3f5a43c6958971 /hw/usb | |
parent | ff668537b6ec172b797091d11a228a97c4bfca8e (diff) | |
download | qemu-e87fd1e6e547a80b3e403e882b829d2750e24e44.zip qemu-e87fd1e6e547a80b3e403e882b829d2750e24e44.tar.gz qemu-e87fd1e6e547a80b3e403e882b829d2750e24e44.tar.bz2 |
usb: check device is not NULL before calling usb_ep_get()
In musb_packet(), the call to usb_find_device() can return NULL
if it doesn't find a device matching 'addr' so explicitly check
the return value before passing it to usb_ep_get(). This then
allows the subsequent calculation of 'id' to be streamlined.
Signed-off-by: Liam Merwick <liam.merwick@oracle.com>
Message-id: 1549460216-25808-8-git-send-email-liam.merwick@oracle.com
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Diffstat (limited to 'hw/usb')
-rw-r--r-- | hw/usb/hcd-musb.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/hw/usb/hcd-musb.c b/hw/usb/hcd-musb.c index d70a91a..85d7796 100644 --- a/hw/usb/hcd-musb.c +++ b/hw/usb/hcd-musb.c @@ -628,11 +628,11 @@ static void musb_packet(MUSBState *s, MUSBEndPoint *ep, /* A wild guess on the FADDR semantics... */ dev = usb_find_device(&s->port, ep->faddr[idx]); - uep = usb_ep_get(dev, pid, ep->type[idx] & 0xf); - id = pid; - if (uep) { - id |= (dev->addr << 16) | (uep->nr << 8); + if (dev == NULL) { + return; } + uep = usb_ep_get(dev, pid, ep->type[idx] & 0xf); + id = pid | (dev->addr << 16) | (uep->nr << 8); usb_packet_setup(&ep->packey[dir].p, pid, uep, 0, id, false, true); usb_packet_addbuf(&ep->packey[dir].p, ep->buf[idx], len); ep->packey[dir].ep = ep; |