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. 03 6月, 2011 1 次提交
    • 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
  3. 02 6月, 2011 1 次提交
    • 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