Skip to contentSkip to conversation

virtio: fix indirect descriptor buffer overflow

PATCH New Michael S. Tsirkin 1 participant 1 message Jul 11, 2011

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 virtio: fix indirect descriptor buffer overflow

We were previously allowing arbitrarily-long indirect descriptors, which could lead to a buffer overflow in qemu-kvm process.

CVE-2011-2212

---
 hw/virtio.c |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)
hw/virtio.c +8 -0
index e6043de..8a6f38c 100644
@@ -449,9 +449,17 @@ int virtqueue_pop(VirtQueue *vq, VirtQueueElement *elem)
         struct iovec *sg;
 
         if (vring_desc_flags(desc_pa, i) & VRING_DESC_F_WRITE) {
+            if (elem->in_num >= ARRAY_SIZE(elem->in_sg)) {
+                error_report("Too many write descriptors in indirect table");
+                exit(1);
+            }
             elem->in_addr[elem->in_num] = vring_desc_addr(desc_pa, i);
             sg = &elem->in_sg[elem->in_num++];
         } else {
+            if (elem->out_num >= ARRAY_SIZE(elem->out_sg)) {
+                error_report("Too many read descriptors in indirect table");
+                exit(1);
+            }
             elem->out_addr[elem->out_num] = vring_desc_addr(desc_pa, i);
             sg = &elem->out_sg[elem->out_num++];
         }
Signature · 1 line
1.7.5.53.gc233e