[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-stable] [PATCH v5 06/24] virtio-net: out-of-bounds buffer write on
From: |
Michael S. Tsirkin |
Subject: |
[Qemu-stable] [PATCH v5 06/24] virtio-net: out-of-bounds buffer write on invalid state load |
Date: |
Thu, 3 Apr 2014 19:50:56 +0300 |
CVE-2013-4150 QEMU 1.5.0 out-of-bounds buffer write in
virtio_net_load()@hw/net/virtio-net.c
This code is in hw/net/virtio-net.c:
if (n->max_queues > 1) {
if (n->max_queues != qemu_get_be16(f)) {
error_report("virtio-net: different max_queues ");
return -1;
}
n->curr_queues = qemu_get_be16(f);
for (i = 1; i < n->curr_queues; i++) {
n->vqs[i].tx_waiting = qemu_get_be32(f);
}
}
Number of vqs is max_queues, so if we get invalid input here,
for example if max_queues = 2, curr_queues = 3, we get
write beyond end of the buffer, with data that comes from
wire.
This might be used to corrupt qemu memory in hard to predict ways.
Since we have lots of function pointers around, RCE might be possible.
Signed-off-by: Michael S. Tsirkin <address@hidden>
Acked-by: Jason Wang <address@hidden>
Reviewed-by: Michael Roth <address@hidden>
---
hw/net/virtio-net.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c
index c247529..2a702e3 100644
--- a/hw/net/virtio-net.c
+++ b/hw/net/virtio-net.c
@@ -1413,6 +1413,11 @@ static int virtio_net_load(QEMUFile *f, void *opaque,
int version_id)
}
n->curr_queues = qemu_get_be16(f);
+ if (n->curr_queues > n->max_queues) {
+ error_report("virtio-net: curr_queues %x > max_queues %x",
+ n->curr_queues, n->max_queues);
+ return -1;
+ }
for (i = 1; i < n->curr_queues; i++) {
n->vqs[i].tx_waiting = qemu_get_be32(f);
}
--
MST
- [Qemu-stable] [PATCH v5 17/24] ssi-sd: fix buffer overrun on invalid state load, (continued)
- [Qemu-stable] [PATCH v5 17/24] ssi-sd: fix buffer overrun on invalid state load, Michael S. Tsirkin, 2014/04/03
- [Qemu-stable] [PATCH v5 18/24] ssd0323: fix buffer overun on invalid state load, Michael S. Tsirkin, 2014/04/03
- [Qemu-stable] [PATCH v5 19/24] tsc210x: fix buffer overrun on invalid state load, Michael S. Tsirkin, 2014/04/03
- [Qemu-stable] [PATCH v5 21/24] virtio-scsi: fix buffer overrun on invalid state load, Michael S. Tsirkin, 2014/04/03
- [Qemu-stable] [PATCH v5 20/24] zaurus: fix buffer overrun on invalid state load, Michael S. Tsirkin, 2014/04/03
- [Qemu-stable] [PATCH v5 22/24] vmstate: s/VMSTATE_INT32_LE/VMSTATE_INT32_POSITIVE_LE/, Michael S. Tsirkin, 2014/04/03
- [Qemu-stable] [PATCH v5 06/24] virtio-net: out-of-bounds buffer write on invalid state load,
Michael S. Tsirkin <=
- [Qemu-stable] [PATCH v5 23/24] usb: sanity check setup_index+setup_len in post_load, Michael S. Tsirkin, 2014/04/03
- [Qemu-stable] [PATCH v5 24/24] savevm: Ignore minimum_version_id_old if there is no load_state_old, Michael S. Tsirkin, 2014/04/03
- [Qemu-stable] [PATCH v5 07/24] virtio: out-of-bounds buffer write on invalid state load, Michael S. Tsirkin, 2014/04/03
- [Qemu-stable] [PATCH v5 05/24] virtio-net: out-of-bounds buffer write on load, Michael S. Tsirkin, 2014/04/03
- [Qemu-stable] [PATCH v5 04/24] virtio-net: fix buffer overflow on invalid state load, Michael S. Tsirkin, 2014/04/03
- [Qemu-stable] [PATCH v5 03/24] vmstate: add VMSTATE_VALIDATE, Michael S. Tsirkin, 2014/04/03
- Message not available