[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