Daniel P. Berrange wrote:
On Sun, Mar 21, 2010 at 08:07:15PM -0600, Jim Fehlig wrote:
> commit f034c0bfd7089ba3400b7a44b97540c4a8785e35
> Author: Jim Fehlig <jfehlig(a)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;
>
ACK
Thanks. Pushed.
Jim