[Libvir] Lxc driver patch

Daniel Veillard veillard at redhat.com
Fri Mar 28 13:03:26 UTC 2008


  Patch against CVS version, it tries to avoid 2 issues:
    - problem with global data settings when loading of the driver got
      interrupted. Check more NULLs and reset to NULL, i was getting crashes
      when running the regression tests and the /etc/libvirtd/lxc was not
      accessible.
    - avoid trying to open the driver if not running as root, that's not
      a problem in normal case because the daemon runs as root, but
      when running 'make check' as a normal user libvirtd is run as an
      user and compiling the lxc driver in would break the regression tests

 Dave could you double-check this, hopefully it has no side effect ?

Daniel

-- 
Red Hat Virtualization group http://redhat.com/virtualization/
Daniel Veillard      | virtualization library  http://libvirt.org/
veillard at redhat.com  | libxml GNOME XML XSLT toolkit  http://xmlsoft.org/
http://veillard.com/ | Rpmfind RPM search engine  http://rpmfind.net/
-------------- next part --------------
Index: src/lxc_driver.c
===================================================================
RCS file: /data/cvs/libxen/src/lxc_driver.c,v
retrieving revision 1.2
diff -p -r1.2 lxc_driver.c
*** src/lxc_driver.c	27 Mar 2008 09:34:06 -0000	1.2
--- src/lxc_driver.c	28 Mar 2008 12:53:14 -0000
***************
*** 61,67 ****
  
  static int lxcStartup(void);
  static int lxcShutdown(void);
! static lxc_driver_t *lxc_driver;
  
  /* Functions */
  static int lxcDummyChild( void *argv ATTRIBUTE_UNUSED )
--- 61,67 ----
  
  static int lxcStartup(void);
  static int lxcShutdown(void);
! static lxc_driver_t *lxc_driver = NULL;
  
  /* Functions */
  static int lxcDummyChild( void *argv ATTRIBUTE_UNUSED )
*************** static char *lxcDomainDumpXML(virDomainP
*** 378,383 ****
--- 378,390 ----
  
  static int lxcStartup(void)
  {
+     uid_t uid = getuid();
+ 
+     /* Check that the user is root */
+     if (0 != uid) {
+         return -1;
+     }
+ 
      lxc_driver = calloc(1, sizeof(lxc_driver_t));
      if (NULL == lxc_driver) {
          return -1;
*************** static void lxcFreeDriver(lxc_driver_t *
*** 412,422 ****
  
  static int lxcShutdown(void)
  {
!     lxc_vm_t *vms = lxc_driver->vms;
! 
!     lxcFreeVMs(vms);
      lxc_driver->vms = NULL;
      lxcFreeDriver(lxc_driver);
  
      return 0;
  }
--- 419,430 ----
  
  static int lxcShutdown(void)
  {
!     if (lxc_driver == NULL)
!         return(NULL);
!     lxcFreeVMs(lxc_driver->vms);
      lxc_driver->vms = NULL;
      lxcFreeDriver(lxc_driver);
+     lxc_driver = NULL;
  
      return 0;
  }
*************** static int lxcShutdown(void)
*** 430,435 ****
--- 438,445 ----
   */
  static int
  lxcActive(void) {
+     if (lxc_driver == NULL)
+         return(0);
      /* If we've any active networks or guests, then we
       * mark this driver as active
       */


More information about the libvir-list mailing list