summaryrefslogtreecommitdiffstats
path: root/hw/usb/dev-network.c
diff options
context:
space:
mode:
authorMichael Brown2022-09-06 20:30:52 +0200
committerGerd Hoffmann2022-09-27 07:32:31 +0200
commit2423ee233872d07c7607ce26f9225c64b30b0dc3 (patch)
treeeee190e8ef0b4085195e854827dcc1af6dd82f9e /hw/usb/dev-network.c
parentusbnet: Accept mandatory USB_CDC_SET_ETHERNET_PACKET_FILTER request (diff)
downloadqemu-2423ee233872d07c7607ce26f9225c64b30b0dc3.tar.gz
qemu-2423ee233872d07c7607ce26f9225c64b30b0dc3.tar.xz
qemu-2423ee233872d07c7607ce26f9225c64b30b0dc3.zip
usbnet: Detect short packets as sent by the xHCI controller
The xHCI controller will ignore the endpoint MTU and so may deliver packets of any length. Detect short packets as being any packet that has a length of zero or a length that is not a multiple of the MTU. Signed-off-by: Michael Brown <mcb30@ipxe.org> Message-Id: <20220906183053.3625472-4-mcb30@ipxe.org> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Diffstat (limited to 'hw/usb/dev-network.c')
-rw-r--r--hw/usb/dev-network.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/hw/usb/dev-network.c b/hw/usb/dev-network.c
index 155df935cd..9d83974ec9 100644
--- a/hw/usb/dev-network.c
+++ b/hw/usb/dev-network.c
@@ -1211,7 +1211,7 @@ static void usb_net_handle_dataout(USBNetState *s, USBPacket *p)
s->out_ptr += sz;
if (!is_rndis(s)) {
- if (p->iov.size < 64) {
+ if (p->iov.size % 64 || p->iov.size == 0) {
qemu_send_packet(qemu_get_queue(s->nic), s->out_buf, s->out_ptr);
s->out_ptr = 0;
}