1. 11 10月, 2013 2 次提交
  2. 10 10月, 2013 6 次提交
  3. 08 10月, 2013 1 次提交
  4. 07 10月, 2013 1 次提交
    • D
      Remove use of virConnectPtr from all remaining nwfilter code · 999d72fb
      Daniel P. Berrange 提交于
      The virConnectPtr is passed around loads of nwfilter code in
      order to provide it as a parameter to the callback registered
      by the virt drivers. None of the virt drivers use this param
      though, so it serves no purpose.
      
      Avoiding the need to pass a virConnectPtr means that the
      nwfilterStateReload method no longer needs to open a bogus
      QEMU driver connection. This addresses a race condition that
      can lead to a crash on startup.
      
      The nwfilter driver starts before the QEMU driver and registers
      some callbacks with DBus to detect firewalld reload. If the
      firewalld reload happens while the QEMU driver is still starting
      up though, the nwfilterStateReload method will open a connection
      to the partially initialized QEMU driver and cause a crash.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      999d72fb
  5. 04 10月, 2013 3 次提交
  6. 03 10月, 2013 3 次提交
    • L
      qemu: check actual netdev type rather than config netdev type during init · 9881bfed
      Laine Stump 提交于
      This resolves:
      
         https://bugzilla.redhat.com/show_bug.cgi?id=1012824
         https://bugzilla.redhat.com/show_bug.cgi?id=1012834
      
      Note that a similar problem was reported in:
      
         https://bugzilla.redhat.com/show_bug.cgi?id=827519
      
      but the fix only worked for <interface type='hostdev'>, *not* for
      <interface type='network'> where the network itself was a pool of
      hostdevs.
      
      The symptom in both cases was this error message:
      
         internal error: Unable to determine device index for network device
      
      In both cases the cause was lack of proper handling for netdevs
      (<interface>) of type='hostdev' when scanning the netdev list looking
      for alias names in qemuAssignDeviceNetAlias() - those that aren't
      type='hostdev' have an alias of the form "net%d", while those that are
      hostdev use "hostdev%d". This special handling was completely lacking
      prior to the fix for Bug 827519 which was:
      
      When searching for the highest alias index, libvirt looks at the alias
      for each netdev and if it is type='hostdev' it ignores the entry. If
      the type is not hostdev, then it expects the "net%d" form; if it
      doesn't find that, it fails and logs the above error message.
      
      That fix works except in the case of <interface type='network'> where
      the network uses hostdev (i.e. the network is a pool of VFs to be
      assigned to the guests via PCI passthrough). In this case, the check
      for type='hostdev' would fail because it was done as:
      
           def->net[i]->type == VIR_DOMAIN_NET_TYPE_HOSTDEV
      
      (which compares what was written in the config) when it actually
      should have been:
      
          virDomainNetGetActualType(def->net[i]) == VIR_DOMAIN_NET_TYPE_HOSTDEV
      
      (which compares the type of netdev that was actually allocated from
      the network at runtime).
      
      Of course the latter wouldn't be of any use if the netdevs of
      type='network' hadn't already acquired their actual network connection
      yet, but manual examination of the code showed that this is never the
      case.
      
      While looking through qemu_command.c, two other places were found to
      directly compare the net[i]->type field rather than getting actualType:
      
      * qemuAssignDeviceAliases() - in this case, the incorrect comparison
        would cause us to create a "net%d" alias for a netdev with
        type='network' but actualType='hostdev'. This alias would be
        subsequently overwritten by the proper "hostdev%d" form, so
        everything would operate properly, but a string would be
        leaked. This patch also fixes this problem.
      
      * qemuAssignDevicePCISlots() - would defer assigning a PCI address to
        a netdev if it was type='hostdev', but not for type='network +
        actualType='hostdev'. In this case, the actual device usually hasn't
        been acquired yet anyway, and even in the case that it has, there is
        no practical difference between assigning a PCI address while
        traversing the netdev list or while traversing the hostdev
        list. Because changing it would be an effective NOP (but potentially
        cause some unexpected regression), this usage was left unchanged.
      9881bfed
    • M
      qemuMonitorJSONSendKey: Avoid double free · 3e8343e1
      Michal Privoznik 提交于
      After successful @cmd construction the memory where @keys points to is
      part of @cmd. Avoid double freeing it.
      3e8343e1
    • M
      qemuMonitorJSONGetVirtType: Fix error message · ec07a9e8
      Michal Privoznik 提交于
      When querying for kvm, we try to find 'enabled' field. Hence the error
      message should report we haven't found 'enabled' and not 'running'
      (which is not even in the reply). Probably a typo or copy-paste error.
      ec07a9e8
  7. 02 10月, 2013 1 次提交
  8. 01 10月, 2013 2 次提交
  9. 30 9月, 2013 1 次提交
  10. 27 9月, 2013 2 次提交
  11. 26 9月, 2013 1 次提交
  12. 25 9月, 2013 17 次提交
    • D
      Fix leak of command line args in qemuParseCommandLine · 145de7b8
      Daniel P. Berrange 提交于
      If qemuParseCommandLine finds an arg it does not understand
      it adds it to the QEMU passthrough custom arg list. If the
      qemuParseCommandLine method hits an error for any reason
      though, it just does 'VIR_FREE(cmd)' on the custom arg list.
      This means all actual args / env vars are leaked. Introduce
      a qemuDomainCmdlineDefFree method to be used for cleanup.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      145de7b8
    • D
      Fix leak in qemuParseCommandLine on OOM · 94e6b94a
      Daniel P. Berrange 提交于
      If the call to virDomainControllerInsert fails in
      qemuParseCommandLine, the controller struct is leaked.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      94e6b94a
    • D
      Fix leak in qemuStringToArgvEnv upon OOM · b391b191
      Daniel P. Berrange 提交于
      The 'qemuStringToArgvEnv' method splits up a string of command
      line env/args to an 'arglist' array. It then copies env vars
      to a 'progenv' array and args to a 'progargv' array. When
      copyin the env vars, it NULL-ifies the element in 'arglist'
      that is copied.
      
      Upon OOM the 'virStringListFree' is called on progenv and
      arglist. Unfortunately, because the elements in 'arglist'
      related to env vars have been set to NULL, the call to
      virStringListFree(arglist) doesn't free anything, even
      though some non-NULL args vars still exist later in the
      array.
      
      To fix this leak, stop NULL-ifying the 'arglist' elements,
      and change the cleanup code to only free elements in the
      'arglist' array, not 'progenv'.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      b391b191
    • D
      Fix missing jump to error cleanup in qemuParseCommandLineDisk · 6bb7f19e
      Daniel P. Berrange 提交于
      In a number of places in qemuParseCommandLineDisk, an error
      is reported, but no 'goto error' jump is used. This causes
      failure to report OOM conditions to the caller.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      6bb7f19e
    • D
      Fix leak in qemuParseCommandLineDisk on OOM · fbf82783
      Daniel P. Berrange 提交于
      If OOM occurs in qemuParseCommandLineDisk some intermediate
      variables will be leaked when parsing Sheepdog or RBD disks.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      fbf82783
    • D
      Fix leak on OOM in qemuBuildCommandLine dealing with sound card · 86139a40
      Daniel P. Berrange 提交于
      The qemuBuildCommandLine code for parsing sound cards will leak
      an intermediate variable if an OOM occurs. Move the free'ing of
      the variable earlier to avoid the leak.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      86139a40
    • D
      Fix failure to honour OOM status in qemuParseNBDString · a72d25f4
      Daniel P. Berrange 提交于
      In qemuParseNBDString, if the virURIParse fails, the
      error is not reported to the caller. Instead execution
      falls through to the non-URI codepath causing memory
      leaks later on.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      a72d25f4
    • D
      Avoid leak in qemuParseRBDString on failure of qemuAddRBDHost · d7e9f9f7
      Daniel P. Berrange 提交于
      If qemuAddRBDHost fails due to parsing problems or OOM, then
      qemuParseRBDString cleanup is skipped causing a memory leak.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      d7e9f9f7
    • D
      Fix leak of address string in qemuDomainPCIAddressGetNextSlot · e7b7a201
      Daniel P. Berrange 提交于
      qemuDomainPCIAddressGetNextSlot has a loop for finding
      compatible PCI buses. In the loop body it creates a
      PCI address string, but never frees this. This causes
      a leak if the loop executes more than one iteration,
      or if a call in the loop body fails.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      e7b7a201
    • L
      qemu: prefer to put a Q35 machine's dmi-to-pci-bridge at 00:1E.0 · 386ebb47
      Laine Stump 提交于
      This resolves one of the issues listed in:
      
         https://bugzilla.redhat.com/show_bug.cgi?id=1003983
      
      00:1E.0 is the location of this controller on at least some actual Q35
      hardware, so we try to replicate the placement. The bridge should work
      just as well in any other location though, so if 00:1E.0 isn't
      available, just allow it to be auto-assigned anywhere appropriate.
      386ebb47
    • L
      qemu: turn if into switch in qemuDomainValidateDevicePCISlotsQ35 · c484fe16
      Laine Stump 提交于
      This will make it simpler to add checks for other types of
      controllers.
      
      This is a prerequisite for patches to resolve:
      
         https://bugzilla.redhat.com/show_bug.cgi?id=1003983
      c484fe16
    • L
      qemu: support ich9-intel-hda audio device · b83d26f6
      Laine Stump 提交于
      This resolves one of the issues in:
      
         https://bugzilla.redhat.com/show_bug.cgi?id=1003983
      
      This device is identical to qemu's "intel-hda" device (known as "ich6"
      in libvirt), but has a different PCI device ID (which matches the ID
      of the hda audio built into the ich9 chipset, of course). It's not
      supported in earlier versions of qemu, so it requires a capability
      bit.
      b83d26f6
    • L
      qemu: replace multiple strcmps with a switch on an enum · 8e0dab3a
      Laine Stump 提交于
      I'm not sure why this code was written to compare the strings that it
      had just retrieved from an enum->string conversion, rather than just
      look at the original enum values, but this yields the same results,
      and is much more efficient (especially as you add more devices).
      
      This is a prerequisite for patches to resolve:
      
         https://bugzilla.redhat.com/show_bug.cgi?id=1003983
      8e0dab3a
    • L
      qemu: allow some PCI devices to be attached to PCIe slots · 07af5192
      Laine Stump 提交于
      Part of the resolution to:
      
         https://bugzilla.redhat.com/show_bug.cgi?id=1003983
      
      Although most devices available in qemu area defined as PCI devices,
      and strictly speaking should only be attached via a PCI slot, in
      practice qemu allows them to be attached to a PCIe slot and sometimes
      this makes sense.
      
      For example, The UHCI and EHCI USB controllers are usually attached
      directly to the PCIe "root complex" (i.e. PCIe slots) on real
      hardware, so that should be possible for a Q35-based qemu virtual
      machine as well.
      
      We still want to prefer a standard PCI slot when auto-assigning
      addresses, though, and in general to disallow attaching PCI devices
      via PCIe slots.
      
      This patch makes that possible by adding a new
      QEMU_PCI_CONNECT_TYPE_EITHER_IF_CONFIG flag. Three things are done
      with this flag:
      
      1) It is set for the "pcie-root" controller
      
      2) qemuCollectPCIAddress() now has a set of nested switches that set
      this "EITHER" flag for devices that we want to allow connecting to
      pcie-root when specifically requested in the config.
      
      3) qemuDomainPCIAddressFlagsCompatible() adds this new flag to the
      "flagsMatchMask" if the address being checked came from config rather
      than being newly auto-allocated by libvirt (this knowledge is
      conveniently already available in the "fromConfig" arg).
      
      Now any device having the EITHER flag set can be connected to
      pcie-root if explicitly requested, but auto-allocated addresses for
      those devices will still be standard PCI slots instead.
      
      This patch only loosens the restrictions on devices that have been
      specifically requested, but the setup is such that it should be fairly
      easy to add new devices.
      07af5192
    • L
      qemu: eliminate redundant if clauses in qemuCollectPCIAddress · fbd9be48
      Laine Stump 提交于
      Replace them with switch cases. This will make it more efficient when
      we add exceptions for more controller types, and other device types.
      
      This is a prerequisite for patches to resolve:
      
         https://bugzilla.redhat.com/show_bug.cgi?id=1003983
      fbd9be48
    • P
      qemu: Wire up better early error reporting · ef29de14
      Peter Krempa 提交于
      The previous patches added infrastructure to report better errors from
      monitor in some cases. This patch finalizes this "feature" by enabling
      this enhanced error reporting on early phases of VM startup. In these
      phases the possibility of qemu producing a useful error message is
      really high compared to running it during the whole life cycle. After
      the start up is complete, the feature is disabled to provide the usual
      error messages so that users are not confused by possibly irrelevant
      messages that may be in the domain log.
      
      The original motivation to do this enhancement is to capture errors when
      using VFIO device passthrough, where qemu reports errors after the
      monitor is initialized and the existing error catching code couldn't
      catch this producing a unhelpful message:
      
       # virsh start test
       error: Failed to start domain test
       error: Unable to read from monitor: Connection reset by peer
      
      With this change, the message is changed to:
      
       # virsh start test
       error: Failed to start domain test
       error: internal error: early end of file from monitor: possible problem:
       qemu-system-x86_64: -device vfio-pci,host=00:1a.0,id=hostdev0,bus=pci.0,addr=0x5: vfio: error, group 8 is not viable, please ensure all devices within the iommu_group are bound to their vfio bus driver.
       qemu-system-x86_64: -device vfio-pci,host=00:1a.0,id=hostdev0,bus=pci.0,addr=0x5: vfio: failed to get group 8
       qemu-system-x86_64: -device vfio-pci,host=00:1a.0,id=hostdev0,bus=pci.0,addr=0x5: Device 'vfio-pci' could not be initialized
      ef29de14
    • P
      qemu: monitor: Produce better errors on monitor hangup · 90139a62
      Peter Krempa 提交于
      Change the monitor error code to add the ability to access the qemu log
      file using a file descriptor so that we can dig in it for a more useful
      error message. The error is now logged on monitor hangups and overwrites
      a possible lesser error. A hangup on the monitor usualy means that qemu
      has crashed and there's a significant chance it produced a useful error
      message.
      
      The functionality will be latent until the next patch.
      90139a62