46 lines
1.6 KiB
Diff
46 lines
1.6 KiB
Diff
commit f034c0bfd7089ba3400b7a44b97540c4a8785e35
|
|
Author: Jim Fehlig <jfehlig@novell.com>
|
|
Date: Sun Mar 21 19:59:13 2010 -0600
|
|
|
|
Avoid libvirtd crash when cgroups is not configured on host
|
|
|
|
Invoking virDomainSetMemory() on lxc driver results in libvirtd
|
|
segfault when cgroups has not been configured on the host.
|
|
|
|
Ensure driver->cgroup is non-null before invoking
|
|
virCgroupForDomain(). To prevent similar segfaults in the future,
|
|
ensure driver parameter to virCgroupForDomain() is non-null before
|
|
dereferencing.
|
|
|
|
diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c
|
|
index aeec593..ba13065 100644
|
|
--- a/src/lxc/lxc_driver.c
|
|
+++ b/src/lxc/lxc_driver.c
|
|
@@ -625,6 +625,12 @@ static int lxcDomainSetMemory(virDomainPtr dom, unsigned long newmem) {
|
|
}
|
|
|
|
if (virDomainObjIsActive(vm)) {
|
|
+ if (driver->cgroup == NULL) {
|
|
+ lxcError(VIR_ERR_NO_SUPPORT,
|
|
+ "%s", _("cgroups must be configured on the host"));
|
|
+ goto cleanup;
|
|
+ }
|
|
+
|
|
if (virCgroupForDomain(driver->cgroup, vm->def->name, &cgroup, 0) != 0) {
|
|
lxcError(VIR_ERR_INTERNAL_ERROR,
|
|
_("Unable to get cgroup for %s\n"), vm->def->name);
|
|
diff --git a/src/util/cgroup.c b/src/util/cgroup.c
|
|
index 8777781..496d9d3 100644
|
|
--- a/src/util/cgroup.c
|
|
+++ b/src/util/cgroup.c
|
|
@@ -692,6 +692,9 @@ int virCgroupForDomain(virCgroupPtr driver,
|
|
int rc;
|
|
char *path;
|
|
|
|
+ if (driver == NULL)
|
|
+ return -EINVAL;
|
|
+
|
|
if (virAsprintf(&path, "%s/%s", driver->path, name) < 0)
|
|
return -ENOMEM;
|
|
|