chown kernel/initrd before spawning qemu

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()
This commit is contained in:
Mark McLoughlin 2009-08-06 15:14:19 +01:00
parent f2144a3063
commit c42b397845

View File

@ -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;
}