2009-08-17 08:08:46 +00:00
|
|
|
From 541cfdf5465ac3bba2c0c0901950547bc6638e47 Mon Sep 17 00:00:00 2001
|
2009-08-06 15:01:49 +00:00
|
|
|
From: Mark McLoughlin <markmc@redhat.com>
|
2009-08-17 08:08:46 +00:00
|
|
|
Date: Thu, 6 Aug 2009 15:14:19 +0100
|
2009-08-06 15:01:49 +00:00
|
|
|
Subject: [PATCH] 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()
|
2009-08-17 08:08:46 +00:00
|
|
|
|
|
|
|
(cherry picked from commit c42b39784534930791d1feb3de859d85a7848168)
|
|
|
|
|
|
|
|
Fedora-patch: libvirt-0.7.0-chown-kernel-initrd-before-spawning-qemu.patch
|
2009-08-06 15:01:49 +00:00
|
|
|
---
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
|
|
|
--
|
|
|
|
1.6.2.5
|
|
|
|
|