1. 28 6月, 2011 1 次提交
    • D
      Ensure sanlock socket is labelled with the VM process label · 5247b069
      Daniel P. Berrange 提交于
      The libvirt sanlock plugin is intentionally leaking a file
      descriptor to QEMU. To enable QEMU to use this FD under
      SELinux, it must be labelled correctly. We dont want to use
      the svirt_image_t for this, since QEMU must not be allowed
      to actually use the FD. So instead we label it with svirt_t
      using virSecurityManagerSetProcessFDLabel
      
      * src/locking/domain_lock.c, src/locking/domain_lock.h,
        src/locking/lock_driver.h, src/locking/lock_driver_nop.c,
        src/locking/lock_driver_sanlock.c, src/locking/lock_manager.c,
        src/locking/lock_manager.h: Optionally pass an FD back to
        the hypervisor for security driver labelling
      * src/qemu/qemu_process.c: label the lock manager plugin
        FD with the process label
      5247b069
  2. 25 6月, 2011 1 次提交
    • E
      build: update gnulib for intprops · 89d994ad
      Eric Blake 提交于
      Done as a separate commit to make backporting the next patch easier.
      We are already using "intprops.h", but this makes it explicit.
      
      * .gnulib: Update, for syntax-check fix.
      * bootstrap.conf (gnulib_modules): Make intprops use explicit.
      * src/locking/domain_lock.c (includes): Drop unused header.
      * src/nwfilter/nwfilter_learnipaddr.c (includes): Use "", not <>,
      for gnulib.
      89d994ad
  3. 17 6月, 2011 1 次提交
  4. 03 6月, 2011 5 次提交
    • M
      Make dlopen usage in lock manager conditional · 6b5c589d
      Matthias Bolte 提交于
      This fixes a build failure on MinGW, due to MinGW not supporting dlopen.
      6b5c589d
    • E
      lock: avoid leak on failure · 0a41733c
      Eric Blake 提交于
      Detected by Coverity.  Only possible on OOM situations.
      
      * src/locking/lock_manager.c (virLockManagerPluginNew): Plug leak.
      0a41733c
    • D
      Avoid crash on NULL pointer in lock driver impls during hotplug · eb661ce3
      Daniel P. Berrange 提交于
      When virLockDriverAcquire is invoked during hotplug the state
      parameter will be left as NULL.
      
      * src/locking/lock_driver_nop.c,
        src/locking/lock_driver_sanlock.c: Don't reference NULL state
        parameter
      eb661ce3
    • D
      Fix return value in lock manager hotplug methods · 09240ef1
      Daniel P. Berrange 提交于
      Refactoring of the lock manager hotplug methods lost the
      ret = 0 assignment for successful return path
      
      * src/locking/domain_lock.c: Add missing ret = 0 assignments
      09240ef1
    • D
      Add call to sanlock_restrict() in QEMU lock driver · ebfb8c42
      Daniel P. Berrange 提交于
      In between fork and exec, a connection to sanlock is acquired
      and the socket file descriptor is intionally leaked to the
      child process. sanlock watches this FD for POLL_HANGUP to
      detect when QEMU has exited. We don't want a rogus/compromised
      QEMU from issuing sanlock RPC calls on the leaked FD though,
      since that could be used to DOS other guests. By calling
      sanlock_restrict() on the socket before exec() we can lock
      it down.
      
      * configure.ac: Check for sanlock_restrict API
      * src/locking/domain_lock.c: Restrict lock acquired in
        process startup phase
      * src/locking/lock_driver.h: Add VIR_LOCK_MANAGER_ACQUIRE_RESTRICT
      * src/locking/lock_driver_sanlock.c: Add call to sanlock_restrict
        when requested by VIR_LOCK_MANAGER_ACQUIRE_RESTRICT flag
      ebfb8c42
  5. 02 6月, 2011 4 次提交
    • D
      Add a plugin for the 'sanlock' project · 9f135031
      Daniel P. Berrange 提交于
      Sanlock is a project that implements a disk-paxos locking
      algorithm. This is suitable for cluster deployments with
      shared storage.
      
      * src/Makefile.am: Add dlopen plugin for sanlock
      * src/locking/lock_driver_sanlock.c: Sanlock driver
      * configure.ac: Check for sanlock
      * libvirt.spec.in: Add a libvirt-lock-sanlock RPM
      9f135031
    • D
      Add higher level lock API for domain objects · ad73a937
      Daniel P. Berrange 提交于
      To facilitate use of the locking plugins from hypervisor drivers,
      introduce a higher level API for locking virDomainObjPtr instances.
      In includes APIs targetted to VM startup, and hotplug/unplug
      
      * src/Makefile.am: Add domain lock API
      * src/locking/domain_lock.c, src/locking/domain_lock.h: High
        level API for domain locking
      ad73a937
    • D
      Add a 'nop' lock driver implementation. · db98851c
      Daniel P. Berrange 提交于
      To allow hypervisor drivers to assume that a lock driver impl
      will be guaranteed to exist, provide a 'nop' impl that is
      compiled into the library
      
      * src/Makefile.am: Add nop driver
      * src/locking/lock_driver_nop.c, src/locking/lock_driver_nop.h:
        Nop lock driver implementation
      * src/locking/lock_manager.c: Enable direct access of 'nop'
        driver, instead of dlopen()ing it.
      db98851c
    • D
      Basic framework for lock manager plugins · 6a943419
      Daniel P. Berrange 提交于
      Define the basic framework lock manager plugins. The
      basic plugin API for 3rd parties to implemented is
      defined in
      
        src/locking/lock_driver.h
      
      This allows dlopen()able modules for alternative locking
      schemes, however, we do not install the header. This
      requires lock plugins to be in-tree allowing changing of
      the lock manager plugin API in future.
      
      The libvirt code for loading & calling into plugins
      is in
      
        src/locking/lock_manager.{c,h}
      
      * include/libvirt/virterror.h, src/util/virterror.c: Add
        VIR_FROM_LOCKING
      * src/locking/lock_driver.h: API for lock driver plugins
        to implement
      * src/locking/lock_manager.c, src/locking/lock_manager.h:
        Internal API for managing locking
      * src/Makefile.am: Add locking code
      6a943419