Bug 1006710 - domain with auto numatune placement and a nodeset specified crashes libvirtd
Summary: domain with auto numatune placement and a nodeset specified crashes libvirtd
Status: CLOSED ERRATA
Alias: None
Product: Red Hat Enterprise Linux 6
Classification: Red Hat
Component: libvirt
Version: 6.4
Hardware: Unspecified
OS: Unspecified
unspecified
unspecified
Target Milestone: rc
: ---
Assignee: Ján Tomko
QA Contact: Virtualization Bugs
URL:
Whiteboard:
Keywords:
Depends On:
Blocks: 1006722
TreeView+ depends on / blocked
 
Reported: 2013-09-11 07:21 UTC by Ján Tomko
Modified: 2013-11-21 09:10 UTC (History)
7 users (show)

(edit)
Cause: When parsing the domain XML with 'auto' numatune placement and a nodeset specified, the nodeset bitmap was freed twice.

Consequence: Libvirtd crashed due to double free.

Fix: Set the pointer to NULL after freeing it.

Result: Libvirtd doesn't crash anymore.
Clone Of:
: 1006722 (view as bug list)
(edit)
Last Closed: 2013-11-21 09:10:46 UTC


Attachments (Terms of Use)


External Trackers
Tracker ID Priority Status Summary Last Updated
Red Hat Product Errata RHBA-2013:1581 normal SHIPPED_LIVE libvirt bug fix and enhancement update 2013-11-21 01:11:35 UTC

Description Ján Tomko 2013-09-11 07:21:05 UTC
Description of problem:
The nodeset bitmap was freed when placement was auto, but the pointer wasn't set to NULL, leading to a double free when freeing the domain definition.

Version-Release number of selected component (if applicable):
libvirt-0.10.2-18.el6

Steps to Reproduce:
1. virsh define /dev/stdin <<EOF
<domain type='qemu'>
  <name>duck</name>
  <memory unit='MiB'>32</memory>
    <numatune>
        <memory mode='preferred' placement='auto' nodeset='0'/>
    </numatune>
  <os>
    <type arch='x86_64' machine='pc'>hvm</type>
  </os>
</domain>
EOF
2. virsh undefine duck

Actual results:
error: Failed to undefine domain duck
error: End of file while reading data: Input/output error
error: Failed to reconnect to the hypervisor

Expected results:
Domain duck has been undefined

Additional info:
Reported by Liuji (Jeremy) on libvir-list:
https://www.redhat.com/archives/libvir-list/2013-September/msg00337.html

Comment 1 Ján Tomko 2013-09-11 07:26:07 UTC
Fixed upstream:
commit ef5d51d491356f1f4287aa3a8b908b183b6dd9aa
Author:     Liuji (Jeremy) <jeremy.liu@huawei.com>
AuthorDate: 2013-09-10 22:13:32 -0400
Commit:     Ján Tomko <jtomko@redhat.com>
CommitDate: 2013-09-11 09:18:28 +0200

    virDomainDefParseXML: set the argument of virBitmapFree to NULL after calling virBitmapFree
    
    After freeing the bitmap pointer, it must set the pointer to NULL.
    This will avoid any other use of the freed memory of the bitmap pointer.
    
    https://bugzilla.redhat.com/show_bug.cgi?id=1006710
    
    Signed-off-by: Liuji (Jeremy) <jeremy.liu@huawei.com>

git describe: v1.1.2-96-gef5d51d

Comment 4 Jincheng Miao 2013-09-22 03:38:35 UTC
This bug is fixed in libvirt-0.10.2-25.el6.x86_64, so I choose to change the status to VERIFIED.

# rpm -q libvirt
libvirt-0.10.2-25.el6.x86_64

# virsh define /dev/stdin <<EOF
> <domain type='qemu'>
>   <name>duck</name>
>   <memory unit='MiB'>32</memory>
>     <numatune>
>         <memory mode='preferred' placement='auto' nodeset='0'/>
>     </numatune>
>   <os>
>     <type arch='x86_64' machine='pc'>hvm</type>
>   </os>
> </domain>
> EOF
Domain duck defined from /dev/stdin

# virsh undefine duck
Domain duck has been undefined

# service libvirtd status
libvirtd (pid  22361) is running...

Comment 6 errata-xmlrpc 2013-11-21 09:10:46 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory, and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

http://rhn.redhat.com/errata/RHBA-2013-1581.html


Note You need to log in before you can comment on or make changes to this bug.