[libvirt] [PATCH 05/12] Introduce a stacked security driver impl for QEMU

Daniel P. Berrange berrange at redhat.com
Wed Jan 20 17:05:41 UTC 2010


On Wed, Jan 20, 2010 at 06:00:06PM +0100, Daniel Veillard wrote:
> On Wed, Jan 20, 2010 at 03:15:02PM +0000, Daniel P. Berrange wrote:
> > * qemu/qemu_conf.h: Add securityPrimaryDriver and
> >   securitySecondaryDriver fields to 'struct qemud_driver'
> > * Makefile.am: Add new files
> > * qemu/qemu_security_stacked.c, qemu/qemu_security_stacked.h: A
> >   simple stacked security driver
> > ---
> >  src/Makefile.am                  |    4 +-
> >  src/qemu/qemu_conf.h             |    2 +
> >  src/qemu/qemu_security_stacked.c |  353 ++++++++++++++++++++++++++++++++++++++
> >  src/qemu/qemu_security_stacked.h |   22 +++
> >  4 files changed, 380 insertions(+), 1 deletions(-)
> >  create mode 100644 src/qemu/qemu_security_stacked.c
> >  create mode 100644 src/qemu/qemu_security_stacked.h
> [...]
> > +++ b/src/qemu/qemu_security_stacked.c
> > @@ -0,0 +1,353 @@
> > +/*
> > + * Copyright (C) 2010 Red Hat, Inc.
> > + *
> > + * This library is free software; you can redistribute it and/or
> > + * modify it under the terms of the GNU Lesser General Public
> > + * License as published by the Free Software Foundation; either
> > + * version 2.1 of the License, or (at your option) any later version.
> > + *
> > + * QEMU stacked security driver
> > + */
> > +
> > +#include <config.h>
> > +#include <selinux/selinux.h>
> > +#include <selinux/context.h>
> 
>   Why do we need to include SELinux headers, the module content seems to
>   be agnostic on the underlying framework (SELinux/Apparmor)

Copy & paste error :-)

> 
> > +static int
> > +qemuSecurityStackedGenLabel(virConnectPtr conn,
> > +                            virDomainObjPtr vm)
> > +{
> > +    int rc = 0;
> > +
> > +    if (driver->securitySecondaryDriver &&
> > +        driver->securitySecondaryDriver->domainGenSecurityLabel &&
> > +        driver->securitySecondaryDriver->domainGenSecurityLabel(conn, vm) < 0)
> > +        rc = -1;
> > +
> > +    if (driver->securityPrimaryDriver &&
> > +        driver->securityPrimaryDriver->domainGenSecurityLabel &&
> > +        driver->securityPrimaryDriver->domainGenSecurityLabel(conn, vm) < 0)
> > +        rc = -1;
> > +
> > +    return rc;
> > +}
> 
>   Okay, so the general pattern is that any stacked driver call will fail
> if any of the subdriver entry point fail, a missing entry point not
> being a failure. I'm still surprized that if both entry point are
> missing we return 0 i.e. success...

If the operation being performed doesn't make sense for a driver it is
fine to skip it without error. This is actually the same semantics we
had before this refactoring, because the QEMU driver always checks for
NULL entry point & skips it without error.

Regards,
Daniel
-- 
|: Red Hat, Engineering, London   -o-   http://people.redhat.com/berrange/ :|
|: http://libvirt.org  -o-  http://virt-manager.org  -o-  http://ovirt.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505  -o-  F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|




More information about the libvir-list mailing list