Package: release.debian.org
Severity: normal
Tags: buster
User: release.debian....@packages.debian.org
Usertags: pu
X-Debbugs-Cc: m...@tls.msk.ru

Various low severity qemu issues, but since quite a few
of those have piled up, it makes sense to move to an
update. Debdiff below.

Cheers,
        Moritz

diff -Nru qemu-3.1+dfsg/debian/changelog qemu-3.1+dfsg/debian/changelog
--- qemu-3.1+dfsg/debian/changelog      2020-07-24 14:00:34.000000000 +0200
+++ qemu-3.1+dfsg/debian/changelog      2022-02-15 18:53:24.000000000 +0100
@@ -1,3 +1,34 @@
+qemu (1:3.1+dfsg-8+deb10u9) buster; urgency=medium
+
+  * CVE-2021-3930
+  * CVE-2021-3748 (Closes: #993401)
+  * CVE-2021-3713 (Closes: #992727)
+  * CVE-2021-3682 (Closes: #991911)
+  * CVE-2021-3608 (Closes: #990563)
+  * CVE-2021-3607 (Closes: #990564)
+  * CVE-2021-3582 (Closes: #990565)
+  * CVE-2021-3527 (Closes: #988157)
+  * CVE-2021-3392 (Closes: #984449)
+  * CVE-2021-20257 (Closes: #984450)
+  * CVE-2021-20221
+  * CVE-2021-20203 (Closes: #984452)
+  * CVE-2021-20196 (Closes: #984453)
+  * CVE-2021-20181
+  * CVE-2020-35505 (Closes: #979679)
+  * CVE-2020-35504 (Closes: #979679)
+  * CVE-2020-27617 (Closes: #973324)
+  * CVE-2020-25723 (Closes: #975276)
+  * CVE-2020-25624 (Closes: #970541)
+  * CVE-2020-25625 (Closes: #970542)
+  * CVE-2020-25085 (Closes: #970540)
+  * CVE-2020-25084 (Closes: #970539)
+  * CVE-2020-15859 (Closes: #965978)
+  * CVE-2020-13253 (Closes: #961297)
+  * None of the slirp changes got backported to 3.1, if you use it you should
+    really upgrade to the version of qemu in bullseye
+
+ -- Moritz Mühlenhoff <j...@debian.org>  Tue, 15 Feb 2022 18:53:24 +0100
+
 qemu (1:3.1+dfsg-8+deb10u8) buster-security; urgency=medium
 
   * mention fixing of CVE-2020-13765 in 3.1+dfsg-8+deb10u6
diff -Nru qemu-3.1+dfsg/debian/patches/CVE-2020-13253.patch 
qemu-3.1+dfsg/debian/patches/CVE-2020-13253.patch
--- qemu-3.1+dfsg/debian/patches/CVE-2020-13253.patch   1970-01-01 
01:00:00.000000000 +0100
+++ qemu-3.1+dfsg/debian/patches/CVE-2020-13253.patch   2022-02-01 
16:26:24.000000000 +0100
@@ -0,0 +1,80 @@
+790762e5487114341cccc5bffcec4cb3c022c3cd / CVE-2020-13253
+
+--- qemu-3.1+dfsg.orig/hw/sd/sd.c
++++ qemu-3.1+dfsg/hw/sd/sd.c
+@@ -1149,12 +1149,14 @@ static sd_rsp_type_t sd_normal_command(S
+     case 17:  /* CMD17:  READ_SINGLE_BLOCK */
+         switch (sd->state) {
+         case sd_transfer_state:
++            if (addr + sd->blk_len > sd->size) {
++                sd->card_status |= ADDRESS_ERROR;
++                return sd_r1;
++            }
++
+             sd->state = sd_sendingdata_state;
+             sd->data_start = addr;
+             sd->data_offset = 0;
+-
+-            if (sd->data_start + sd->blk_len > sd->size)
+-                sd->card_status |= ADDRESS_ERROR;
+             return sd_r1;
+ 
+         default:
+@@ -1165,12 +1167,14 @@ static sd_rsp_type_t sd_normal_command(S
+     case 18:  /* CMD18:  READ_MULTIPLE_BLOCK */
+         switch (sd->state) {
+         case sd_transfer_state:
++            if (addr + sd->blk_len > sd->size) {
++                sd->card_status |= ADDRESS_ERROR;
++                return sd_r1;
++            }
++
+             sd->state = sd_sendingdata_state;
+             sd->data_start = addr;
+             sd->data_offset = 0;
+-
+-            if (sd->data_start + sd->blk_len > sd->size)
+-                sd->card_status |= ADDRESS_ERROR;
+             return sd_r1;
+ 
+         default:
+@@ -1210,13 +1214,17 @@ static sd_rsp_type_t sd_normal_command(S
+             /* Writing in SPI mode not implemented.  */
+             if (sd->spi)
+                 break;
++
++            if (addr + sd->blk_len > sd->size) {
++                sd->card_status |= ADDRESS_ERROR;
++                return sd_r1;
++            }
++
+             sd->state = sd_receivingdata_state;
+             sd->data_start = addr;
+             sd->data_offset = 0;
+             sd->blk_written = 0;
+ 
+-            if (sd->data_start + sd->blk_len > sd->size)
+-                sd->card_status |= ADDRESS_ERROR;
+             if (sd_wp_addr(sd, sd->data_start))
+                 sd->card_status |= WP_VIOLATION;
+             if (sd->csd[14] & 0x30)
+@@ -1234,13 +1242,17 @@ static sd_rsp_type_t sd_normal_command(S
+             /* Writing in SPI mode not implemented.  */
+             if (sd->spi)
+                 break;
++
++            if (addr + sd->blk_len > sd->size) {
++                sd->card_status |= ADDRESS_ERROR;
++                return sd_r1;
++            }
++
+             sd->state = sd_receivingdata_state;
+             sd->data_start = addr;
+             sd->data_offset = 0;
+             sd->blk_written = 0;
+ 
+-            if (sd->data_start + sd->blk_len > sd->size)
+-                sd->card_status |= ADDRESS_ERROR;
+             if (sd_wp_addr(sd, sd->data_start))
+                 sd->card_status |= WP_VIOLATION;
+             if (sd->csd[14] & 0x30)
diff -Nru qemu-3.1+dfsg/debian/patches/CVE-2020-15859.patch 
qemu-3.1+dfsg/debian/patches/CVE-2020-15859.patch
--- qemu-3.1+dfsg/debian/patches/CVE-2020-15859.patch   1970-01-01 
01:00:00.000000000 +0100
+++ qemu-3.1+dfsg/debian/patches/CVE-2020-15859.patch   2022-02-01 
16:31:48.000000000 +0100
@@ -0,0 +1,14 @@
+22dc8663d9fc7baa22100544c600b6285a63c7a3 / CVE-2020-15859
+
+--- qemu-3.1+dfsg.orig/net/queue.c
++++ qemu-3.1+dfsg/net/queue.c
+@@ -250,6 +250,9 @@ void qemu_net_queue_purge(NetQueue *queu
+ 
+ bool qemu_net_queue_flush(NetQueue *queue)
+ {
++    if (queue->delivering)
++        return false;
++
+     while (!QTAILQ_EMPTY(&queue->packets)) {
+         NetPacket *packet;
+         int ret;
diff -Nru qemu-3.1+dfsg/debian/patches/CVE-2020-25084.patch 
qemu-3.1+dfsg/debian/patches/CVE-2020-25084.patch
--- qemu-3.1+dfsg/debian/patches/CVE-2020-25084.patch   1970-01-01 
01:00:00.000000000 +0100
+++ qemu-3.1+dfsg/debian/patches/CVE-2020-25084.patch   2022-02-01 
16:36:57.000000000 +0100
@@ -0,0 +1,16 @@
+21bc31524e8ca487e976f713b878d7338ee00df2 / CVE-2020-25084
+
+--- qemu-3.1+dfsg.orig/hw/usb/hcd-xhci.c
++++ qemu-3.1+dfsg/hw/usb/hcd-xhci.c
+@@ -1607,7 +1607,10 @@ static int xhci_setup_packet(XHCITransfe
+     xhci_xfer_create_sgl(xfer, dir == USB_TOKEN_IN); /* Also sets int_req */
+     usb_packet_setup(&xfer->packet, dir, ep, xfer->streamid,
+                      xfer->trbs[0].addr, false, xfer->int_req);
+-    usb_packet_map(&xfer->packet, &xfer->sgl);
++    if (usb_packet_map(&xfer->packet, &xfer->sgl)) {
++        qemu_sglist_destroy(&xfer->sgl);
++        return -1;
++    }
+     DPRINTF("xhci: setup packet pid 0x%x addr %d ep %d\n",
+             xfer->packet.pid, ep->dev->addr, ep->nr);
+     return 0;
diff -Nru qemu-3.1+dfsg/debian/patches/CVE-2020-25085.patch 
qemu-3.1+dfsg/debian/patches/CVE-2020-25085.patch
--- qemu-3.1+dfsg/debian/patches/CVE-2020-25085.patch   1970-01-01 
01:00:00.000000000 +0100
+++ qemu-3.1+dfsg/debian/patches/CVE-2020-25085.patch   2022-02-01 
16:41:15.000000000 +0100
@@ -0,0 +1,13 @@
+dfba99f17feb6d4a129da19d38df1bcd8579d1c3 / CVE-2020-25085
+
+--- qemu-3.1+dfsg.orig/hw/sd/sdhci.c
++++ qemu-3.1+dfsg/hw/sd/sdhci.c
+@@ -1144,7 +1144,7 @@ sdhci_write(void *opaque, hwaddr offset,
+         break;
+     case SDHC_BLKSIZE:
+         if (!TRANSFERRING_DATA(s->prnsts)) {
+-            MASKED_WRITE(s->blksize, mask, value);
++            MASKED_WRITE(s->blksize, mask, extract32(value, 0, 12));
+             MASKED_WRITE(s->blkcnt, mask >> 16, value >> 16);
+         }
+ 
diff -Nru qemu-3.1+dfsg/debian/patches/CVE-2020-25624.patch 
qemu-3.1+dfsg/debian/patches/CVE-2020-25624.patch
--- qemu-3.1+dfsg/debian/patches/CVE-2020-25624.patch   1970-01-01 
01:00:00.000000000 +0100
+++ qemu-3.1+dfsg/debian/patches/CVE-2020-25624.patch   2022-02-01 
17:10:14.000000000 +0100
@@ -0,0 +1,58 @@
+1328fe0c32d5474604105b8105310e944976b058 / CVE-2020-25624
+
+--- qemu-3.1+dfsg.orig/hw/usb/hcd-ohci.c
++++ qemu-3.1+dfsg/hw/usb/hcd-ohci.c
+@@ -797,7 +797,11 @@ static int ohci_service_iso_td(OHCIState
+     }
+ 
+     start_offset = iso_td.offset[relative_frame_number];
+-    next_offset = iso_td.offset[relative_frame_number + 1];
++    if (relative_frame_number < frame_count) {
++        next_offset = iso_td.offset[relative_frame_number + 1];
++    } else {
++        next_offset = iso_td.be;
++    }
+ 
+     if (!(OHCI_BM(start_offset, TD_PSW_CC) & 0xe) || 
+         ((relative_frame_number < frame_count) && 
+@@ -830,7 +834,12 @@ static int ohci_service_iso_td(OHCIState
+         }
+     } else {
+         /* Last packet in the ISO TD */
+-        end_addr = iso_td.be;
++        end_addr = next_offset;
++    }
++
++    if (start_addr > end_addr) {
++        trace_usb_ohci_iso_td_bad_cc_overrun(start_addr, end_addr);
++        return 1;
+     }
+ 
+     if ((start_addr & OHCI_PAGE_MASK) != (end_addr & OHCI_PAGE_MASK)) {
+@@ -839,6 +848,9 @@ static int ohci_service_iso_td(OHCIState
+     } else {
+         len = end_addr - start_addr + 1;
+     }
++    if (len > sizeof(ohci->usb_buf)) {
++        len = sizeof(ohci->usb_buf);
++    }
+ 
+     if (len && dir != OHCI_TD_DIR_IN) {
+         if (ohci_copy_iso_td(ohci, start_addr, end_addr, ohci->usb_buf, len,
+@@ -1037,8 +1049,16 @@ static int ohci_service_td(OHCIState *oh
+         if ((td.cbp & 0xfffff000) != (td.be & 0xfffff000)) {
+             len = (td.be & 0xfff) + 0x1001 - (td.cbp & 0xfff);
+         } else {
++            if (td.cbp > td.be) {
++                trace_usb_ohci_iso_td_bad_cc_overrun(td.cbp, td.be);
++                ohci_die(ohci);
++                return 1;
++            }
+             len = (td.be - td.cbp) + 1;
+         }
++        if (len > sizeof(ohci->usb_buf)) {
++            len = sizeof(ohci->usb_buf);
++        }
+ 
+         pktlen = len;
+         if (len && dir != OHCI_TD_DIR_IN) {
diff -Nru qemu-3.1+dfsg/debian/patches/CVE-2020-25625.patch 
qemu-3.1+dfsg/debian/patches/CVE-2020-25625.patch
--- qemu-3.1+dfsg/debian/patches/CVE-2020-25625.patch   1970-01-01 
01:00:00.000000000 +0100
+++ qemu-3.1+dfsg/debian/patches/CVE-2020-25625.patch   2022-02-01 
16:53:28.000000000 +0100
@@ -0,0 +1,15 @@
+1be90ebecc95b09a2ee5af3f60c412b45a766c4f / CVE-2020-25625
+
+--- qemu-3.1+dfsg.orig/hw/usb/hcd-ohci.c
++++ qemu-3.1+dfsg/hw/usb/hcd-ohci.c
+@@ -753,6 +753,10 @@ static int ohci_service_iso_td(OHCIState
+            the next ISO TD of the same ED */
+         trace_usb_ohci_iso_td_relative_frame_number_big(relative_frame_number,
+                                                         frame_count);
++        if (OHCI_CC_DATAOVERRUN == OHCI_BM(iso_td.flags, TD_CC)) {
++            /* avoid infinite loop */
++            return 1;
++        }
+         OHCI_SET_BM(iso_td.flags, TD_CC, OHCI_CC_DATAOVERRUN);
+         ed->head &= ~OHCI_DPTR_MASK;
+         ed->head |= (iso_td.next & OHCI_DPTR_MASK);
diff -Nru qemu-3.1+dfsg/debian/patches/CVE-2020-25723.patch 
qemu-3.1+dfsg/debian/patches/CVE-2020-25723.patch
--- qemu-3.1+dfsg/debian/patches/CVE-2020-25723.patch   1970-01-01 
01:00:00.000000000 +0100
+++ qemu-3.1+dfsg/debian/patches/CVE-2020-25723.patch   2022-02-01 
17:13:16.000000000 +0100
@@ -0,0 +1,28 @@
+2fdb42d840400d58f2e706ecca82c142b97bcbd6 / CVE-2020-25723
+
+--- qemu-3.1+dfsg.orig/hw/usb/hcd-ehci.c
++++ qemu-3.1+dfsg/hw/usb/hcd-ehci.c
+@@ -1371,7 +1371,10 @@ static int ehci_execute(EHCIPacket *p, c
+         spd = (p->pid == USB_TOKEN_IN && NLPTR_TBIT(p->qtd.altnext) == 0);
+         usb_packet_setup(&p->packet, p->pid, ep, 0, p->qtdaddr, spd,
+                          (p->qtd.token & QTD_TOKEN_IOC) != 0);
+-        usb_packet_map(&p->packet, &p->sgl);
++        if (usb_packet_map(&p->packet, &p->sgl)) {
++            qemu_sglist_destroy(&p->sgl);
++            return -1;
++        }
+         p->async = EHCI_ASYNC_INITIALIZED;
+     }
+ 
+@@ -1447,7 +1450,10 @@ static int ehci_process_itd(EHCIState *e
+             if (ep && ep->type == USB_ENDPOINT_XFER_ISOC) {
+                 usb_packet_setup(&ehci->ipacket, pid, ep, 0, addr, false,
+                                  (itd->transact[i] & ITD_XACT_IOC) != 0);
+-                usb_packet_map(&ehci->ipacket, &ehci->isgl);
++                if (usb_packet_map(&ehci->ipacket, &ehci->isgl)) {
++                    qemu_sglist_destroy(&ehci->isgl);
++                    return -1;
++                }
+                 usb_handle_packet(dev, &ehci->ipacket);
+                 usb_packet_unmap(&ehci->ipacket, &ehci->isgl);
+             } else {
diff -Nru qemu-3.1+dfsg/debian/patches/CVE-2020-27617.patch 
qemu-3.1+dfsg/debian/patches/CVE-2020-27617.patch
--- qemu-3.1+dfsg/debian/patches/CVE-2020-27617.patch   1970-01-01 
01:00:00.000000000 +0100
+++ qemu-3.1+dfsg/debian/patches/CVE-2020-27617.patch   2022-02-01 
17:17:03.000000000 +0100
@@ -0,0 +1,24 @@
+7564bf7701f00214cdc8a678a9f7df765244def1 / CVE-2020-27617
+
+--- qemu-3.1+dfsg.orig/net/eth.c
++++ qemu-3.1+dfsg/net/eth.c
+@@ -16,6 +16,7 @@
+  */
+ 
+ #include "qemu/osdep.h"
++#include "qemu/log.h"
+ #include "net/eth.h"
+ #include "net/checksum.h"
+ #include "qemu-common.h"
+@@ -72,9 +73,8 @@ eth_get_gso_type(uint16_t l3_proto, uint
+             return VIRTIO_NET_HDR_GSO_TCPV6 | ecn_state;
+         }
+     }
+-
+-    /* Unsupported offload */
+-    g_assert_not_reached();
++    qemu_log_mask(LOG_UNIMP, "%s: probably not GSO frame, "
++        "unknown L3 protocol: 0x%04"PRIx16"\n", __func__, l3_proto);
+ 
+     return VIRTIO_NET_HDR_GSO_NONE | ecn_state;
+ }
diff -Nru qemu-3.1+dfsg/debian/patches/CVE-2020-35504.patch 
qemu-3.1+dfsg/debian/patches/CVE-2020-35504.patch
--- qemu-3.1+dfsg/debian/patches/CVE-2020-35504.patch   1970-01-01 
01:00:00.000000000 +0100
+++ qemu-3.1+dfsg/debian/patches/CVE-2020-35504.patch   2022-02-04 
17:20:46.000000000 +0100
@@ -0,0 +1,26 @@
+0db895361b8a82e1114372ff9f4857abea605701 / CVE-2020-35504
+
+--- qemu-3.1+dfsg.orig/hw/scsi/esp.c
++++ qemu-3.1+dfsg/hw/scsi/esp.c
+@@ -252,6 +252,9 @@ static void esp_do_dma(ESPState *s)
+         s->dma_memory_read(s->dma_opaque, &s->cmdbuf[s->cmdlen], len);
+         return;
+     }
++    if (!s->current_req) {
++        return;
++    }
+     if (s->async_len == 0) {
+         /* Defer until data is available.  */
+         return;
+@@ -265,6 +268,11 @@ static void esp_do_dma(ESPState *s)
+     } else {
+         s->dma_memory_write(s->dma_opaque, s->async_buf, len);
+     }
++
++    if (!s->current_req) {
++        return;
++    }
++
+     s->dma_left -= len;
+     s->async_buf += len;
+     s->async_len -= len;
diff -Nru qemu-3.1+dfsg/debian/patches/CVE-2020-35505.patch 
qemu-3.1+dfsg/debian/patches/CVE-2020-35505.patch
--- qemu-3.1+dfsg/debian/patches/CVE-2020-35505.patch   1970-01-01 
01:00:00.000000000 +0100
+++ qemu-3.1+dfsg/debian/patches/CVE-2020-35505.patch   2022-02-04 
17:30:17.000000000 +0100
@@ -0,0 +1,15 @@
+99545751734035b76bd372c4e7215bb337428d89 / CVE-2020-35505
+
+--- qemu-3.1+dfsg.orig/hw/scsi/esp.c
++++ qemu-3.1+dfsg/hw/scsi/esp.c
+@@ -135,6 +135,10 @@ static void do_busid_cmd(ESPState *s, ui
+ 
+     trace_esp_do_busid_cmd(busid);
+     lun = busid & 7;
++
++    if (!s->current_dev) {
++        return;
++    }
+     current_lun = scsi_device_find(&s->bus, 0, s->current_dev->id, lun);
+     s->current_req = scsi_req_new(current_lun, 0, lun, buf, s);
+     datalen = scsi_req_enqueue(s->current_req);
diff -Nru qemu-3.1+dfsg/debian/patches/CVE-2021-20181.patch 
qemu-3.1+dfsg/debian/patches/CVE-2021-20181.patch
--- qemu-3.1+dfsg/debian/patches/CVE-2021-20181.patch   1970-01-01 
01:00:00.000000000 +0100
+++ qemu-3.1+dfsg/debian/patches/CVE-2021-20181.patch   2022-02-04 
17:33:05.000000000 +0100
@@ -0,0 +1,25 @@
+89fbea8737e8f7b954745a1ffc4238d377055305 / CVE-2021-20181
+
+--- qemu-3.1+dfsg.orig/hw/9pfs/9p.c
++++ qemu-3.1+dfsg/hw/9pfs/9p.c
+@@ -498,9 +498,9 @@ static int coroutine_fn v9fs_mark_fids_u
+ {
+     int err;
+     V9fsState *s = pdu->s;
+-    V9fsFidState *fidp, head_fid;
++    V9fsFidState *fidp;
+ 
+-    head_fid.next = s->fid_list;
++again:
+     for (fidp = s->fid_list; fidp; fidp = fidp->next) {
+         if (fidp->path.size != path->size) {
+             continue;
+@@ -520,7 +520,7 @@ static int coroutine_fn v9fs_mark_fids_u
+              * switched to the worker thread
+              */
+             if (err == 0) {
+-                fidp = &head_fid;
++                goto again;
+             }
+         }
+     }
diff -Nru qemu-3.1+dfsg/debian/patches/CVE-2021-20203.patch 
qemu-3.1+dfsg/debian/patches/CVE-2021-20203.patch
--- qemu-3.1+dfsg/debian/patches/CVE-2021-20203.patch   1970-01-01 
01:00:00.000000000 +0100
+++ qemu-3.1+dfsg/debian/patches/CVE-2021-20203.patch   2022-02-04 
20:11:13.000000000 +0100
@@ -0,0 +1,52 @@
+d05dcd94aee88728facafb993c7280547eb4d645 / CVE-2021-20203
+
+--- qemu-3.1+dfsg.orig/hw/net/vmxnet3.c
++++ qemu-3.1+dfsg/hw/net/vmxnet3.c
+@@ -1532,6 +1532,7 @@ static void vmxnet3_activate_device(VMXN
+     vmxnet3_setup_rx_filtering(s);
+     /* Cache fields from shared memory */
+     s->mtu = VMXNET3_READ_DRV_SHARED32(d, s->drv_shmem, devRead.misc.mtu);
++    assert(VMXNET3_MIN_MTU <= s->mtu && s->mtu < VMXNET3_MAX_MTU);
+     VMW_CFPRN("MTU is %u", s->mtu);
+ 
+     s->max_rx_frags =
+@@ -1585,6 +1586,9 @@ static void vmxnet3_activate_device(VMXN
+         /* Read rings memory locations for TX queues */
+         pa = VMXNET3_READ_TX_QUEUE_DESCR64(d, qdescr_pa, conf.txRingBasePA);
+         size = VMXNET3_READ_TX_QUEUE_DESCR32(d, qdescr_pa, conf.txRingSize);
++        if (size > VMXNET3_TX_RING_MAX_SIZE) {
++            size = VMXNET3_TX_RING_MAX_SIZE;
++        }
+ 
+         vmxnet3_ring_init(d, &s->txq_descr[i].tx_ring, pa, size,
+                           sizeof(struct Vmxnet3_TxDesc), false);
+@@ -1595,6 +1599,9 @@ static void vmxnet3_activate_device(VMXN
+         /* TXC ring */
+         pa = VMXNET3_READ_TX_QUEUE_DESCR64(d, qdescr_pa, conf.compRingBasePA);
+         size = VMXNET3_READ_TX_QUEUE_DESCR32(d, qdescr_pa, conf.compRingSize);
++        if (size > VMXNET3_TC_RING_MAX_SIZE) {
++            size = VMXNET3_TC_RING_MAX_SIZE;
++        }
+         vmxnet3_ring_init(d, &s->txq_descr[i].comp_ring, pa, size,
+                           sizeof(struct Vmxnet3_TxCompDesc), true);
+         VMXNET3_RING_DUMP(VMW_CFPRN, "TXC", i, &s->txq_descr[i].comp_ring);
+@@ -1636,6 +1643,9 @@ static void vmxnet3_activate_device(VMXN
+             /* RX rings */
+             pa = VMXNET3_READ_RX_QUEUE_DESCR64(d, qd_pa, 
conf.rxRingBasePA[j]);
+             size = VMXNET3_READ_RX_QUEUE_DESCR32(d, qd_pa, 
conf.rxRingSize[j]);
++            if (size > VMXNET3_RX_RING_MAX_SIZE) {
++                size = VMXNET3_RX_RING_MAX_SIZE;
++            }
+             vmxnet3_ring_init(d, &s->rxq_descr[i].rx_ring[j], pa, size,
+                               sizeof(struct Vmxnet3_RxDesc), false);
+             VMW_CFPRN("RX queue %d:%d: Base: %" PRIx64 ", Size: %d",
+@@ -1645,6 +1655,9 @@ static void vmxnet3_activate_device(VMXN
+         /* RXC ring */
+         pa = VMXNET3_READ_RX_QUEUE_DESCR64(d, qd_pa, conf.compRingBasePA);
+         size = VMXNET3_READ_RX_QUEUE_DESCR32(d, qd_pa, conf.compRingSize);
++        if (size > VMXNET3_RC_RING_MAX_SIZE) {
++            size = VMXNET3_RC_RING_MAX_SIZE;
++        }
+         vmxnet3_ring_init(d, &s->rxq_descr[i].comp_ring, pa, size,
+                           sizeof(struct Vmxnet3_RxCompDesc), true);
+         VMW_CFPRN("RXC queue %d: Base: %" PRIx64 ", Size: %d", i, pa, size);
diff -Nru qemu-3.1+dfsg/debian/patches/CVE-2021-20221.patch 
qemu-3.1+dfsg/debian/patches/CVE-2021-20221.patch
--- qemu-3.1+dfsg/debian/patches/CVE-2021-20221.patch   1970-01-01 
01:00:00.000000000 +0100
+++ qemu-3.1+dfsg/debian/patches/CVE-2021-20221.patch   2022-02-11 
17:20:09.000000000 +0100
@@ -0,0 +1,13 @@
+edfe2eb4360cde4ed5d95bda7777edcb3510f76a / CVE-2021-20221
+
+--- qemu-3.1+dfsg.orig/hw/intc/arm_gic.c
++++ qemu-3.1+dfsg/hw/intc/arm_gic.c
+@@ -1453,7 +1453,7 @@ static void gic_dist_writel(void *opaque
+         int target_cpu;
+ 
+         cpu = gic_get_current_cpu(s);
+-        irq = value & 0x3ff;
++        irq = value & 0xf;
+         switch ((value >> 24) & 3) {
+         case 0:
+             mask = (value >> 16) & ALL_CPU_MASK;
diff -Nru qemu-3.1+dfsg/debian/patches/CVE-2021-20257.patch 
qemu-3.1+dfsg/debian/patches/CVE-2021-20257.patch
--- qemu-3.1+dfsg/debian/patches/CVE-2021-20257.patch   1970-01-01 
01:00:00.000000000 +0100
+++ qemu-3.1+dfsg/debian/patches/CVE-2021-20257.patch   2022-02-11 
17:23:08.000000000 +0100
@@ -0,0 +1,22 @@
+3de46e6fc489c52c9431a8a832ad8170a7569bd8 / CVE-2021-20257
+
+--- qemu-3.1+dfsg.orig/hw/net/e1000.c
++++ qemu-3.1+dfsg/hw/net/e1000.c
+@@ -657,6 +657,9 @@ process_tx_desc(E1000State *s, struct e1
+         msh = tp->tso_props.hdr_len + tp->tso_props.mss;
+         do {
+             bytes = split_size;
++            if (tp->size >= msh) {
++                goto eop;
++            }
+             if (tp->size + bytes > msh)
+                 bytes = msh - tp->size;
+ 
+@@ -682,6 +685,7 @@ process_tx_desc(E1000State *s, struct e1
+         tp->size += split_size;
+     }
+ 
++eop:
+     if (!(txd_lower & E1000_TXD_CMD_EOP))
+         return;
+     if (!(tp->cptse && tp->size < tp->tso_props.hdr_len)) {
diff -Nru qemu-3.1+dfsg/debian/patches/CVE-2021-3392.patch 
qemu-3.1+dfsg/debian/patches/CVE-2021-3392.patch
--- qemu-3.1+dfsg/debian/patches/CVE-2021-3392.patch    1970-01-01 
01:00:00.000000000 +0100
+++ qemu-3.1+dfsg/debian/patches/CVE-2021-3392.patch    2022-02-11 
17:25:18.000000000 +0100
@@ -0,0 +1,45 @@
+3791642c8d60029adf9b00bcb4e34d7d8a1aea4d / CVE-2021-3392
+
+--- qemu-3.1+dfsg.orig/hw/scsi/mptsas.c
++++ qemu-3.1+dfsg/hw/scsi/mptsas.c
+@@ -252,13 +252,10 @@ static int mptsas_build_sgl(MPTSASState
+ 
+ static void mptsas_free_request(MPTSASRequest *req)
+ {
+-    MPTSASState *s = req->dev;
+-
+     if (req->sreq != NULL) {
+         req->sreq->hba_private = NULL;
+         scsi_req_unref(req->sreq);
+         req->sreq = NULL;
+-        QTAILQ_REMOVE(&s->pending, req, next);
+     }
+     qemu_sglist_destroy(&req->qsg);
+     g_free(req);
+@@ -304,7 +301,6 @@ static int mptsas_process_scsi_io_reques
+     }
+ 
+     req = g_new0(MPTSASRequest, 1);
+-    QTAILQ_INSERT_TAIL(&s->pending, req, next);
+     req->scsi_io = *scsi_io;
+     req->dev = s;
+ 
+@@ -1319,8 +1315,6 @@ static void mptsas_scsi_realize(PCIDevic
+ 
+     s->request_bh = qemu_bh_new(mptsas_fetch_requests, s);
+ 
+-    QTAILQ_INIT(&s->pending);
+-
+     scsi_bus_new(&s->bus, sizeof(s->bus), &dev->qdev, &mptsas_scsi_info, 
NULL);
+ }
+ 
+--- qemu-3.1+dfsg.orig/hw/scsi/mptsas.h
++++ qemu-3.1+dfsg/hw/scsi/mptsas.h
+@@ -74,7 +74,6 @@ struct MPTSASState {
+     uint16_t reply_frame_size;
+ 
+     SCSIBus bus;
+-    QTAILQ_HEAD(, MPTSASRequest) pending;
+ };
+ 
+ void mptsas_fix_scsi_io_endianness(MPIMsgSCSIIORequest *req);
diff -Nru qemu-3.1+dfsg/debian/patches/CVE-2021-3527.patch 
qemu-3.1+dfsg/debian/patches/CVE-2021-3527.patch
--- qemu-3.1+dfsg/debian/patches/CVE-2021-3527.patch    1970-01-01 
01:00:00.000000000 +0100
+++ qemu-3.1+dfsg/debian/patches/CVE-2021-3527.patch    2022-02-11 
17:30:48.000000000 +0100
@@ -0,0 +1,45 @@
+7ec54f9eb62b5d177e30eb8b1cad795a5f8d8986 and 
05a40b172e4d691371534828078be47e7fff524c
+CVE-2021-3527
+
+--- qemu-3.1+dfsg.orig/hw/usb/combined-packet.c
++++ qemu-3.1+dfsg/hw/usb/combined-packet.c
+@@ -172,7 +172,9 @@ void usb_ep_combine_input_packets(USBEnd
+         if ((p->iov.size % ep->max_packet_size) != 0 || !p->short_not_ok ||
+                 next == NULL ||
+                 /* Work around for Linux usbfs bulk splitting + migration */
+-                (totalsize == (16 * KiB - 36) && p->int_req)) {
++                (totalsize == (16 * KiB - 36) && p->int_req) ||
++                /* Next package may grow combined package over 1MiB */
++                totalsize > 1 * MiB - ep->max_packet_size) {
+             usb_device_handle_data(ep->dev, first);
+             assert(first->status == USB_RET_ASYNC);
+             if (first->combined) {
+--- qemu-3.1+dfsg.orig/hw/usb/redirect.c
++++ qemu-3.1+dfsg/hw/usb/redirect.c
+@@ -602,7 +602,7 @@ static void usbredir_handle_iso_data(USB
+                 .endpoint = ep,
+                 .length = p->iov.size
+             };
+-            uint8_t buf[p->iov.size];
++            g_autofree uint8_t *buf = g_malloc(p->iov.size);
+             /* No id, we look at the ep when receiving a status back */
+             usb_packet_copy(p, buf, p->iov.size);
+             usbredirparser_send_iso_packet(dev->parser, 0, &iso_packet,
+@@ -800,7 +800,7 @@ static void usbredir_handle_bulk_data(US
+         usbredirparser_send_bulk_packet(dev->parser, p->id,
+                                         &bulk_packet, NULL, 0);
+     } else {
+-        uint8_t buf[size];
++        g_autofree uint8_t *buf = g_malloc(size);
+         usb_packet_copy(p, buf, size);
+         usbredir_log_data(dev, "bulk data out:", buf, size);
+         usbredirparser_send_bulk_packet(dev->parser, p->id,
+@@ -873,7 +873,7 @@ static void usbredir_handle_interrupt_ou
+                                                USBPacket *p, uint8_t ep)
+ {
+     struct usb_redir_interrupt_packet_header interrupt_packet;
+-    uint8_t buf[p->iov.size];
++    g_autofree uint8_t *buf = g_malloc(p->iov.size);
+ 
+     DPRINTF("interrupt-out ep %02X len %zd id %"PRIu64"\n", ep,
+             p->iov.size, p->id);
diff -Nru qemu-3.1+dfsg/debian/patches/CVE-2021-3582.patch 
qemu-3.1+dfsg/debian/patches/CVE-2021-3582.patch
--- qemu-3.1+dfsg/debian/patches/CVE-2021-3582.patch    1970-01-01 
01:00:00.000000000 +0100
+++ qemu-3.1+dfsg/debian/patches/CVE-2021-3582.patch    2022-02-14 
17:28:53.000000000 +0100
@@ -0,0 +1,18 @@
+284f191b4abad213aed04cb0458e1600fd18d7c4 / CVE-2021-3582
+
+--- qemu-3.1+dfsg.orig/hw/rdma/vmw/pvrdma_cmd.c
++++ qemu-3.1+dfsg/hw/rdma/vmw/pvrdma_cmd.c
+@@ -39,6 +39,13 @@ static void *pvrdma_map_to_pdir(PCIDevic
+         return NULL;
+     }
+ 
++    length = ROUND_UP(length, TARGET_PAGE_SIZE);
++    if (nchunks * TARGET_PAGE_SIZE != length) {
++        rdma_error_report("Invalid nchunks/length (%u, %lu)", nchunks,
++                          (unsigned long)length);
++        return NULL;
++    }
++
+     dir = rdma_pci_dma_map(pdev, pdir_dma, TARGET_PAGE_SIZE);
+     if (!dir) {
+         error_report("PVRDMA: Failed to map to page directory");
diff -Nru qemu-3.1+dfsg/debian/patches/CVE-2021-3607.patch 
qemu-3.1+dfsg/debian/patches/CVE-2021-3607.patch
--- qemu-3.1+dfsg/debian/patches/CVE-2021-3607.patch    1970-01-01 
01:00:00.000000000 +0100
+++ qemu-3.1+dfsg/debian/patches/CVE-2021-3607.patch    2022-02-15 
15:14:56.000000000 +0100
@@ -0,0 +1,15 @@
+32e5703cfea07c91e6e84bcb0313f633bb146534 / CVE-2021-3607
+
+--- qemu-3.1+dfsg.orig/hw/rdma/vmw/pvrdma_main.c
++++ qemu-3.1+dfsg/hw/rdma/vmw/pvrdma_main.c
+@@ -71,6 +71,10 @@ static int init_dev_ring(PvrdmaRing *rin
+     pr_dbg("Initializing device ring %s\n", name);
+     pr_dbg("pdir_dma=0x%llx\n", (long long unsigned int)dir_addr);
+     pr_dbg("num_pages=%d\n", num_pages);
++    if (!num_pages) {
++        rdma_error_report("Ring pages count must be strictly positive");
++        return -EINVAL;
++    }
+     dir = rdma_pci_dma_map(pci_dev, dir_addr, TARGET_PAGE_SIZE);
+     if (!dir) {
+         pr_err("Failed to map to page directory\n");
diff -Nru qemu-3.1+dfsg/debian/patches/CVE-2021-3608.patch 
qemu-3.1+dfsg/debian/patches/CVE-2021-3608.patch
--- qemu-3.1+dfsg/debian/patches/CVE-2021-3608.patch    1970-01-01 
01:00:00.000000000 +0100
+++ qemu-3.1+dfsg/debian/patches/CVE-2021-3608.patch    2022-02-15 
15:17:10.000000000 +0100
@@ -0,0 +1,13 @@
+66ae37d8cc313f89272e711174a846a229bcdbd3 /CVE-2021-3608
+
+--- qemu-3.1+dfsg.orig/hw/rdma/vmw/pvrdma_dev_ring.c
++++ qemu-3.1+dfsg/hw/rdma/vmw/pvrdma_dev_ring.c
+@@ -42,7 +42,7 @@ int pvrdma_ring_init(PvrdmaRing *ring, c
+     atomic_set(&ring->ring_state->cons_head, 0);
+     */
+     ring->npages = npages;
+-    ring->pages = g_malloc(npages * sizeof(void *));
++    ring->pages = g_malloc0(npages * sizeof(void *));
+ 
+     for (i = 0; i < npages; i++) {
+         if (!tbl[i]) {
diff -Nru qemu-3.1+dfsg/debian/patches/CVE-2021-3682.patch 
qemu-3.1+dfsg/debian/patches/CVE-2021-3682.patch
--- qemu-3.1+dfsg/debian/patches/CVE-2021-3682.patch    1970-01-01 
01:00:00.000000000 +0100
+++ qemu-3.1+dfsg/debian/patches/CVE-2021-3682.patch    2022-02-15 
15:18:56.000000000 +0100
@@ -0,0 +1,13 @@
+5e796671e6b8d5de4b0b423dce1b3eba144a92c9 / CVE-2021-3682
+
+--- qemu-3.1+dfsg.orig/hw/usb/redirect.c
++++ qemu-3.1+dfsg/hw/usb/redirect.c
+@@ -458,7 +458,7 @@ static int bufp_alloc(USBRedirDevice *de
+     if (dev->endpoint[EP2I(ep)].bufpq_dropping_packets) {
+         if (dev->endpoint[EP2I(ep)].bufpq_size >
+                 dev->endpoint[EP2I(ep)].bufpq_target_size) {
+-            free(data);
++            free(free_on_destroy);
+             return -1;
+         }
+         dev->endpoint[EP2I(ep)].bufpq_dropping_packets = 0;
diff -Nru qemu-3.1+dfsg/debian/patches/CVE-2021-3713.patch 
qemu-3.1+dfsg/debian/patches/CVE-2021-3713.patch
--- qemu-3.1+dfsg/debian/patches/CVE-2021-3713.patch    1970-01-01 
01:00:00.000000000 +0100
+++ qemu-3.1+dfsg/debian/patches/CVE-2021-3713.patch    2022-02-15 
18:40:40.000000000 +0100
@@ -0,0 +1,36 @@
+13b250b12ad3c59114a6a17d59caf073ce45b33a / CVE-2021-3713
+
+--- qemu-3.1+dfsg.orig/hw/usb/dev-uas.c
++++ qemu-3.1+dfsg/hw/usb/dev-uas.c
+@@ -827,6 +827,9 @@ static void usb_uas_handle_data(USBDevic
+         }
+         break;
+     case UAS_PIPE_ID_STATUS:
++        if (p->stream > UAS_MAX_STREAMS) {
++            goto err_stream;
++        }
+         if (p->stream) {
+             QTAILQ_FOREACH(st, &uas->results, next) {
+                 if (st->stream == p->stream) {
+@@ -854,6 +857,9 @@ static void usb_uas_handle_data(USBDevic
+         break;
+     case UAS_PIPE_ID_DATA_IN:
+     case UAS_PIPE_ID_DATA_OUT:
++        if (p->stream > UAS_MAX_STREAMS) {
++            goto err_stream;
++        }
+         if (p->stream) {
+             req = usb_uas_find_request(uas, p->stream);
+         } else {
+@@ -889,6 +895,11 @@ static void usb_uas_handle_data(USBDevic
+         p->status = USB_RET_STALL;
+         break;
+     }
++
++err_stream:
++    error_report("%s: invalid stream %d", __func__, p->stream);
++    p->status = USB_RET_STALL;
++    return;
+ }
+ 
+ static void usb_uas_unrealize(USBDevice *dev, Error **errp)
diff -Nru qemu-3.1+dfsg/debian/patches/CVE-2021-3748.patch 
qemu-3.1+dfsg/debian/patches/CVE-2021-3748.patch
--- qemu-3.1+dfsg/debian/patches/CVE-2021-3748.patch    1970-01-01 
01:00:00.000000000 +0100
+++ qemu-3.1+dfsg/debian/patches/CVE-2021-3748.patch    2022-02-15 
18:42:34.000000000 +0100
@@ -0,0 +1,94 @@
+bedd7e93d01961fcb16a97ae45d93acf357e11f6 / CVE-2021-3748
+
+--- qemu-3.1+dfsg.orig/hw/net/virtio-net.c
++++ qemu-3.1+dfsg/hw/net/virtio-net.c
+@@ -1194,10 +1194,13 @@ static ssize_t virtio_net_receive_rcu(Ne
+     VirtIONet *n = qemu_get_nic_opaque(nc);
+     VirtIONetQueue *q = virtio_net_get_subqueue(nc);
+     VirtIODevice *vdev = VIRTIO_DEVICE(n);
++    VirtQueueElement *elems[VIRTQUEUE_MAX_SIZE];
++    size_t lens[VIRTQUEUE_MAX_SIZE];
+     struct iovec mhdr_sg[VIRTQUEUE_MAX_SIZE];
+     struct virtio_net_hdr_mrg_rxbuf mhdr;
+     unsigned mhdr_cnt = 0;
+-    size_t offset, i, guest_offset;
++    size_t offset, i, guest_offset, j;
++    ssize_t err;
+ 
+     if (!virtio_net_can_receive(nc)) {
+         return -1;
+@@ -1220,6 +1223,12 @@ static ssize_t virtio_net_receive_rcu(Ne
+ 
+         total = 0;
+ 
++        if (i == VIRTQUEUE_MAX_SIZE) {
++            virtio_error(vdev, "virtio-net unexpected long buffer chain");
++            err = size;
++            goto err;
++        }
++
+         elem = virtqueue_pop(q->rx_vq, sizeof(VirtQueueElement));
+         if (!elem) {
+             if (i) {
+@@ -1231,7 +1240,8 @@ static ssize_t virtio_net_receive_rcu(Ne
+                              n->guest_hdr_len, n->host_hdr_len,
+                              vdev->guest_features);
+             }
+-            return -1;
++            err = -1;
++            goto err;
+         }
+ 
+         if (elem->in_num < 1) {
+@@ -1239,7 +1249,8 @@ static ssize_t virtio_net_receive_rcu(Ne
+                          "virtio-net receive queue contains no in buffers");
+             virtqueue_detach_element(q->rx_vq, elem, 0);
+             g_free(elem);
+-            return -1;
++            err = -1;
++            goto err;
+         }
+ 
+         sg = elem->in_sg;
+@@ -1271,12 +1282,13 @@ static ssize_t virtio_net_receive_rcu(Ne
+         if (!n->mergeable_rx_bufs && offset < size) {
+             virtqueue_unpop(q->rx_vq, elem, total);
+             g_free(elem);
+-            return size;
++            err = size;
++            goto err;
+         }
+ 
+-        /* signal other side */
+-        virtqueue_fill(q->rx_vq, elem, total, i++);
+-        g_free(elem);
++        elems[i] = elem;
++        lens[i] = total;
++        i++;
+     }
+ 
+     if (mhdr_cnt) {
+@@ -1286,10 +1298,23 @@ static ssize_t virtio_net_receive_rcu(Ne
+                      &mhdr.num_buffers, sizeof mhdr.num_buffers);
+     }
+ 
++    for (j = 0; j < i; j++) {
++        /* signal other side */
++        virtqueue_fill(q->rx_vq, elems[j], lens[j], j);
++        g_free(elems[j]);
++    }
++
+     virtqueue_flush(q->rx_vq, i);
+     virtio_notify(vdev, q->rx_vq);
+ 
+     return size;
++
++err:
++    for (j = 0; j < i; j++) {
++        g_free(elems[j]);
++    }
++
++    return err;
+ }
+ 
+ static ssize_t virtio_net_receive(NetClientState *nc, const uint8_t *buf,
diff -Nru qemu-3.1+dfsg/debian/patches/CVE-2021-3930.patch 
qemu-3.1+dfsg/debian/patches/CVE-2021-3930.patch
--- qemu-3.1+dfsg/debian/patches/CVE-2021-3930.patch    1970-01-01 
01:00:00.000000000 +0100
+++ qemu-3.1+dfsg/debian/patches/CVE-2021-3930.patch    2022-02-15 
18:44:07.000000000 +0100
@@ -0,0 +1,24 @@
+b3af7fdf9cc537f8f0dd3e2423d83f5c99a457e8 / CVE-2021-3930
+
+--- qemu-3.1+dfsg.orig/hw/scsi/scsi-disk.c
++++ qemu-3.1+dfsg/hw/scsi/scsi-disk.c
+@@ -1082,6 +1082,7 @@ static int mode_sense_page(SCSIDiskState
+     uint8_t *p = *p_outbuf + 2;
+     int length;
+ 
++    assert(page < ARRAY_SIZE(mode_sense_valid));
+     if ((mode_sense_valid[page] & (1 << s->qdev.type)) == 0) {
+         return -1;
+     }
+@@ -1422,6 +1423,11 @@ static int scsi_disk_check_mode_select(S
+         return -1;
+     }
+ 
++    /* MODE_PAGE_ALLS is only valid for MODE SENSE commands */
++    if (page == MODE_PAGE_ALLS) {
++        return -1;
++    }
++
+     p = mode_current;
+     memset(mode_current, 0, inlen + 2);
+     len = mode_sense_page(s, page, &p, 0);
diff -Nru qemu-3.1+dfsg/debian/patches/series 
qemu-3.1+dfsg/debian/patches/series
--- qemu-3.1+dfsg/debian/patches/series 2020-07-24 14:00:34.000000000 +0200
+++ qemu-3.1+dfsg/debian/patches/series 2022-02-15 18:53:24.000000000 +0100
@@ -49,3 +49,26 @@
 sm501-replace-hand-written-implementation-with-pixman-CVE-2020-12829.patch
 usb-fix-setup_len-init-CVE-2020-14364.patch
 net-assertion-in-net_tx_pkt_add_raw_fragment-CVE-2020-16092.patch
+CVE-2020-13253.patch
+CVE-2020-15859.patch
+CVE-2020-25084.patch
+CVE-2020-25085.patch
+CVE-2020-25625.patch
+CVE-2020-25624.patch
+CVE-2020-25723.patch
+CVE-2020-27617.patch
+CVE-2020-35504.patch
+CVE-2020-35505.patch
+CVE-2021-20181.patch
+CVE-2021-20203.patch
+CVE-2021-20221.patch
+CVE-2021-20257.patch
+CVE-2021-3392.patch
+CVE-2021-3527.patch
+CVE-2021-3582.patch
+CVE-2021-3607.patch
+CVE-2021-3608.patch
+CVE-2021-3682.patch
+CVE-2021-3713.patch
+CVE-2021-3748.patch
+CVE-2021-3930.patch

Reply via email to