Bug 811673

Summary: guestfs_last_error not set when qemu fails early during launch
Product: Red Hat Enterprise Linux 6 Reporter: Richard W.M. Jones <rjones>
Component: libguestfsAssignee: Richard W.M. Jones <rjones>
Status: CLOSED ERRATA QA Contact: Virtualization Bugs <virt-bugs>
Severity: unspecified Docs Contact:
Priority: unspecified    
Version: 6.3CC: dyasny, leiwang, mbooth, moli, qguan, qwan, virt-maint
Target Milestone: rc   
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: libguestfs-1.16.18-2.el6 Doc Type: Bug Fix
Doc Text:
Cause: libguestfs was not setting an error during some appliance launch failures. Python bindings assume that the error string is not NULL, and would segfault if it was NULL. Consequence: Python programs could segfault when 'g.launch()' was called under some circumstances. Fix: libguestfs now sets the error string on all failure paths in launch, and the Python bindings have been fixed not to segfault. Result: Python programs won't segfault when calling 'g.launch()'
Story Points: ---
Clone Of: 811650 Environment:
Last Closed: 2012-06-20 07:01:49 UTC Type: Bug
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: 811650    
Bug Blocks:    

Description Richard W.M. Jones 2012-04-11 16:58:41 UTC
+++ This bug was initially created as a clone of Bug #811650 +++

Description of problem:

(Reported by Igor Lvovsky on RHEL 6.2 + libguestfs 1.16.15 from
preview repository)

> In [5]: guest.launch()                                                        
> python: Objects/stringobject.c:115: PyString_FromString: Assertion `str !=    
> ((void *)0)' failed.                                                          
> Aborted                                                                       

Version-Release number of selected component (if applicable):

libguestfs 1.16.15 on RHEL 6.2/6.3.

Fixed upstream:
https://github.com/libguestfs/libguestfs/commit/0f7de2279a4af0bb259c9e36fca5e5c3aa835301

There is a regression test which segfaults without the above
patch here:
https://github.com/libguestfs/libguestfs/commit/b6dd7e72500cbfa4e13379b9f2b1d0ccfa7ebec3

Comment 2 Qixiang Wan 2012-04-17 08:04:25 UTC
Verified with libguestfs-1.16.18-2.el6.x86_64.

Tested with the regression case "python/t/rhbz811650.py":

Before fix (libguestfs-1.16.15-1.el6.x86_64):

# python ./rhbz811650.py 
python: Objects/stringobject.c:115: PyString_FromString: Assertion `str != ((void *)0)' failed.
Aborted (core dumped)

After fix:

# python ./rhbz811650.py 
#

Comment 3 Richard W.M. Jones 2012-04-26 13:50:05 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:
Cause:
libguestfs was not setting an error during some appliance launch failures.  Python bindings assume that the error string is not NULL, and would segfault if it was NULL.

Consequence:
Python programs could segfault when 'g.launch()' was called under some circumstances.

Fix:
libguestfs now sets the error string on all failure paths in launch, and the Python bindings have been fixed not to segfault.

Result:
Python programs won't segfault when calling 'g.launch()'

Comment 5 errata-xmlrpc 2012-06-20 07:01:49 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/RHSA-2012-0774.html