From: Jim Fehlig Date: Mon, 22 Mar 2010 15:42:14 +0000 (-0600) Subject: Avoid libvirtd crash when cgroups is not configured on host X-Git-Tag: v0.8.0~252 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=09fafa1e21d71dbfd51727e20614bf5f7236a339;p=thirdparty%2Flibvirt.git 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 aeec593bb0..ba13065288 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 87777814d6..496d9d308b 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;