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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



  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

Attachment: signature.asc
Description: PGP signature

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list

[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]