[libvirt] [PATCH] Avoid libvirtd crash when cgroups is not configured on host

Jim Fehlig jfehlig at novell.com
Mon Mar 22 15:48:26 UTC 2010


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




More information about the libvir-list mailing list