[libvirt] [PATCH 6/7] Use cgroups for block device whitelisting in QEMU guests

Daniel Veillard veillard at redhat.com
Fri Jul 17 15:15:15 UTC 2009


On Fri, Jul 17, 2009 at 09:04:28AM -0400, Daniel P. Berrange wrote:
> * src/qemu_driver.c: Set a restrictive block device whitelist for
>   all QEMU guests. Update whitelist when hotplugging disks.
> * src/cgroup.h, src/cgroup.c: Add some more convenience methods
>   for dealing with block device whitelists.

> +}

Worth adding a description for this function too, especially the return
value which is not trivial from reading the code.

> +
> +int virCgroupDenyDevicePath(virCgroupPtr group,
> +                             const char *path)
> +{
> +    struct stat sb;
> +
> +    if (stat(path, &sb) < 0)
> +        return -errno;
> +
> +    if (!S_ISCHR(sb.st_mode) && !S_ISBLK(sb.st_mode))
> +        return -EINVAL;
> +
> +    return virCgroupDenyDevice(group,
> +                               S_ISCHR(sb.st_mode) ? 'c' : 'b',
> +                               major(sb.st_rdev),
> +                               minor(sb.st_rdev));
> +}
[...]
> diff --git a/src/qemu_driver.c b/src/qemu_driver.c
> index f6d3f52..33e9cfa 100644
> --- a/src/qemu_driver.c
> +++ b/src/qemu_driver.c
> @@ -1378,12 +1378,19 @@ error:
>      return -1;
>  }
>  
> +static const char *const devs[] = {
> +    "/dev/null", "/dev/full", "/dev/zero",
> +    "/dev/random", "/dev/urandom",
> +    "/dev/ptmx", "/dev/kvm", "/dev/kqemu",
> +};

  Hum, that list sounds a bit arbitrary, this could break for random
reasons  maybe this should be extended through the configuration, I
assume a mismatch may result in domain failing to start or operate
properly, right ?

[...]
> +
> +    rc = virCgroupAllowDeviceMajor(cgroup, 'c', 136);

  Hum, that's a magic number, can we get a meaningful #define


   The idea sounds good but I'm a bit afraid of the inflexibility,
this has the potential of making qemu/kvm far more fragile without
a way to fix this by patching and recompiling.
   Again I'm not a cgroup expert but I feel a bit uneasy, can we get
at least an option to disable it at runtime in the configuration (sorry
if I missed that !) ?

Daniel

-- 
Daniel Veillard      | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
daniel at veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/




More information about the libvir-list mailing list