1. 14 3月, 2013 6 次提交
  2. 13 3月, 2013 9 次提交
    • D
      Daemonize fuse thread in libvirt_lxc · e31f32c6
      Daniel P. Berrange 提交于
      In some startup failure modes, the fuse thread may get itself
      wedged. This will cause the entire libvirt_lxc process to
      hang trying to the join the thread. There is no compelling
      reason to wait for the thread to exit if the whole process
      is exiting, so just daemonize the fuse thread instead.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      e31f32c6
    • D
      Use separate symbol file for GNUTLS symbols · 83d7e4e4
      Daniel P. Berrange 提交于
      A number of symbols are only present when GNUTLS is enabled.
      Thus we must use a separate libvirt_gnutls.syms file for them
      instead of libvirt_private.syms
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      83d7e4e4
    • D
      Fix missing error dispatch in virDomainLxcEnterNamespace · b5d014c3
      Daniel P. Berrange 提交于
      The virDomainLxcEnterNamespace method mistakenly uses
      virCheckFlags, which returns immediately instead of
      virCheckFlagsGoto which jumps to the error cleanup
      patch where there is a virDispatchError call
      b5d014c3
    • D
      Fix query of LXC security label · a0881019
      Daniel P. Berrange 提交于
      The virDomainGetSecurityLabel method is currently (mistakenly)
      showing the label of the libvirt_lxc process:
      
      ...snip...
      Security model: selinux
      Security DOI:   0
      Security label: system_u:system_r:virtd_t:s0-s0:c0.c1023 (permissive)
      
      when it should be showing the init process label
      
      ...snip...
      Security model: selinux
      Security DOI:   0
      Security label: system_u:system_r:svirt_t:s0:c724,c995 (permissive)
      a0881019
    • D
      Apply security label when entering LXC namespaces · e4e69e89
      Daniel P. Berrange 提交于
      Add a new virDomainLxcEnterSecurityLabel() function as a
      counterpart to virDomainLxcEnterNamespaces(), which can
      change the current calling process to have a new security
      context. This call runs client side, not in libvirtd
      so we can't use the security driver infrastructure.
      
      When entering a namespace, the process spawned from virsh
      will default to running with the security label of virsh.
      The actual desired behaviour is to run with the security
      label of the container most of the time. So this changes
      virsh lxc-enter-namespace command to invoke the
      virDomainLxcEnterSecurityLabel method.
      
      The current behaviour is:
      
      LABEL                             PID TTY          TIME CMD
      system_u:system_r:svirt_lxc_net_t:s0:c0.c1023 1 pts/0 00:00:00 systemd
      system_u:system_r:svirt_lxc_net_t:s0:c0.c1023 3 pts/1 00:00:00 sh
      system_u:system_r:svirt_lxc_net_t:s0:c0.c1023 24 ? 00:00:00 systemd-journal
      system_u:system_r:svirt_lxc_net_t:s0:c0.c1023 29 ? 00:00:00 dhclient
      staff_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 47 ? 00:00:00 ps
      
      Note the ps command is running as unconfined_t,  After this patch,
      
      The new behaviour is this:
      
      virsh -c lxc:/// lxc-enter-namespace dan -- /bin/ps -eZ
      LABEL                             PID TTY          TIME CMD
      system_u:system_r:svirt_lxc_net_t:s0:c0.c1023 1 pts/0 00:00:00 systemd
      system_u:system_r:svirt_lxc_net_t:s0:c0.c1023 3 pts/1 00:00:00 sh
      system_u:system_r:svirt_lxc_net_t:s0:c0.c1023 24 ? 00:00:00 systemd-journal
      system_u:system_r:svirt_lxc_net_t:s0:c0.c1023 32 ? 00:00:00 dhclient
      system_u:system_r:svirt_lxc_net_t:s0:c0.c1023 38 ? 00:00:00 ps
      
      The '--noseclabel' flag can be used to skip security labelling.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      e4e69e89
    • M
      qemu_driver: Try KVM_CAP_MAX_VCPUS only if defined · 3b94239f
      Michal Privoznik 提交于
      With our recent patch (1715c83b) we thrive to get the correct
      number of maximal VCPUs. However, we are using a constant from
      linux/kvm.h which may be not defined in every distro. Hence, we
      should guard usage of the constant with ifdef preprocessor
      directive. This was introduced in kernel:
      
          commit 8c3ba334f8588e1d5099f8602cf01897720e0eca
          Author: Sasha Levin <levinsasha928@gmail.com>
          Date:   Mon Jul 18 17:17:15 2011 +0300
      
          KVM: x86: Raise the hard VCPU count limit
      
          The patch raises the hard limit of VCPU count to 254.
      
          This will allow developers to easily work on scalability
          and will allow users to test high VCPU setups easily without
          patching the kernel.
      
          To prevent possible issues with current setups, KVM_CAP_NR_VCPUS
          now returns the recommended VCPU limit (which is still 64) - this
          should be a safe value for everybody, while a new KVM_CAP_MAX_VCPUS
          returns the hard limit which is now 254.
      
      $ git desc 8c3ba334f
      v3.1-rc7-48-g8c3ba33
      3b94239f
    • P
      virCaps: conf: start splitting out irrelevat data · 27cf98e2
      Peter Krempa 提交于
      The virCaps structure gathered a ton of irrelevant data over time that.
      The original reason is that it was propagated to the XML parser
      functions.
      
      This patch aims to create a new data structure virDomainXMLConf that
      will contain immutable data that are used by the XML parser. This will
      allow two things we need:
      
      1) Get rid of the stuff from virCaps
      
      2) Allow us to add callbacks to check and add driver specific stuff
      after domain XML is parsed.
      
      This first attempt removes pointers to private data allocation functions
      to this new structure and update all callers and function that require
      them.
      27cf98e2
    • D
      Remove hack using existance of an 'identity' string to disable auth · be27de6e
      Daniel P. Berrange 提交于
      Currently the server determines whether authentication of clients
      is complete, by checking whether an identity is set. This patch
      removes that lame hack and replaces it with an explicit method
      for changing the client auth code
      
      * daemon/remote.c: Update for new APis
      * src/libvirt_private.syms, src/rpc/virnetserverclient.c,
        src/rpc/virnetserverclient.h: Remove virNetServerClientGetIdentity
        and virNetServerClientSetIdentity, adding a new method
        virNetServerClientSetAuth.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      be27de6e
    • D
      Add API for thread cancellation · a2997142
      Daniel P. Berrange 提交于
      Add a virThreadCancel function. This functional is inherently
      dangerous and not something we want to use in general, but
      integration with SELinux requires that we provide this stub.
      We leave out any Win32 impl to discourage further use and
      because obviously SELinux isn't enabled on Win32
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      a2997142
  3. 12 3月, 2013 4 次提交
  4. 11 3月, 2013 5 次提交
    • H
      5c86ace1
    • J
      virsh: fix snapshot-create with no xmlfile · 2fc5ff11
      Ján Tomko 提交于
      Properly check the return value of vshCommandOptStringReq for xmlfile:
      * error out on incorrect input (--xmlfile '')
      * use default XML <domainsnapshot/> with no --xmlfile specified
      
      (Broken by commit b2e85855)
      
      Bug: https://bugzilla.redhat.com/show_bug.cgi?id=919826
      2fc5ff11
    • G
      Convert HAVE_SELINUX to WITH_SELINUX · 531b4fe8
      Guido Günther 提交于
      these were missed by 63f18f37
      531b4fe8
    • G
      lxc: Init activeUsbHostdevs · 6082bc27
      Guido Günther 提交于
      otherwise we crash with
      
       #0  virUSBDeviceListFind (list=0x0, dev=dev@entry=0x8193d70) at util/virusb.c:526
       #1  0xb1a4995b in virLXCPrepareHostdevUSBDevices (driver=driver@entry=0x815d9a0, name=0x815dbf8 "debian-700267", list=list@entry=0x81d8f08) at lxc/lxc_hostdev.c:88
       #2  0xb1a49fce in virLXCPrepareHostUSBDevices (def=0x8193af8, driver=0x815d9a0) at lxc/lxc_hostdev.c:261
       #3  virLXCPrepareHostDevices (driver=driver@entry=0x815d9a0, def=0x8193af8) at lxc/lxc_hostdev.c:328
       #4  0xb1a4c5b1 in virLXCProcessStart (conn=0x817d3f8, driver=driver@entry=0x815d9a0, vm=vm@entry=0x8190908, autoDestroy=autoDestroy@entry=false, reason=reason@entry=VIR_DOMAIN_RUNNING_BOOTED)
           at lxc/lxc_process.c:1068
       #5  0xb1a57e00 in lxcDomainStartWithFlags (dom=dom@entry=0x815e460, flags=flags@entry=0) at lxc/lxc_driver.c:1014
       #6  0xb1a57fc3 in lxcDomainStart (dom=0x815e460) at lxc/lxc_driver.c:1046
       #7  0xb79c8375 in virDomainCreate (domain=domain@entry=0x815e460) at libvirt.c:8450
       #8  0x08078959 in remoteDispatchDomainCreate (args=0x81920a0, rerr=0xb65c21d0, client=0xb0d00490, server=<optimized out>, msg=<optimized out>) at remote_dispatch.h:1066
       #9  remoteDispatchDomainCreateHelper (server=0x80c4928, client=0xb0d00490, msg=0xb0d005b0, rerr=0xb65c21d0, args=0x81920a0, ret=0x815d208) at remote_dispatch.h:1044
       #10 0xb7a36901 in virNetServerProgramDispatchCall (msg=0xb0d005b0, client=0xb0d00490, server=0x80c4928, prog=0x80c6438) at rpc/virnetserverprogram.c:432
       #11 virNetServerProgramDispatch (prog=0x80c6438, server=server@entry=0x80c4928, client=0xb0d00490, msg=0xb0d005b0) at rpc/virnetserverprogram.c:305
       #12 0xb7a300a7 in virNetServerProcessMsg (msg=<optimized out>, prog=<optimized out>, client=<optimized out>, srv=0x80c4928) at rpc/virnetserver.c:162
       #13 virNetServerHandleJob (jobOpaque=0xb0d00510, opaque=0x80c4928) at rpc/virnetserver.c:183
       #14 0xb7924f98 in virThreadPoolWorker (opaque=opaque@entry=0x80a94b0) at util/virthreadpool.c:144
       #15 0xb7924515 in virThreadHelper (data=0x80a9440) at util/virthreadpthread.c:161
       #16 0xb7887c39 in start_thread (arg=0xb65c2b70) at pthread_create.c:304
       #17 0xb77eb78e in clone () at ../sysdeps/unix/sysv/linux/i386/clone.S:130
      
      when adding a domain with a usb device. This is Debian bug
      
          http://bugs.debian.org/700267
      6082bc27
    • M
      bandwidth: Require network QoS if interface uses 'floor' · f3fb916d
      Michal Privoznik 提交于
      By current implementation, network inbound is required in order
      to use 'floor' for guaranteeing  minimal throughput. This is so,
      because we want user to tell us the maximal throughput of the
      network instead of finding out ourselves (and detect bogus values
      in case of virtual interfaces). However, we are nowadays
      requiring this only on documentation level. So if user starts a
      domain with 'floor' set on one its interfaces, we silently ignore
      the setting. We should error out instead.
      f3fb916d
  5. 10 3月, 2013 2 次提交
  6. 09 3月, 2013 2 次提交
    • D
      capabilities: add NUMA memory information · d3092c60
      Dusty Mabe 提交于
      'virsh capabilities' will now include a new <memory> element
      per <cell> of the topology, as in:
      
          <topology>
            <cells num='2'>
              <cell id='0'>
                <memory unit='KiB'>12572412</memory>
                <cpus num='12'>
                ...
              </cell>
      Signed-off-by: NEric Blake <eblake@redhat.com>
      d3092c60
    • G
      lxc: include sys/stat.h · c8871d8f
      Guido Günther 提交于
      This fixes the build on Debian Wheezy which otherwise fails with:
      
        CC     libvirt_driver_lxc_impl_la-lxc_process.lo
        lxc/lxc_process.c: In function 'virLXCProcessGetNsInode':
        lxc/lxc_process.c:648:5: error: implicit declaration of function 'stat' [-Werror=implicit-function-declaration]
        lxc/lxc_process.c:648:5: error: nested extern declaration of 'stat' [-Werror=nested-externs]
        cc1: all warnings being treated as errors
      c8871d8f
  7. 08 3月, 2013 12 次提交
    • M
      qemuDomainBlockStatsFlags: Guard disk lookup with a domain job · 5a791c89
      Michal Privoznik 提交于
      When there are two concurrent threads, we may dereference a NULL
      pointer, even though it has been checked before:
      
      1. Thread1: starts executing qemuDomainBlockStatsFlags() with nparams != 0.
                  It finds given disk and successfully pass check for disk->info.alias
                  not being NULL.
      2. Thread2: starts executing qemuDomainDetachDeviceFlags() on the very same
                  disk as Thread1 is working on.
      3. Thread1: gets to qemuDomainObjBeginJob() where it sets a job on a
                  domain.
      4. Thread2: also tries to set a job. However, we are not guaranteed which
                  thread wins. So assume it's Thread2 who can continue.
      5. Thread2: does the actual detach and frees disk->info.alias
      6. Thread2: quits the job
      7. Thread1: now successfully acquires the job, and accesses a NULL pointer.
      5a791c89
    • G
      apparmor: use AppArmorSetFDLabel for both imageFD and tapFD · ce4557c3
      Guannan Ren 提交于
      Rename AppArmorSetImageFDLabel to AppArmorSetFDLabel which could
      be used as a common function for *ALL* fd relabelling in Linux.
      
      In apparmor profile for specific vm with uuid cdbebdfa-1d6d-65c3-be0f-fd74b978a773
      Path: /etc/apparmor.d/libvirt/libvirt-cdbebdfa-1d6d-65c3-be0f-fd74b978a773.files
      The last line is for the tapfd relabelling.
      
       # DO NOT EDIT THIS FILE DIRECTLY. IT IS MANAGED BY LIBVIRT.
        "/var/log/libvirt/**/rhel6qcow2.log" w,
        "/var/lib/libvirt/**/rhel6qcow2.monitor" rw,
        "/var/run/libvirt/**/rhel6qcow2.pid" rwk,
        "/run/libvirt/**/rhel6qcow2.pid" rwk,
        "/var/run/libvirt/**/*.tunnelmigrate.dest.rhel6qcow2" rw,
        "/run/libvirt/**/*.tunnelmigrate.dest.rhel6qcow2" rw,
        "/var/lib/libvirt/images/rhel6u3qcow2.img" rw,
        "/dev/tap45" rw,
      ce4557c3
    • D
      Include pid namespace inode in LXC audit messages · ab1ef3bc
      Daniel P. Berrange 提交于
      To allow the efficient correlation of container audit messages
      with host hosts, include the pid namespace inode in audit
      messages.
      ab1ef3bc
    • D
      Add support for disks backed by plain files in LXC · eaf7d4dd
      Daniel P. Berrange 提交于
      By using a loopback device, disks backed by plain files can
      be made available to LXC containers. We make no attempt to
      auto-detect format if <driver type="raw"/> is not set,
      instead we unconditionally treat that as meaning raw. This
      is to avoid the security issues inherent with format
      auto-detection
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      eaf7d4dd
    • D
      Refactor loop device setup code in LXC · f0bfb630
      Daniel P. Berrange 提交于
      Minor re-factoring of code for setting up loop devices in
      the LXC controller
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      f0bfb630
    • D
      Convert QEMU driver to use virLogProbablyLogMessage · 82793a2a
      Daniel P. Berrange 提交于
      The current QEMU code for skipping log messages only skips over
      'debug' message, switch to virLogProbablyLogMessage to make sure
      it skips over all of them
      82793a2a
    • D
      Improve LXC startup error reporting · 09f5e012
      Daniel P. Berrange 提交于
      Currently we rely on a VIR_ERROR message being logged by the
      virRaiseError function to report LXC startup errors. This gives
      the right message, but is rather ugly and can be truncated
      if lots of log messages are written. Change the LXC controller
      to explicitly print any virErrorPtr message to stderr. Then
      change the driver to skip over anything that looks like a log
      message.
      
      The result is that this
      
      error: Failed to start domain busy
      error: internal error guest failed to start: 2013-03-04 19:46:42.846+0000: 1734: info : libvirt version: 1.0.2
      2013-03-04 19:46:42.846+0000: 1734: error : virFileLoopDeviceAssociate:600 : Unable to open /root/disk.raw: No such file or directory
      
      changes to
      
      error: Failed to start domain busy
      error: internal error guest failed to start: Unable to open /root/disk.raw: No such file or directory
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      09f5e012
    • D
      Add method for checking if a string is (probably) a log message · f3d312f6
      Daniel P. Berrange 提交于
      When reading log output from QEMU/LXC we need to skip over any
      libvirt log messages. Currently the QEMU driver checks for a
      fixed string, but this is better done with a regex. Add a method
      virLogProbablyLogMessage to do a regex check
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      f3d312f6
    • D
      Use VIR_MASS_CLOSE in LXC container startup · 58e0accd
      Daniel P. Berrange 提交于
      In the LXC container startup code when switching stdio
      streams, we call VIR_FORCE_CLOSE on all FDs. This triggers
      a huge number of warnings, but we don't see them because
      stdio is closed at this point. strace() however shows them
      which can confuse people debugging the code. Switch to
      VIR_MASS_CLOSE to avoid this
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      58e0accd
    • D
      Ensure xmlSaveToBuffer is always defined · a66b32d9
      Daniel P. Berrange 提交于
      RHEL4 vintage libxml2 header files are missing xmlSaveToBuffer
      despite the symbol existing in the binary
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      a66b32d9
    • D
      Fix conditional build of virNetDevSetupControlFull · 495e3b2b
      Daniel P. Berrange 提交于
      The virNetDevSetupControlFull function was protected by a
      conditional on SIOCBRADDBR, which is bogus since it does
      not use that symbol. Update the conditionals around all
      callers to do stricter checks to ensure we always build
      succesfully
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      495e3b2b
    • D
      Ensure GET_VLAN_VID_CMD is always defined · 3ed2e545
      Daniel P. Berrange 提交于
      The RHEL4 vintage header files do not define GET_VLAN_VID_CMD.
      Conditionally define it in our source, since the kernel can
      raise a runtime error if it isn't supported
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      3ed2e545