1. 21 11月, 2014 1 次提交
    • P
      storage: qemu: Fix security labelling of new image chain elements · 7e130e8b
      Peter Krempa 提交于
      When creating a disk image snapshot the libvirt code would blindly copy
      the parents label to the newly created image. This runs into problems
      when you start a VM from an image hosted on NFS (or other storage system
      that doesn't support selinux labels) and the snapshot destination is on
      a storage system that does support selinux labels. Libvirt's code in
      that case generates a different security label for the image hosted on
      NFS. This label is valid only for NFS images and doesn't allow access in
      case of a locally stored image.
      
      To fix this issue libvirt needs to refrain from copying security
      information in cases where the default domain seclabel is a better
      choice.
      
      This patch repurposes the now unused @force argument of
      virStorageSourceInitChainElement to denote whether a copy of the
      security labelling stuff should be attempted or not. This allows to
      fine-control the copy operation for cases where we need to keep the
      label of the old disk vs. the cases where we need to keep the label
      unset to use the default domain imagelabel.
      
      Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1151718
      7e130e8b
  2. 20 11月, 2014 14 次提交
    • E
      build: fix build when not using dbus · be90aa00
      Eric Blake 提交于
      Commit c0e70221 breaks on a machine that lacks dbus headers:
      
      In file included from util/virdbus.c:24:0:
      util/virdbuspriv.h:31:3: error: unknown type name 'dbus_int16_t'
      
      * src/util/virdbuspriv.h (DBusBasicValue): Only provide fallback
      when dbus is compiled.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      be90aa00
    • E
      build: avoid 32-bit failure on older gcc · 0d516839
      Eric Blake 提交于
      On 32-bit platforms with old gcc (hello RHEL 5 gcc 4.1.2), the
      build fails with:
      virsh-domain.c: In function 'cmdBlockCopy':
      virsh-domain.c:2172: warning: comparison is always false due to limited range of data type
      
      Adjust the code to silence the warning.
      
      * tools/virsh-domain.c (cmdBlockCopy): Pacify RHEL 5 gcc.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      0d516839
    • J
      storage: Add thread to refresh for createVport · 512b8747
      John Ferlan 提交于
      https://bugzilla.redhat.com/show_bug.cgi?id=1152382
      
      When libvirt create's the vport (VPORT_CREATE) for the vHBA, there isn't
      enough "time" between the creation and the running of the following
      backend->refreshPool after a backend->startPool in order to find the LU's.
      Population of LU's happens asynchronously when udevEventHandleCallback
      discovers the "new" vHBA port.  Creation of the infrastructure by udev
      is an iterative process creating and discovering actual storage devices and
      adjusting the environment.
      
      Because of the time it takes to discover and set things up, the backend
      refreshPool call done after the startPool call will generally fail to
      find any devices. This leaves the newly started pool appear empty when
      querying via 'vol-list' after startup. The "workaround" has always been
      to run pool-refresh after startup (or any time thereafter) in order to
      find the LU's. Depending on how quickly run after startup, this too may
      not find any LUs in the pool. Eventually though given enough time and
      retries it will find something if LU's exist for the vHBA.
      
      This patch adds a thread to be executed after the VPORT_CREATE which will
      attempt to find the LU's without requiring the external run of refresh-pool.
      It does this by waiting for 5 seconds and searching for the LU's. If any
      are found, then the thread completes; otherwise, it will retry once more
      in another 5 seconds.  If none are found in that second pass, the thread
      gives up.
      
      Things learned while investigating this... No need to try and fill the
      pool too quickly or too many times. Over the course of creation, the udev
      code may 'add', 'change', and 'delete' the same device. So if the refresh
      code runs and finds something, it may display it only to have a subsequent
      refresh appear to "lose" the device. The udev processing doesn't seem to
      have a way to indicate that it's all done with the creation processing of a
      newly found vHBA. Only the Lone Ranger has silver bullets to fix everything.
      512b8747
    • J
      storage: Fix issue finding LU's when block doesn't exist · 20870417
      John Ferlan 提交于
      Fix a problem in the getBlockDevice and processLU where retval initialized
      to zero causing some failures to erroneously continue through to the
      virStorageBackendSCSINewLun with an attempt to find a path for "/dev/(null)".
      This would fail approximately 10 seconds later with debug message:
      
      virStorageBackendSCSINewLun:203 :
           No stable path found for '/dev/(null)' in '/dev/disk/by-path'
      
      The root cause of the issue is for many /sys/bus/scsi/devices/<lun path>
      there is no "block*" device found for the vHBA's, where "<lun path>" are
      the various paths created for the vHBA, such as "17:0:0:0", "17:0:1:0",
      "17:0:2:0", "17:0:3:0", etc.  If the block device isn't found, then the
      directory should just be ignored rather than attempting to process it.
      
      The bug was that in getBlockDevice the assumption was "block" would exist
      and either getNewStyleBlockDevice or getOldStyleBlockDevice would fill in
      @block_device. However, if 'block*' doesn't exist, then the code returned
      NULL for block_device *and* a good (zero) retval value.  This caused the
      processLU code to attempt the virStorageBackendSCSINewLun which failed
      "at some point in time" in the future.
      
      After this change - on test system the refresh-pool didn't have a noticable
      pause of about 20 seconds - it completed within a second since no longer
      was there an attempt/need to find "/dev/(null)".
      
      Additionally, the virStorageBackendSCSIFindLU's shouldn't be declaring
      found unless the processLU actually returns success. This will be
      important in the followup patch which relies on whether a LU was found.
      20870417
    • N
      docs: Remove references to unused libvirt-libvirt.html · 0798efcc
      Nehal J Wani 提交于
      The libvirt-libvirt.html file is no longer generated so
      should not be referenced by the Makefile.am
      0798efcc
    • E
      build: fix build with older dbus headers · c0e70221
      Eric Blake 提交于
      Compilation on a RHEL 5 host failed, due to the older dbus headers
      present on that machine, and triggered by commit 2aa167ca:
      
      util/virdbus.c: In function 'virDBusMessageIterDecode':
      util/virdbus.c:952: error: 'DBusBasicValue' undeclared (first use in this function)
      
      * m4/virt-dbus.m4 (LIBVIRT_CHECK_DBUS): Check for DBusBasicValue.
      * src/util/virdbuspriv.h (DBusBasicValue): Provide fallback.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      c0e70221
    • G
      rpc: do not fail if the pid of the connecting process is not set · 225f4833
      Giuseppe Scrivano 提交于
      getsockopt(sock->fd, SOL_SOCKET, SO_PEERCRED, ...) sets the pid to 0
      when the process that opens the connection is in another container.
      Signed-off-by: NGiuseppe Scrivano <gscrivan@redhat.com>
      225f4833
    • E
      util: don't log failure when older iptables lacks -w · 5bc033e2
      Eric Blake 提交于
      Commit dc33e6e4 caused older platforms like Fedora 20 to emit
      scary log messages at startup:
      
      2014-11-19 23:12:58.800+0000: 28906: error : virCommandWait:2532 : internal error: Child process (/usr/sbin/iptables -w -L -n) unexpected exit status 2: iptables v1.4.19.1: unknown option "-w"
      Try `iptables -h' or 'iptables --help' for more information.
      
      Since we are probing and expect to handle the case where -w is not
      supported, we should not let virCommand log it as an error.
      
      * src/util/virfirewall.c (virFirewallCheckUpdateLock): Handle
      non-zero status ourselves.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      5bc033e2
    • J
      qemu: Really fix crash in tunnelled migration · 800454e4
      Jiri Denemark 提交于
      Oops, I forgot to squash one more instance of the same check in the
      previous commit (v1.2.10-144-g52691f99).
      
      https://bugzilla.redhat.com/show_bug.cgi?id=1147331Signed-off-by: NJiri Denemark <jdenemar@redhat.com>
      800454e4
    • E
      virsh: Fix msg: blockjob is aborted from another client · 8312d44d
      Erik Skultety 提交于
      When a block{pull, copy, commit} is aborted via keyboard interrupt,
      the job is properly canceled followed by proper error message.
      However, when the job receives an abort from another client connected
      to the same domain, the error message incorrectly indicates that
      a blockjob has been finished successfully, though the abort request
      took effect. This patch introduces a new blockjob abort handler, which
      is registered when the client calls block{copy,commit,pull} routine,
      providing its caller the status of the finished blockjob.
      
      Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1135442
      8312d44d
    • J
      qemu: Fix crash in tunnelled migration · 52691f99
      Jiri Denemark 提交于
      Any attempt to start a tunnelled migration with libvirtd that supports
      RDMA migration (specifically commit v1.2.8-226-ged22a474) crashes
      libvirtd on the destination host.
      
      The crash is inevitable because qemuMigrationPrepareAny is always called
      with NULL protocol in case of tunnelled migration.
      
      https://bugzilla.redhat.com/show_bug.cgi?id=1147331Signed-off-by: NJiri Denemark <jdenemar@redhat.com>
      52691f99
    • E
      maint: use portable shell · aca0ae1f
      Eric Blake 提交于
      Reported in https://bugzilla.redhat.com/show_bug.cgi?id=1165827;
      dash complains:
      
      checking for pkcheck... /usr/bin/pkcheck
      checking whether pkcheck supports uid value... yes
      ./configure: 63906: test: xno: unexpected operator
      checking for dtrace... no
      
      * configure.ac: Use '=' not '==' in test.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      aca0ae1f
    • M
      qemu: Drop OVMF whitelist · 36148120
      Michal Privoznik 提交于
      As discussed on the upstream list, it's better not to make this
      kind of predictions in libvirt. It may happen that qemu learns
      how to enable OVMF on other architectures too and we shouldn't
      try to chase that.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      36148120
    • M
      qemu: Support OVMF on armv7l aarch64 guests · 6d8054b6
      Michal Privoznik 提交于
      Currently, we are whitelisting architectures, that we know how to run
      OVMF on. So far, only x86_64 was enabled. However, looking at qemu
      code, the same commandline can be used to enable OVMF for armv7l and
      aarch64.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      6d8054b6
  3. 19 11月, 2014 7 次提交
    • E
      maint: forbid 'int foo = true' · eb909376
      Eric Blake 提交于
      I noticed this while working on qemuDomainGetBlockInfo.  Assigning
      a bool value to an int variable compiles fine, but raises red flags
      on the maintenance front as it becomes too easy to assign -1 or 2
      or any other non-bool value to the same variable.
      
      * cfg.mk (sc_prohibit_int_assign_bool): New rule.
      * src/conf/snapshot_conf.c (virDomainSnapshotRedefinePrep): Fix
      offenders.
      * src/qemu/qemu_driver.c (qemuDomainGetBlockInfo)
      (qemuDomainSnapshotCreateXML): Likewise.
      * src/test/test_driver.c (testDomainSnapshotAlignDisks):
      Likewise.
      * src/util/vircgroup.c (virCgroupSupportsCpuBW): Likewise.
      * src/util/virpci.c (virPCIDeviceBindToStub): Likewise.
      * src/util/virutil.c (virIsCapableVport): Likewise.
      * tools/virsh-domain-monitor.c (cmdDomMemStat): Likewise.
      * tools/virsh-domain.c (cmdBlockResize, cmdScreenshot)
      (cmdInjectNMI, cmdSendKey, cmdSendProcessSignal)
      (cmdDetachInterface): Likewise.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      eb909376
    • E
      virdbus: don't force users to pass int for bool values · 2aa167ca
      Eric Blake 提交于
      Use of an 'int' to represent a 'bool' value is confusing.  Just
      because dbus made the mistake of cementing their 4-byte wire
      format of dbus_bool_t into their API doesn't mean we have to
      repeat the mistake.  With a little bit of finesse, we can
      guarantee that we provide a large-enough value to the DBus
      code, while still copying only the relevant one-byte bool
      to the client code, and isolate the rest of our code base from
      the DBus stupidity.
      
      * src/util/virdbus.c (GET_NEXT_VAL): Add parameter.
      (virDBusMessageIterDecode): Adjust all clients.
      * src/util/virpolkit.c (virPolkitCheckAuth): Use nicer type.
      * tests/virdbustest.c (testMessageSimple, testMessageStruct):
      Test new behavior.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      2aa167ca
    • C
      bac66a60
    • Y
      vbox: fix a bug in _machineStateInactive · 9b7e7e34
      Yohan BELLEGUIC 提交于
      This function returned non-inactive domains instead of active
      domains.  This broke virConnectNumOfDefinedDomains() and
      virConnectListDefinedDomains() functions.
      9b7e7e34
    • A
      network: Add network bandwidth support to ethernet interfaces · 22cff52a
      Anirban Chakraborty 提交于
      Ethernet interfaces in libvirt currently do not support bandwidth setting.
      For example, following xml file for an interface will not apply these
      settings to corresponding qdiscs.
      
          <interface type="ethernet">
            <mac address="02:36:1d:18:2a:e4"/>
            <model type="virtio"/>
            <script path=""/>
            <target dev="tap361d182a-e4"/>
            <bandwidth>
              <inbound average="984" peak="1024" burst="64"/>
              <outbound average="2000" peak="2048" burst="128"/>
            </bandwidth>
          </interface>
      Signed-off-by: NAnirban Chakraborty <abchak@juniper.net>
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      22cff52a
    • M
      docs: Document NVRAM behavior on transient domains · 401702d9
      Michal Privoznik 提交于
      Since 1.2.8 it's possible to use OVMF on domains. Moreover, it's
      possible to have libvirt create NVRAM file per domain. Later,
      when domain is undefined, the file is removed too. However,
      things are a bit complicated when domain's transient. There's no
      undefine to transient domains. There are two options: 1) leave
      the file behind and let mgmt app remove it. 2) remove it
      automatically as domain dies.
      But, in some scenarios mgmt app may want to preserve the file,
      copy it somewhere safe, and then copy it back when the domain is
      starting again. And this wouldn't be possible with case 2). So,
      even though case 1) leaves some files behind (possibly undeleted
      for a long time), the files themselves are small (128K each). And
      data loss is worse than full disk, isn't it?
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      401702d9
    • D
      Remove left over debug in hvsupport.pl script · 6c79469c
      Daniel P. Berrange 提交于
      6c79469c
  4. 15 11月, 2014 18 次提交