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 :|