[libvirt] [PATCH 35/41] remote: change hand written methods to not directly access connection

Daniel P. Berrangé berrange at redhat.com
Mon Jul 29 13:36:30 UTC 2019


On Sun, Jul 28, 2019 at 08:19:40PM +0200, Andrea Bolognani wrote:
> On Tue, 2019-07-23 at 17:03 +0100, Daniel P. Berrangé wrote:
> [...]
> > +++ b/src/remote/remote_daemon_dispatch.c
> > @@ -4210,14 +4128,13 @@ remoteDispatchConnectDomainEventRegister(virNetServerPtr server ATTRIBUTE_UNUSED
> >      daemonClientEventCallbackPtr ref;
> >      struct daemonClientPrivate *priv =
> >          virNetServerClientGetPrivateData(client);
> > -
> > -    if (!priv->conn) {
> > -        virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
> > -        goto cleanup;
> > -    }
> > +    virConnectPtr conn = remoteGetHypervisorConn(client);
> >  
> >      virMutexLock(&priv->lock);
> >  
> > +    if (!conn)
> > +        goto cleanup;
> > +
> 
> Shouldn't this be *before* the virMutexLock() call? As far as I can
> tell, that would match the existing behavior...

Looking at this I think the original code is broken. The "cleanup:"
label calls virMutexUnlock().  So the original code was jumping to
the cleanup label with an unlocked mutex and then unlocking it again.

> The same is true for
> 
>   remoteDispatchConnectDomainEventDeregister()
>   remoteDispatchConnectDomainEventRegisterAny()
>   remoteDispatchConnectDomainEventDeregisterAny()
>   remoteDispatchConnectDomainEventCallbackRegisterAny()
>   remoteDispatchConnectDomainEventCallbackDeregisterAny()
>   remoteDispatchConnectNetworkEventRegisterAny()
>   remoteDispatchConnectNetworkEventDeregisterAny()
>   remoteDispatchConnectStoragePoolEventRegisterAny()
>   remoteDispatchConnectStoragePoolEventDeregisterAny()
>   remoteDispatchConnectNodeDeviceEventRegisterAny()
>   remoteDispatchConnectNodeDeviceEventDeregisterAny()
>   remoteDispatchConnectSecretEventRegisterAny()
>   remoteDispatchConnectSecretEventDeregisterAny()
>   qemuDispatchConnectDomainMonitorEventRegister()
>   qemuDispatchConnectDomainMonitorEventDeregister()
> 
> With either all of them updated, if my understanding of the situation
> as described above is correct, or left as is otherwise,
> 
>   Reviewed-by: Andrea Bolognani <abologna at redhat.com>

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




More information about the libvir-list mailing list