[app-emulation/qemu] sync with tree
This commit is contained in:
parent
28b199a687
commit
ee5b5151bf
50
app-emulation/qemu/files/qemu-2.5.0-CVE-2015-8558.patch
Normal file
50
app-emulation/qemu/files/qemu-2.5.0-CVE-2015-8558.patch
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
https://bugs.gentoo.org/568246
|
||||||
|
|
||||||
|
From 156a2e4dbffa85997636a7a39ef12da6f1b40254 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Gerd Hoffmann <kraxel@redhat.com>
|
||||||
|
Date: Mon, 14 Dec 2015 09:21:23 +0100
|
||||||
|
Subject: [PATCH] ehci: make idt processing more robust
|
||||||
|
|
||||||
|
Make ehci_process_itd return an error in case we didn't do any actual
|
||||||
|
iso transfer because we've found no active transaction. That'll avoid
|
||||||
|
ehci happily run in circles forever if the guest builds a loop out of
|
||||||
|
idts.
|
||||||
|
|
||||||
|
This is CVE-2015-8558.
|
||||||
|
|
||||||
|
Cc: qemu-stable@nongnu.org
|
||||||
|
Reported-by: Qinghao Tang <luodalongde@gmail.com>
|
||||||
|
Tested-by: P J P <ppandit@redhat.com>
|
||||||
|
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
|
||||||
|
---
|
||||||
|
hw/usb/hcd-ehci.c | 5 +++--
|
||||||
|
1 file changed, 3 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/hw/usb/hcd-ehci.c b/hw/usb/hcd-ehci.c
|
||||||
|
index 4e2161b..d07f228 100644
|
||||||
|
--- a/hw/usb/hcd-ehci.c
|
||||||
|
+++ b/hw/usb/hcd-ehci.c
|
||||||
|
@@ -1389,7 +1389,7 @@ static int ehci_process_itd(EHCIState *ehci,
|
||||||
|
{
|
||||||
|
USBDevice *dev;
|
||||||
|
USBEndpoint *ep;
|
||||||
|
- uint32_t i, len, pid, dir, devaddr, endp;
|
||||||
|
+ uint32_t i, len, pid, dir, devaddr, endp, xfers = 0;
|
||||||
|
uint32_t pg, off, ptr1, ptr2, max, mult;
|
||||||
|
|
||||||
|
ehci->periodic_sched_active = PERIODIC_ACTIVE;
|
||||||
|
@@ -1479,9 +1479,10 @@ static int ehci_process_itd(EHCIState *ehci,
|
||||||
|
ehci_raise_irq(ehci, USBSTS_INT);
|
||||||
|
}
|
||||||
|
itd->transact[i] &= ~ITD_XACT_ACTIVE;
|
||||||
|
+ xfers++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
- return 0;
|
||||||
|
+ return xfers ? 0 : -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
2.6.2
|
||||||
|
|
95
app-emulation/qemu/files/qemu-2.5.0-CVE-2015-8567.patch
Normal file
95
app-emulation/qemu/files/qemu-2.5.0-CVE-2015-8567.patch
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
https://bugs.gentoo.org/567868
|
||||||
|
|
||||||
|
From aa4a3dce1c88ed51b616806b8214b7c8428b7470 Mon Sep 17 00:00:00 2001
|
||||||
|
From: P J P <ppandit@redhat.com>
|
||||||
|
Date: Tue, 15 Dec 2015 12:27:54 +0530
|
||||||
|
Subject: [PATCH] net: vmxnet3: avoid memory leakage in activate_device
|
||||||
|
|
||||||
|
Vmxnet3 device emulator does not check if the device is active
|
||||||
|
before activating it, also it did not free the transmit & receive
|
||||||
|
buffers while deactivating the device, thus resulting in memory
|
||||||
|
leakage on the host. This patch fixes both these issues to avoid
|
||||||
|
host memory leakage.
|
||||||
|
|
||||||
|
Reported-by: Qinghao Tang <luodalongde@gmail.com>
|
||||||
|
Reviewed-by: Dmitry Fleytman <dmitry@daynix.com>
|
||||||
|
Signed-off-by: Prasad J Pandit <pjp@fedoraproject.org>
|
||||||
|
Cc: qemu-stable@nongnu.org
|
||||||
|
Signed-off-by: Jason Wang <jasowang@redhat.com>
|
||||||
|
---
|
||||||
|
hw/net/vmxnet3.c | 24 ++++++++++++++++--------
|
||||||
|
1 file changed, 16 insertions(+), 8 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/hw/net/vmxnet3.c b/hw/net/vmxnet3.c
|
||||||
|
index a5dd79a..9c1adfc 100644
|
||||||
|
--- a/hw/net/vmxnet3.c
|
||||||
|
+++ b/hw/net/vmxnet3.c
|
||||||
|
@@ -1194,8 +1194,13 @@ static void vmxnet3_reset_mac(VMXNET3State *s)
|
||||||
|
|
||||||
|
static void vmxnet3_deactivate_device(VMXNET3State *s)
|
||||||
|
{
|
||||||
|
- VMW_CBPRN("Deactivating vmxnet3...");
|
||||||
|
- s->device_active = false;
|
||||||
|
+ if (s->device_active) {
|
||||||
|
+ VMW_CBPRN("Deactivating vmxnet3...");
|
||||||
|
+ vmxnet_tx_pkt_reset(s->tx_pkt);
|
||||||
|
+ vmxnet_tx_pkt_uninit(s->tx_pkt);
|
||||||
|
+ vmxnet_rx_pkt_uninit(s->rx_pkt);
|
||||||
|
+ s->device_active = false;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
static void vmxnet3_reset(VMXNET3State *s)
|
||||||
|
@@ -1204,7 +1209,6 @@ static void vmxnet3_reset(VMXNET3State *s)
|
||||||
|
|
||||||
|
vmxnet3_deactivate_device(s);
|
||||||
|
vmxnet3_reset_interrupt_states(s);
|
||||||
|
- vmxnet_tx_pkt_reset(s->tx_pkt);
|
||||||
|
s->drv_shmem = 0;
|
||||||
|
s->tx_sop = true;
|
||||||
|
s->skip_current_tx_pkt = false;
|
||||||
|
@@ -1431,6 +1435,12 @@ static void vmxnet3_activate_device(VMXNET3State *s)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ /* Verify if device is active */
|
||||||
|
+ if (s->device_active) {
|
||||||
|
+ VMW_CFPRN("Vmxnet3 device is active");
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
vmxnet3_adjust_by_guest_type(s);
|
||||||
|
vmxnet3_update_features(s);
|
||||||
|
vmxnet3_update_pm_state(s);
|
||||||
|
@@ -1627,7 +1637,7 @@ static void vmxnet3_handle_command(VMXNET3State *s, uint64_t cmd)
|
||||||
|
break;
|
||||||
|
|
||||||
|
case VMXNET3_CMD_QUIESCE_DEV:
|
||||||
|
- VMW_CBPRN("Set: VMXNET3_CMD_QUIESCE_DEV - pause the device");
|
||||||
|
+ VMW_CBPRN("Set: VMXNET3_CMD_QUIESCE_DEV - deactivate the device");
|
||||||
|
vmxnet3_deactivate_device(s);
|
||||||
|
break;
|
||||||
|
|
||||||
|
@@ -1741,7 +1751,7 @@ vmxnet3_io_bar1_write(void *opaque,
|
||||||
|
* shared address only after we get the high part
|
||||||
|
*/
|
||||||
|
if (val == 0) {
|
||||||
|
- s->device_active = false;
|
||||||
|
+ vmxnet3_deactivate_device(s);
|
||||||
|
}
|
||||||
|
s->temp_shared_guest_driver_memory = val;
|
||||||
|
s->drv_shmem = 0;
|
||||||
|
@@ -2021,9 +2031,7 @@ static bool vmxnet3_peer_has_vnet_hdr(VMXNET3State *s)
|
||||||
|
static void vmxnet3_net_uninit(VMXNET3State *s)
|
||||||
|
{
|
||||||
|
g_free(s->mcast_list);
|
||||||
|
- vmxnet_tx_pkt_reset(s->tx_pkt);
|
||||||
|
- vmxnet_tx_pkt_uninit(s->tx_pkt);
|
||||||
|
- vmxnet_rx_pkt_uninit(s->rx_pkt);
|
||||||
|
+ vmxnet3_deactivate_device(s);
|
||||||
|
qemu_del_nic(s->nic);
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.6.2
|
||||||
|
|
49
app-emulation/qemu/files/qemu-2.5.0-CVE-2015-8701.patch
Normal file
49
app-emulation/qemu/files/qemu-2.5.0-CVE-2015-8701.patch
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
https://bugs.gentoo.org/570110
|
||||||
|
|
||||||
|
From 007cd223de527b5f41278f2d886c1a4beb3e67aa Mon Sep 17 00:00:00 2001
|
||||||
|
From: Prasad J Pandit <pjp@fedoraproject.org>
|
||||||
|
Date: Mon, 28 Dec 2015 16:24:08 +0530
|
||||||
|
Subject: [PATCH] net: rocker: fix an incorrect array bounds check
|
||||||
|
|
||||||
|
While processing transmit(tx) descriptors in 'tx_consume' routine
|
||||||
|
the switch emulator suffers from an off-by-one error, if a
|
||||||
|
descriptor was to have more than allowed(ROCKER_TX_FRAGS_MAX=16)
|
||||||
|
fragments. Fix an incorrect bounds check to avoid it.
|
||||||
|
|
||||||
|
Reported-by: Qinghao Tang <luodalongde@gmail.com>
|
||||||
|
Cc: qemu-stable@nongnu.org
|
||||||
|
Signed-off-by: Prasad J Pandit <pjp@fedoraproject.org>
|
||||||
|
Signed-off-by: Jason Wang <jasowang@redhat.com>
|
||||||
|
---
|
||||||
|
hw/net/rocker/rocker.c | 8 ++++----
|
||||||
|
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/hw/net/rocker/rocker.c b/hw/net/rocker/rocker.c
|
||||||
|
index c57f1a6..2e77e50 100644
|
||||||
|
--- a/hw/net/rocker/rocker.c
|
||||||
|
+++ b/hw/net/rocker/rocker.c
|
||||||
|
@@ -232,6 +232,9 @@ static int tx_consume(Rocker *r, DescInfo *info)
|
||||||
|
frag_addr = rocker_tlv_get_le64(tlvs[ROCKER_TLV_TX_FRAG_ATTR_ADDR]);
|
||||||
|
frag_len = rocker_tlv_get_le16(tlvs[ROCKER_TLV_TX_FRAG_ATTR_LEN]);
|
||||||
|
|
||||||
|
+ if (iovcnt >= ROCKER_TX_FRAGS_MAX) {
|
||||||
|
+ goto err_too_many_frags;
|
||||||
|
+ }
|
||||||
|
iov[iovcnt].iov_len = frag_len;
|
||||||
|
iov[iovcnt].iov_base = g_malloc(frag_len);
|
||||||
|
if (!iov[iovcnt].iov_base) {
|
||||||
|
@@ -244,10 +247,7 @@ static int tx_consume(Rocker *r, DescInfo *info)
|
||||||
|
err = -ROCKER_ENXIO;
|
||||||
|
goto err_bad_io;
|
||||||
|
}
|
||||||
|
-
|
||||||
|
- if (++iovcnt > ROCKER_TX_FRAGS_MAX) {
|
||||||
|
- goto err_too_many_frags;
|
||||||
|
- }
|
||||||
|
+ iovcnt++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (iovcnt) {
|
||||||
|
--
|
||||||
|
2.6.2
|
||||||
|
|
50
app-emulation/qemu/files/qemu-2.5.0-CVE-2015-8743.patch
Normal file
50
app-emulation/qemu/files/qemu-2.5.0-CVE-2015-8743.patch
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
https://bugs.gentoo.org/570988
|
||||||
|
|
||||||
|
From aa7f9966dfdff500bbbf1956d9e115b1fa8987a6 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Prasad J Pandit <pjp@fedoraproject.org>
|
||||||
|
Date: Thu, 31 Dec 2015 17:05:27 +0530
|
||||||
|
Subject: [PATCH] net: ne2000: fix bounds check in ioport operations
|
||||||
|
|
||||||
|
While doing ioport r/w operations, ne2000 device emulation suffers
|
||||||
|
from OOB r/w errors. Update respective array bounds check to avoid
|
||||||
|
OOB access.
|
||||||
|
|
||||||
|
Reported-by: Ling Liu <liuling-it@360.cn>
|
||||||
|
Cc: qemu-stable@nongnu.org
|
||||||
|
Signed-off-by: Prasad J Pandit <pjp@fedoraproject.org>
|
||||||
|
Signed-off-by: Jason Wang <jasowang@redhat.com>
|
||||||
|
---
|
||||||
|
hw/net/ne2000.c | 10 ++++++----
|
||||||
|
1 file changed, 6 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/hw/net/ne2000.c b/hw/net/ne2000.c
|
||||||
|
index 010f9ef..a3dffff 100644
|
||||||
|
--- a/hw/net/ne2000.c
|
||||||
|
+++ b/hw/net/ne2000.c
|
||||||
|
@@ -467,8 +467,9 @@ static inline void ne2000_mem_writel(NE2000State *s, uint32_t addr,
|
||||||
|
uint32_t val)
|
||||||
|
{
|
||||||
|
addr &= ~1; /* XXX: check exact behaviour if not even */
|
||||||
|
- if (addr < 32 ||
|
||||||
|
- (addr >= NE2000_PMEM_START && addr < NE2000_MEM_SIZE)) {
|
||||||
|
+ if (addr < 32
|
||||||
|
+ || (addr >= NE2000_PMEM_START
|
||||||
|
+ && addr + sizeof(uint32_t) <= NE2000_MEM_SIZE)) {
|
||||||
|
stl_le_p(s->mem + addr, val);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -497,8 +498,9 @@ static inline uint32_t ne2000_mem_readw(NE2000State *s, uint32_t addr)
|
||||||
|
static inline uint32_t ne2000_mem_readl(NE2000State *s, uint32_t addr)
|
||||||
|
{
|
||||||
|
addr &= ~1; /* XXX: check exact behaviour if not even */
|
||||||
|
- if (addr < 32 ||
|
||||||
|
- (addr >= NE2000_PMEM_START && addr < NE2000_MEM_SIZE)) {
|
||||||
|
+ if (addr < 32
|
||||||
|
+ || (addr >= NE2000_PMEM_START
|
||||||
|
+ && addr + sizeof(uint32_t) <= NE2000_MEM_SIZE)) {
|
||||||
|
return ldl_le_p(s->mem + addr);
|
||||||
|
} else {
|
||||||
|
return 0xffffffff;
|
||||||
|
--
|
||||||
|
2.6.2
|
||||||
|
|
41
app-emulation/qemu/files/qemu-2.5.0-CVE-2016-1568.patch
Normal file
41
app-emulation/qemu/files/qemu-2.5.0-CVE-2016-1568.patch
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
https://bugs.gentoo.org/571566
|
||||||
|
|
||||||
|
From 4ab0359a8ae182a7ac5c99609667273167703fab Mon Sep 17 00:00:00 2001
|
||||||
|
From: Prasad J Pandit <pjp@fedoraproject.org>
|
||||||
|
Date: Mon, 11 Jan 2016 14:10:42 -0500
|
||||||
|
Subject: [PATCH] ide: ahci: reset ncq object to unused on error
|
||||||
|
|
||||||
|
When processing NCQ commands, AHCI device emulation prepares a
|
||||||
|
NCQ transfer object; To which an aio control block(aiocb) object
|
||||||
|
is assigned in 'execute_ncq_command'. In case, when the NCQ
|
||||||
|
command is invalid, the 'aiocb' object is not assigned, and NCQ
|
||||||
|
transfer object is left as 'used'. This leads to a use after
|
||||||
|
free kind of error in 'bdrv_aio_cancel_async' via 'ahci_reset_port'.
|
||||||
|
Reset NCQ transfer object to 'unused' to avoid it.
|
||||||
|
|
||||||
|
[Maintainer edit: s/ACHI/AHCI/ in the commit message. --js]
|
||||||
|
|
||||||
|
Reported-by: Qinghao Tang <luodalongde@gmail.com>
|
||||||
|
Signed-off-by: Prasad J Pandit <pjp@fedoraproject.org>
|
||||||
|
Reviewed-by: John Snow <jsnow@redhat.com>
|
||||||
|
Message-id: 1452282511-4116-1-git-send-email-ppandit@redhat.com
|
||||||
|
Signed-off-by: John Snow <jsnow@redhat.com>
|
||||||
|
---
|
||||||
|
hw/ide/ahci.c | 1 +
|
||||||
|
1 file changed, 1 insertion(+)
|
||||||
|
|
||||||
|
diff --git a/hw/ide/ahci.c b/hw/ide/ahci.c
|
||||||
|
index dd1912e..17f1cbd 100644
|
||||||
|
--- a/hw/ide/ahci.c
|
||||||
|
+++ b/hw/ide/ahci.c
|
||||||
|
@@ -910,6 +910,7 @@ static void ncq_err(NCQTransferState *ncq_tfs)
|
||||||
|
ide_state->error = ABRT_ERR;
|
||||||
|
ide_state->status = READY_STAT | ERR_STAT;
|
||||||
|
ncq_tfs->drive->port_regs.scr_err |= (1 << ncq_tfs->tag);
|
||||||
|
+ ncq_tfs->used = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ncq_finish(NCQTransferState *ncq_tfs)
|
||||||
|
--
|
||||||
|
2.6.2
|
||||||
|
|
@ -315,6 +315,12 @@ src_prepare() {
|
|||||||
EPATCH_FORCE=yes EPATCH_SUFFIX="patch" EPATCH_SOURCE="${S}/patches" \
|
EPATCH_FORCE=yes EPATCH_SUFFIX="patch" EPATCH_SOURCE="${S}/patches" \
|
||||||
epatch
|
epatch
|
||||||
|
|
||||||
|
epatch "${FILESDIR}"/${P}-CVE-2015-8567.patch #567868
|
||||||
|
epatch "${FILESDIR}"/${P}-CVE-2015-8558.patch #568246
|
||||||
|
epatch "${FILESDIR}"/${P}-CVE-2015-8701.patch #570110
|
||||||
|
epatch "${FILESDIR}"/${P}-CVE-2015-8743.patch #570988
|
||||||
|
epatch "${FILESDIR}"/${P}-CVE-2016-1568.patch #571566
|
||||||
|
|
||||||
# Fix ld and objcopy being called directly
|
# Fix ld and objcopy being called directly
|
||||||
tc-export AR LD OBJCOPY
|
tc-export AR LD OBJCOPY
|
||||||
|
|
Loading…
Reference in New Issue
Block a user