[libvirt] [PATCH v3 0/2] vbox: address thread-safety issues
John Ferlan
jferlan at redhat.com
Wed Nov 23 19:49:06 UTC 2016
On 11/23/2016 02:01 PM, Dawid Zamirski wrote:
> This patch series solves vbox driver thread-safety issues where
> libvird process would segfault when there was more than one concurrent
> vbox connection. The reason for the segfault was because the original
> implementation called pfnComInitialize/Unintialize on each
> virConnectOpen/Close calls which were setting pointers to ISession and
> IVirtualBox instances that were held by the global g_pVBoxGlobalData.
> This caused new connection to overwrite the pointer created by the
> prior connection.
>
> Changes since v2 to address feedback in [1]:
>
> * call uninitialize when vboxSdkInitialize or vboxExtractVersion fails.
> * make sure to set the global vbox_driver pointer to NULL after
> virObjectUnref releases last reference, to avoid segfaults when
> VBOX_RELEASE is called in unintialize call.
> * tested all possible failure paths to make sure libvirtd does not
> crash, that is, vboxSdkInitialize has 4 code paths that can possibly
> return -1 and made sure all of them are safely handled.
> * fixed "unintilalize" typos in code comments and commit messages.
>
> In other words, the change boils down to:
>
> if (vboxSdkInitialize() < 0 || vboxExtractVersion() < 0) {
> gVBoxAPI.UPFN.Uninitialize(vbox_driver); // call uninit on failure
> /* make sure to clear the pointer when last reference was released */
> if (!virObjectUnref(vbox_driver))
> vbox_driver = NULL; // make sure this is NULL
>
> virMutexUnlock(&vbox_driver_lock);
>
> return NULL;
> }
>
> [1] https://www.redhat.com/archives/libvir-list/2016-November/msg01132.html
>
> Dawid Zamirski (2):
> vbox: change how vbox API is initialized.
> vbox: get rid of g_pVBoxGlobalData
>
> src/vbox/vbox_common.c | 565 +++++++++++++++++++++++-------------------
> src/vbox/vbox_common.h | 2 +-
> src/vbox/vbox_driver.c | 1 +
> src/vbox/vbox_network.c | 24 +-
> src/vbox/vbox_storage.c | 20 +-
> src/vbox/vbox_tmpl.c | 434 ++++++++++++++++----------------
> src/vbox/vbox_uniformed_api.h | 110 ++++----
> 7 files changed, 616 insertions(+), 540 deletions(-)
>
ACK series (and pushed) with an adjustment to news.html.in
"Improvements" section to list "vbox: Address thread safety issues"
John
More information about the libvir-list
mailing list