Red Hat Bugzilla – Bug 635535
Disallow 0-sized writes to virtio ports to go through to host (leading to VM crash)
Last modified: 2013-01-10 22:20:07 EST
Description of problem: The virtio-console code was changed recently such that 0-sized writes go through to the host. This results in a NULL pointer being passed to qemu, and qemu calling abort() in such a case. To reproduce, open a console port in the guest and call write() with a 0-sized buffer.
This request was evaluated by Red Hat Product Management for inclusion in a Red Hat Enterprise Linux maintenance release. Product Management has requested further review of this request by Red Hat Engineering, for potential inclusion in a Red Hat Enterprise Linux Update release for currently deployed products. This request is not yet committed for inclusion in an Update release.
Patch(es) available on kernel-2.6.32-89.el6
Bug can be reproduced with guest kernel kernel-2.6.32-84.el6, and doesn't exist on kernel-2.6.32-85.el6. Moving to VERIFIED. (host) # qemu-kvm ... -device virtio-serial-pci,id=virtio-serial0,max_ports=31,bus=pci.0 -chardev pty,id=channel0 -device virtserialport,chardev=channel0,id=port0,bus=virtio-serial0.0 (host) # cat /dev/pts/2 //reproducer program, execute in guest #include <stdio.h> #include <unistd.h> #include <fcntl.h> #include <sys/types.h> #include <sys/stat.h> int main(void) { int f; char buf[]=""; f = open("/dev/vport0p1", O_WRONLY); write(f,buf,0); close(f); return 0; }
Technical note added. If any revisions are required, please edit the "Technical Notes" field accordingly. All revisions will be proofread by the Engineering Content Services team. New Contents: Prior to this update, user space could submit (using the write() operation) a buffer with zero length to be written to the host, causing the qemu hypervisor instance running on that host to crash. This was caused by the write() operation triggering a virtqueue event on the host, causing a NULL buffer to be accessed. With this update, user space is no longer allowed to submit zero-sized buffers and the aforementioned crash no longer occur.
An advisory has been issued which should help the problem described in this bug report. This report is therefore being closed with a resolution of ERRATA. For more information on therefore solution and/or where to find the updated files, please follow the link below. You may reopen this bug report if the solution does not work for you. http://rhn.redhat.com/errata/RHSA-2011-0542.html