提交 c42b3978 编写于 作者: M Mark McLoughlin

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()
上级 f2144a30
...@@ -1684,18 +1684,18 @@ static int qemuDomainSetHostdevOwnership(virConnectPtr conn, ...@@ -1684,18 +1684,18 @@ static int qemuDomainSetHostdevOwnership(virConnectPtr conn,
} }
static int qemuDomainSetDiskOwnership(virConnectPtr conn, static int qemuDomainSetFileOwnership(virConnectPtr conn,
virDomainDiskDefPtr def, const char *path,
uid_t uid, gid_t gid) uid_t uid, gid_t gid)
{ {
if (!def->src) if (!path)
return 0; return 0;
VIR_DEBUG("Setting ownership on %s to %d:%d", def->src, uid, gid); VIR_DEBUG("Setting ownership on %s to %d:%d", path, uid, gid);
if (chown(def->src, uid, gid) < 0) { if (chown(path, uid, gid) < 0) {
virReportSystemError(conn, errno, _("cannot set ownership on %s"), virReportSystemError(conn, errno, _("cannot set ownership on %s"),
def->src); path);
return -1; return -1;
} }
return 0; return 0;
...@@ -1725,7 +1725,7 @@ static int qemuDomainSetDeviceOwnership(virConnectPtr conn, ...@@ -1725,7 +1725,7 @@ static int qemuDomainSetDeviceOwnership(virConnectPtr conn,
(def->data.disk->readonly || def->data.disk->shared)) (def->data.disk->readonly || def->data.disk->shared))
return 0; return 0;
return qemuDomainSetDiskOwnership(conn, def->data.disk, uid, gid); return qemuDomainSetFileOwnership(conn, def->data.disk->src, uid, gid);
case VIR_DOMAIN_DEVICE_HOSTDEV: case VIR_DOMAIN_DEVICE_HOSTDEV:
return qemuDomainSetHostdevOwnership(conn, def->data.hostdev, uid, gid); return qemuDomainSetHostdevOwnership(conn, def->data.hostdev, uid, gid);
...@@ -1753,12 +1753,16 @@ static int qemuDomainSetAllDeviceOwnership(virConnectPtr conn, ...@@ -1753,12 +1753,16 @@ static int qemuDomainSetAllDeviceOwnership(virConnectPtr conn,
uid = restore ? 0 : driver->user; uid = restore ? 0 : driver->user;
gid = restore ? 0 : driver->group; 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++) { for (i = 0 ; i < def->ndisks ; i++) {
if (restore && if (restore &&
(def->disks[i]->readonly || def->disks[i]->shared)) (def->disks[i]->readonly || def->disks[i]->shared))
continue; continue;
if (qemuDomainSetDiskOwnership(conn, def->disks[i], uid, gid) < 0) if (qemuDomainSetFileOwnership(conn, def->disks[i]->src, uid, gid) < 0)
return -1; return -1;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册