From 09fafa1e21d71dbfd51727e20614bf5f7236a339 Mon Sep 17 00:00:00 2001 From: Jim Fehlig Date: Mon, 22 Mar 2010 09:42:14 -0600 Subject: [PATCH] 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. --- src/lxc/lxc_driver.c | 6 ++++++ src/util/cgroup.c | 3 +++ 2 files changed, 9 insertions(+) diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c index aeec593bb..ba1306528 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 87777814d..496d9d308 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; -- 2.39.5