[libvirt] 1.2.0 segfault on Centos 6

Ján Tomko jtomko at redhat.com
Wed Feb 5 08:06:17 UTC 2014


On 02/04/2014 11:23 PM, Jiri Denemark wrote:
> On Tue, Feb 04, 2014 at 17:02:41 +0100, Franky Van Liedekerke wrote:
>> Hi,
>>
>> using libvirt 1.2.0 on a up-to-date Centos6.5 machine leads to 
>> occasional segmentation faults (see below).
>> Sometimes it runs for 5 minutes, sometimes for an hour, but after that 
>> the result is always the same: segfault after some weird qom-list, that 
>> apparently the qemu version on centos doesn't know. Has 1.2.1 a known 
>> fix for this?
> 
> I believe the following patch should fix the crash. I'll do some testing
> tomorrow and send it as a proper patch afterwards:
> 
> diff --git i/src/qemu/qemu_monitor.c w/src/qemu/qemu_monitor.c
> index a968901..cdd817f 100644
> --- i/src/qemu/qemu_monitor.c
> +++ w/src/qemu/qemu_monitor.c
> @@ -1019,7 +1019,9 @@ qemuMonitorFindBalloonObjectPath(qemuMonitorPtr mon,
>                                   virDomainObjPtr vm,
>                                   const char *curpath)
>  {
> -    size_t i, j, npaths = 0, nprops = 0;
> +    size_t i, j;
> +    int npaths = 0;
> +    int nprops = 0;
>      int ret = 0;
>      char *nextpath = NULL;
>      qemuMonitorJSONListPathPtr *paths = NULL;
> @@ -1045,6 +1047,8 @@ qemuMonitorFindBalloonObjectPath(qemuMonitorPtr mon,
>      VIR_DEBUG("Searching for Balloon Object Path starting at %s", curpath);
>  
>      npaths = qemuMonitorJSONGetObjectListPaths(mon, curpath, &paths);
> +    if (npaths < 0)
> +        return -1;
>  
>      for (i = 0; i < npaths && ret == 0; i++) {
>  
> @@ -1061,6 +1065,11 @@ qemuMonitorFindBalloonObjectPath(qemuMonitorPtr mon,
>               * then this version of qemu/kvm does not support the feature.
>               */
>              nprops = qemuMonitorJSONGetObjectListPaths(mon, nextpath, &bprops);
> +            if (nprops < 0) {
> +                ret = -1;
> +                goto cleanup;
> +            }
> +
>              for (j = 0; j < nprops; j++) {
>                  if (STREQ(bprops[j]->name, "guest-stats-polling-interval")) {
>                      VIR_DEBUG("Found Balloon Object Path %s", nextpath);
> 

npaths and nprops are also compared against size_t in the cleanup section.

Jan


-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20140205/90195119/attachment-0001.sig>


More information about the libvir-list mailing list