[libvirt] [PATCH v2] tests: fix segfault in objecteventtest

Roman Bogorodskiy bogorodskiy at gmail.com
Mon Aug 29 11:19:54 UTC 2016


  Michal Privoznik wrote:

> On 25.08.2016 07:50, Roman Bogorodskiy wrote:
> > Test 12 from objecteventtest (createXML add event) segaults on FreeBSD
> > with bus error.
> > 
> > At some point it calls testNodeDeviceDestroy() from the test driver. And
> > it fails when it tries to unlock the device in the "out:" label of this
> > function.
> > 
> > Unlocking fails because the previous step was a call to
> > virNodeDeviceObjRemove from conf/node_device_conf.c. This function
> > removes the given device from the device list and cleans up the object,
> > including destroying of its mutex. However, it does not nullify the pointer
> > that was given to it.
> > 
> > As a result, we end up in testNodeDeviceDestroy() here:
> > 
> >  out:
> >     if (obj)
> >         virNodeDeviceObjUnlock(obj);
> > 
> > And instead of skipping this, we try to do Unlock and fail because of
> > malformed mutex.
> > 
> > Change virNodeDeviceObjRemove to use double pointer and set pointer to
> > NULL.
> > ---
> >  src/conf/node_device_conf.c       | 13 +++++++------
> >  src/conf/node_device_conf.h       |  2 +-
> >  src/node_device/node_device_hal.c |  4 ++--
> >  src/test/test_driver.c            |  2 +-
> >  4 files changed, 11 insertions(+), 10 deletions(-)
> 
> Almost. You've forgotten about udev (perhaps due to BSD? :-P)

Sorry, should have tested this on Linux as well. :( Thanks for catching
that!

> 
> ACK if you squash this in:
> 
> diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c
> index ddf3d88..520269f 100644
> --- a/src/node_device/node_device_udev.c
> +++ b/src/node_device/node_device_udev.c
> @@ -1044,7 +1044,7 @@ static int udevRemoveOneDevice(struct udev_device *device)
>  
>      VIR_DEBUG("Removing device '%s' with sysfs path '%s'",
>                dev->def->name, name);
> -    virNodeDeviceObjRemove(&driver->devs, dev);
> +    virNodeDeviceObjRemove(&driver->devs, &dev);
>  
>      ret = 0;
>   cleanup:
> 
> 
> Safe for freeze.

Pushed with the udev fix squashed in, thanks!

Roman Bogorodskiy
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 473 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20160829/151ae5aa/attachment-0001.sig>


More information about the libvir-list mailing list