
On 04/26/2013 03:32 PM, Paolo Bonzini wrote:
Il 20/04/2013 11:11, Paolo Bonzini ha scritto:
The <interface type='bridge'> is working mostly because of a peculiar design decision in Linux. Ideally, QEMU would run with an empty capability bounding set and would not be able to do any privileged operation (not even by running a helper program). This is not the case because dropping capabilities from the bounding set requires a capability of its own, CAP_SETPCAP; thus QEMU does *not* run with an empty bounding set if invoked via qemu:///session. This is apparently for security reasons, to avoid that dropping _some_ caps but not all of them lets you exploit untested error paths in suid binaries.
This series lets libvirtd invoke the privileged helper program on its own, which is a cleaner design that would work even if the above Linux quirk was not there. Also, this adds a <target dev='tap0'/> element to the XML of an active domain using <interface type='bridge'>.
Thanks to the patches that have already been committed, the recvfd and virCommand APIs make the task almost trivial.
v1->v2: OOM fix in patch 1, change label name in patch 2, rebase
Please apply. :)
Done. -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org