[libvirt] [PATCH 6/6] qemu: enable monitor event filtering by name

Daniel P. Berrange berrange at redhat.com
Tue Feb 11 15:20:26 UTC 2014


On Fri, Jan 31, 2014 at 07:12:11PM -0700, Eric Blake wrote:
> Filtering monitor events by name requires tracking the name for
> the duration of the filtering.  In order to free the name, I
> found it easiest to just piggyback on the user's freecb function,
> which gets called when the event is deregistered.
> 
> For events without a name filter, we have the design of multiple
> client registrations sharing a common server registration, because
> the server side uses the same callback function and we reject
> duplicate use of the same function.  But with events in the mix,
> we want to be able to allow the same function pointer to be used
> with more than one event name.  The solution is to tweak the
> duplicate detection code to only act when there is no additional
> filtering; if name filtering is in use, there is exactly one
> client registration per server registration.  Yes, this means
> that there is no longer a bound on the number of server
> registrations possible, so a malicious client could repeatedly
> register for the same name event to exhaust server memory.  On
> the other hand, we already restricted monitor events to require
> write access (compared to normal events only needing read access),
> and separated it into the intentionally unsuported
> libvirt-qemu.so, with documentation that using this function is
> for debug purposes only; so it is not a security risk worth
> worrying about a client trying to abuse multiple registrations.
> 
> * src/conf/domain_event.c (virDomainQemuMonitorEventData): New
> struct.
> (virDomainQemuMonitorEventFilter)
> (virDomainQemuMonitorEventCleanup): New functions.
> (virDomainQemuMonitorEventDispatchFunc)
> (virDomainQemuMonitorEventStateRegisterID): Use new struct.
> * src/conf/object_event.c (virObjectEventCallbackListCount)
> (virObjectEventCallbackListAddID)
> (virObjectEventCallbackListRemoveID)
> (virObjectEventCallbackListMarkDeleteID): Drop duplicate detection
> when filtering is in effect.
> 
> Signed-off-by: Eric Blake <eblake at redhat.com>
> ---
>  src/conf/domain_event.c | 71 +++++++++++++++++++++++++++++++++++++++++++------
>  src/conf/object_event.c | 40 ++++++++++++++++++----------
>  2 files changed, 89 insertions(+), 22 deletions(-)

I do wonder if we're adding too much functionality / complexity
for an API that we basically don't want people to use in the
common case.

ACK, though personally I wouldn't bother supporting this
feature, nor the following patch.

Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|




More information about the libvir-list mailing list