On Mon, Jun 23, 2025 at 01:16:01PM +0200, Peter Krempa wrote:
> On Mon, Jun 23, 2025 at 12:02:31 +0100, Daniel P. Berrangé via Devel wrote:
> > From: Daniel P. Berrangé <berra...@redhat.com>
> > 
> > The main XML parser code global initializer historically had a mutex
> > protecting it, and more recently uses a pthread_once. The RelaxNG
> > code, however, relies on three other global initializers that are
> > not thread safe, just relying on setting an integer "initialized"
> > flag.
> > 
> > Calling the relevant initializers from libvirt in a protected global
> > initializer will protect libvirt's own concurrent usage, however, it
> > cannot protect against other libraries loaded in process that might
> > be using libxml2's schema code. Fortunately:
> > 
> >  * The chances of other loaded non-libvirt code using libxml is
> >    relatively low
> >  * The chances of other loaded non-libvirt code using the schema
> >    validation / catalog functionality inside libxml is even
> >    lower
> >  * The chances of both libvirt and the non-libvirt usage having
> >    their *1st* usage of libxml2 be concurrent is tiny
> 
> Additionaly IIUC this could be problem only when using the embedded
> driver mode as we don't use libxml2 in the exported API

Actually we can trigger the problem easily via the public libvirt API
both locally (using test:///default) and remotely (using qemu:///system),
just by using VIR_DOMAIN_DEFINE_VALIDATE concurrently. See the test
program in the bug report:

  
https://gitlab.com/-/project/192693/uploads/72900e26116909000d926de4db7e6b27/badschema.c

It is unlikely something else loaded by libvirtd uses libxml2, but never
say never, as we link to loads of libraries indirectly.

With regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|

Reply via email to