OSDN Git Service

usb-audio: ignore usb packages with wrong size
authorGerd Hoffmann <kraxel@redhat.com>
Tue, 11 Dec 2018 07:26:49 +0000 (08:26 +0100)
committerGerd Hoffmann <kraxel@redhat.com>
Thu, 10 Jan 2019 08:56:19 +0000 (09:56 +0100)
usb packets with no payload (zero length) seem to happen in practice for
whatever reason.  Add a check and skip the packet then, otherwise we'll
trigger an assert.

Reported-by: Leonardo Soares Müller <leozinho29_eu@hotmail.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Message-id: 20181211072649.20700-1-kraxel@redhat.com

hw/usb/dev-audio.c

index ee43e49..28ac7c5 100644 (file)
@@ -321,6 +321,9 @@ static int streambuf_put(struct streambuf *buf, USBPacket *p)
     if (!free) {
         return 0;
     }
+    if (p->iov.size != USBAUDIO_PACKET_SIZE) {
+        return 0;
+    }
     assert(free >= USBAUDIO_PACKET_SIZE);
     usb_packet_copy(p, buf->data + (buf->prod % buf->size),
                     USBAUDIO_PACKET_SIZE);