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