[libvirt] [PATCH] qemu_conf: Check for namespaces availability more wisely

Daniel P. Berrange berrange at redhat.com
Wed Feb 15 10:20:43 UTC 2017


On Wed, Feb 15, 2017 at 11:19:24AM +0100, Michal Privoznik wrote:
> On 02/15/2017 10:43 AM, Daniel P. Berrange wrote:
> > On Wed, Feb 15, 2017 at 10:20:27AM +0100, Michal Privoznik wrote:
> >> The bare fact that mnt namespace is available is not enough for
> >> us to allow/enable qemu namespaces feature. There are other
> >> requirements: we must copy all the ACL & SELinux labels otherwise
> >> we might grant access that is administratively forbidden or vice
> >> versa.
> >> At the same time, the check for namespace prerequisites is moved
> >> from domain startup time to qemu.conf parser as it doesn't make
> >> much sense to allow users to start misconfigured libvirt just to
> >> find out they can't start a single domain.
> >>
> >> Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
> >> ---
> >>  src/qemu/qemu_conf.c   | 20 ++++++++++++++++----
> >>  src/qemu/qemu_conf.h   |  3 ++-
> >>  src/qemu/qemu_domain.c | 43 ++++++++++++++++++++++++++++---------------
> >>  src/qemu/qemu_domain.h |  2 ++
> >>  src/qemu/qemu_driver.c |  2 +-
> >>  5 files changed, 49 insertions(+), 21 deletions(-)
> >>
> 
> 
> >> +bool
> >> +qemuDomainNamespaceAvailable(qemuDomainNamespace ns)
> >> +{
> >> +
> >> +    switch (ns) {
> >> +    case QEMU_DOMAIN_NS_MOUNT:
> >> +#if !defined(__linux__)
> >> +        /* Namespaces are Linux specific. */
> >> +        return false;
> >> +#endif
> >> +#if !defined(HAVE_SYS_ACL_H) || !defined(WITH_SELINUX)
> >> +        /* We can't create the exact copy of paths if either of
> >> +         * these is not available. */
> >> +        return false;
> >> +#endif
> > 
> > Pretty sure this will cause the compiler to complain about
> > unreachable code paths because you'll get
> > 
> >     return false;
> >     return false;
> >     if (virProcessNamespaceAvailable(....)
> 
> Ah. Obviously. What about this?
> 
> +bool
> +qemuDomainNamespaceAvailable(qemuDomainNamespace ns ATTRIBUTE_UNUSED)
> +{
> +#if !defined(__linux__)
> +    /* Namespaces are Linux specific. */
> +    return false;
> +
> +#else /* defined(__linux__) */
> +
> +    switch (ns) {
> +    case QEMU_DOMAIN_NS_MOUNT:
> +# if !defined(HAVE_SYS_ACL_H) || !defined(WITH_SELINUX)
> +        /* We can't create the exact copy of paths if either of
> +         * these is not available. */
> +        return false;
> +# else
> +        if (virProcessNamespaceAvailable(VIR_PROCESS_NAMESPACE_MNT) < 0)
> +            return false;
> +# endif
> +        break;
> +    case QEMU_DOMAIN_NS_LAST:
> +        break;
> +    }
> +
> +    return true;
> +#endif /* defined(__linux__) */
> +}
> +

ACK that looks fine.

Regards,
Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://entangle-photo.org       -o-    http://search.cpan.org/~danberr/ :|




More information about the libvir-list mailing list