[libvirt] [PATCH] chown kernel/initrd before spawning qemu

Daniel P. Berrange berrange at redhat.com
Thu Aug 6 15:02:07 UTC 2009


On Thu, Aug 06, 2009 at 03:48:44PM +0100, Mark McLoughlin wrote:
> If we're running qemu unprivileged, we need to chown any supplied kernel
> or initrd before spawning it.
> 
> * src/qemu_driver.c: rename qemuDomainSetDiskOwnership() to
>   qemuDomainSetFileOwnership(), pass it a path string instead of a disk
>   definition and use it for chowning the kernel/initrd in
>   qemuDomainSetAllDeviceOwnership()
> ---
>  src/qemu_driver.c |   20 ++++++++++++--------
>  1 files changed, 12 insertions(+), 8 deletions(-)
> 
> diff --git a/src/qemu_driver.c b/src/qemu_driver.c
> index 412b68d..bd58435 100644
> --- a/src/qemu_driver.c
> +++ b/src/qemu_driver.c
> @@ -1684,18 +1684,18 @@ static int qemuDomainSetHostdevOwnership(virConnectPtr conn,
>  
>  }
>  
> -static int qemuDomainSetDiskOwnership(virConnectPtr conn,
> -                                      virDomainDiskDefPtr def,
> +static int qemuDomainSetFileOwnership(virConnectPtr conn,
> +                                      const char *path,
>                                        uid_t uid, gid_t gid)
>  {
>  
> -    if (!def->src)
> +    if (!path)
>          return 0;
>  
> -    VIR_DEBUG("Setting ownership on %s to %d:%d", def->src, uid, gid);
> -    if (chown(def->src, uid, gid) < 0) {
> +    VIR_DEBUG("Setting ownership on %s to %d:%d", path, uid, gid);
> +    if (chown(path, uid, gid) < 0) {
>          virReportSystemError(conn, errno, _("cannot set ownership on %s"),
> -                             def->src);
> +                             path);
>          return -1;
>      }
>      return 0;
> @@ -1725,7 +1725,7 @@ static int qemuDomainSetDeviceOwnership(virConnectPtr conn,
>              (def->data.disk->readonly || def->data.disk->shared))
>              return 0;
>  
> -        return qemuDomainSetDiskOwnership(conn, def->data.disk, uid, gid);
> +        return qemuDomainSetFileOwnership(conn, def->data.disk->src, uid, gid);
>  
>      case VIR_DOMAIN_DEVICE_HOSTDEV:
>          return qemuDomainSetHostdevOwnership(conn, def->data.hostdev, uid, gid);
> @@ -1753,12 +1753,16 @@ static int qemuDomainSetAllDeviceOwnership(virConnectPtr conn,
>      uid = restore ? 0 : driver->user;
>      gid = restore ? 0 : driver->group;
>  
> +    if (qemuDomainSetFileOwnership(conn, def->os.kernel, uid, gid) < 0 ||
> +        qemuDomainSetFileOwnership(conn, def->os.initrd, uid, gid) < 0)
> +        return -1;
> +
>      for (i = 0 ; i < def->ndisks ; i++) {
>          if (restore &&
>              (def->disks[i]->readonly || def->disks[i]->shared))
>              continue;
>  
> -        if (qemuDomainSetDiskOwnership(conn, def->disks[i], uid, gid) < 0)
> +        if (qemuDomainSetFileOwnership(conn, def->disks[i]->src, uid, gid) < 0)
>              return -1;
>      }

ACK

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