Bug 1528572

Summary: libvirtd crash when running perl-Sys-Virt api list_node_device_names
Product: Red Hat Enterprise Linux 7 Reporter: Dan Zheng <dzheng>
Component: libvirtAssignee: Pavel Hrdina <phrdina>
Status: CLOSED ERRATA QA Contact: Dan Zheng <dzheng>
Severity: high Docs Contact:
Priority: unspecified    
Version: 7.5CC: dyuan, phrdina, rbalakri, salmy, xuzhang
Target Milestone: rcKeywords: Automation, Regression
Target Release: ---   
Hardware: x86_64   
OS: Linux   
Whiteboard:
Fixed In Version: libvirt-3.9.0-7.el7 Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2018-04-10 11:02:08 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:
Attachments:
Description Flags
gdb_libvirtd.log none

Description Dan Zheng 2017-12-22 07:59:53 UTC
Description of problem:
libvirtd crash when running perl-Sys-Virt api list_node_device_names

Version-Release number of selected component (if applicable):
libvirt-3.9.0-6.el7.x86_64
perl-Sys-Virt-3.9.0-2.el7.x86_64

How reproducible:
100%

Steps to Reproduce:
1. # ps -C libvirtd
   PID TTY          TIME CMD
184874 ?        00:00:00 libvirtd

2. Run below script

my $tck = Sys::Virt::TCK->new();
my $conn = eval { $tck->setup(); };
BAIL_OUT "failed to setup test harness: $@" if $@;
END { $tck->cleanup if $tck; }

my $nodename = $conn->list_node_device_names("net", 3);

3. # libvirt-tck --testdir host-node.t -v --force
host-node.t .. 
libvirt error code: 38, message: End of file while reading data: Input/output error
libvirt error code: 1, message: internal error: client socket is closed
END failed--call queue aborted at host-node.t line 71.
Dubious, test returned 22 (wstat 5632, 0x1600)
No subtests run 

4. ps _C libvirtd
   PID TTY          TIME CMD
185785 ?        00:00:00 libvirtd


Actual results:
See above

Expected results:
libvirtd should not be restarted.
The script should run PASS.

Additional info:
See attachment for gdb log.

Comment 2 Dan Zheng 2017-12-22 08:04:59 UTC
Created attachment 1371208 [details]
gdb_libvirtd.log

Comment 3 Pavel Hrdina 2018-01-02 09:30:00 UTC
Upstream patch posted:

https://www.redhat.com/archives/libvir-list/2018-January/msg00003.html

Comment 5 Pavel Hrdina 2018-01-02 11:38:51 UTC
Upstream commit:

commit bbf6573e94528ac8a8867855e6671b48e13f1cd1
Author: Pavel Hrdina <phrdina>
Date:   Tue Jan 2 10:18:17 2018 +0100

    conf: honor maxnames in nodeListDevices API

Comment 8 Dan Zheng 2018-01-05 08:44:13 UTC
Test package:
libvirt-3.9.0-7.el7.x86_64
qemu-kvm-rhev-2.10.0-14.el7.x86_64
kernel-3.10.0-768.el7.x86_64

Test:
# libvirt-tck --testdir scripts/host/050-host-node.t -v --force
...
1..185
ok
All tests successful.
Files=1, Tests=185,  1 wallclock secs ( 0.11 usr  0.02 sys +  0.23 cusr  0.02 csys =  0.38 CPU)
Result: PASS


050-host-node.t  include the API.
# Get node device by name
my $nodename = $conn->list_node_device_names("net", 1);
ok_node_device(sub { $conn->get_node_device_by_name($nodename) }, "Get node de...


So verify it.

Comment 12 errata-xmlrpc 2018-04-10 11:02:08 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.

https://access.redhat.com/errata/RHEA-2018:0704