[libvirt] [PATCH] 528575 avoid libvirtd crash on LCX domain autostart

Daniel Veillard veillard at redhat.com
Wed Oct 21 11:36:37 UTC 2009


On Wed, Oct 21, 2009 at 07:31:11PM +0900, Ryota Ozaki wrote:
> On Wed, Oct 21, 2009 at 6:55 PM, Daniel P. Berrange <berrange at redhat.com> wrote:
> > On Wed, Oct 21, 2009 at 11:52:42AM +0200, Daniel Veillard wrote:
> >>   https://bugzilla.redhat.com/show_bug.cgi?id=528575
> >>
> >> virsh -c lxc:/// autostart vm1
> >>
> >> crash the daemon because the driver autostartDir is never initialized
> >> and we do a NULL dereference. The enclosed patch is trivial and avoid
> >> the crash, but ...
> >>
> >> [root at paphio ~]# virsh -c lxc:/// dominfo vm1
> >> Id:             -
> >> Name:           vm1
> >> UUID:           d320f760-7541-6633-fd42-4f984fca9f51
> >> OS Type:        exe
> >> State:          shut off
> >> CPU(s):         1
> >> Max memory:     500000 kB
> >> Used memory:    500000 kB
> >> Autostart:      enable
> >>
> >> while the domain is properly flagged as autostarting it doesn't seem to
> >> actually autostart, and the driver->autostartDir directory is not
> >> created on the fly as I would expect, i.e.
> >>   /etc/libvirt/lxc/autostart/
> >> still doesn't exist and the domain is marked as off and Autostart: enable
> >
> > That's because of :
> >
> >> diff --git a/src/lxc/lxc_conf.h b/src/lxc/lxc_conf.h
> >> index 6e4c855..eca8c7c 100644
> >> --- a/src/lxc/lxc_conf.h
> >> +++ b/src/lxc/lxc_conf.h
> >> @@ -36,6 +36,7 @@
> >>  #define LXC_CONFIG_DIR SYSCONF_DIR "/libvirt/lxc"
> >>  #define LXC_STATE_DIR LOCAL_STATE_DIR "/run/libvirt/lxc"
> >>  #define LXC_LOG_DIR LOCAL_STATE_DIR "/log/libvirt/lxc"
> >> +#define LXC_AUTOSTART_DIR LOCAL_STATE_DIR "/libvirt/lxc/autostart"
> >
> > LOCAL_STATE_DIR expands to /var

  Dohhh

> > The autostart dir should be  defined as
> >
> >  #define LXC_AUTOSTART_DIR  LXC_CONFIG_DIR "/autostart"

  and I had the process under gdb, I didn't even looked at the value :-\

> Yes, that's correct. I've confirmed it fixes the defect in my environment.
> So ACK to the revised one.
> 
> BTW, actually I've never used autostart feature though, when autostart-enabled
> domains boot up? 'service libvirtd restart' seems not kicking my lxc...

  Thanks a lot for the quick feedback, enclosed patch applied !

Daniel

-- 
Daniel Veillard      | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
daniel at veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/
-------------- next part --------------
commit 09c64d0072857922aabff90392b3334aa2d1fde5
Author: Daniel Veillard <veillard at redhat.com>
Date:   Wed Oct 21 13:32:20 2009 +0200

    528575 avoid libvirtd crash on LCX domain autostart
    
    https://bugzilla.redhat.com/show_bug.cgi?id=528575
    virsh -c lxc:/// autostart vm1
    was crashing the daemon
    
    * src/lxc/lxc_conf.h src/lxc/lxc_conf.c: initialize the driver
      autostartDir to avoid a NULL reference and implement autostart for LXC

diff --git a/src/lxc/lxc_conf.c b/src/lxc/lxc_conf.c
index de059bd..74dc367 100644
--- a/src/lxc/lxc_conf.c
+++ b/src/lxc/lxc_conf.c
@@ -102,6 +102,9 @@ int lxcLoadDriverConfig(lxc_driver_t *driver)
         goto no_memory;
     if ((driver->logDir = strdup(LXC_LOG_DIR)) == NULL)
         goto no_memory;
+    if ((driver->autostartDir = strdup(LXC_AUTOSTART_DIR)) == NULL)
+        goto no_memory;
+
 
     if ((filename = strdup(SYSCONF_DIR "/libvirt/lxc.conf")) == NULL)
         goto no_memory;
diff --git a/src/lxc/lxc_conf.h b/src/lxc/lxc_conf.h
index 6e4c855..499617f 100644
--- a/src/lxc/lxc_conf.h
+++ b/src/lxc/lxc_conf.h
@@ -36,6 +36,7 @@
 #define LXC_CONFIG_DIR SYSCONF_DIR "/libvirt/lxc"
 #define LXC_STATE_DIR LOCAL_STATE_DIR "/run/libvirt/lxc"
 #define LXC_LOG_DIR LOCAL_STATE_DIR "/log/libvirt/lxc"
+#define LXC_AUTOSTART_DIR LXC_CONFIG_DIR "/autostart"
 
 typedef struct __lxc_driver lxc_driver_t;
 struct __lxc_driver {


More information about the libvir-list mailing list