Bug 635535

Summary: Disallow 0-sized writes to virtio ports to go through to host (leading to VM crash)
Product: Red Hat Enterprise Linux 6 Reporter: Amit Shah <amit.shah>
Component: kernelAssignee: Amit Shah <amit.shah>
Status: CLOSED ERRATA QA Contact: Virtualization Bugs <virt-bugs>
Severity: high Docs Contact:
Priority: medium    
Version: 6.1CC: akong, amit.shah, dhoward, fhrbata, gyue, llim, plyons, tburke, virt-maint
Target Milestone: rcKeywords: ZStream
Target Release: 6.1   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: kernel-2.6.32-85.el6 Doc Type: Bug Fix
Doc Text:
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.
Story Points: ---
Clone Of:
: 636046 (view as bug list) Environment:
Last Closed: 2011-05-23 20:52:46 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On:    
Bug Blocks: 580954, 636046, 678559    

Description Amit Shah 2010-09-20 06:05:43 UTC
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.

Comment 3 RHEL Program Management 2010-10-05 01:52:33 UTC
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.

Comment 4 Aristeu Rozanski 2010-12-13 15:14:35 UTC
Patch(es) available on kernel-2.6.32-89.el6

Comment 7 Amos Kong 2011-01-25 07:45:00 UTC
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;
}

Comment 10 Martin Prpič 2011-04-12 12:41:33 UTC
    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.

Comment 11 errata-xmlrpc 2011-05-23 20:52:46 UTC
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