1. 24 6月, 2016 2 次提交
    • J
      qemu: Add new secret info type · dc428f45
      John Ferlan 提交于
      Add 'encinfo' to the extended disk structure. This will contain the
      encryption secret (if present).
      Signed-off-by: NJohn Ferlan <jferlan@redhat.com>
      dc428f45
    • J
      secret: Move virStorageSecretType and rename · 1eca5f65
      John Ferlan 提交于
      Move the enum into a new src/util/virsecret.h, rename it to be
      virSecretLookupType. Add a src/util/virsecret.h in order to perform
      a couple of simple operations on the secret XML and virSecretLookupTypeDef
      for clearing and copying.
      
      This includes quite a bit of collateral damage, but the goal is to remove
      the "virStorage*" and replace with the virSecretLookupType so that it's
      easier to to add new lookups that aren't necessarily storage pool related.
      Signed-off-by: NJohn Ferlan <jferlan@redhat.com>
      1eca5f65
  2. 23 6月, 2016 1 次提交
  3. 22 6月, 2016 2 次提交
  4. 20 6月, 2016 1 次提交
  5. 18 6月, 2016 1 次提交
    • A
      qemu: Permit PCI-free aarch64 mach-virt guests · 86a68bdb
      Andrea Bolognani 提交于
      There has been some progress lately in enabling virtio-pci on
      aarch64 guests; however, guest OS support is still spotty at best,
      so most guests are going to be using virtio-mmio instead.
      
      Currently, mach-virt guests are closely modeled after q35 guests,
      and that includes always adding a dmi-to-pci-bridge that's just
      impossible to get rid of. While that's acceptable (if suboptimal)
      for q35, where you will always need some kind of PCI device anyway,
      mach-virt guests should be allowed to avoid it.
      86a68bdb
  6. 17 6月, 2016 5 次提交
    • A
      b31b3eee
    • P
    • P
      conf: Remove pre-calculation of initial memory size · a877a163
      Peter Krempa 提交于
      While we need to know the difference between the total memory stored in
      <memory> and the actual size not included in the possible memory modules
      we can't pre-calculate it reliably. This is due to the fact that
      libvirt's XML is copied via formatting and parsing the XML and the
      initial memory size can be reliably calculated only when certain
      conditions are met due to backwards compatibility.
      
      This patch removes the storage of 'initial_memory' and fixes the helpers
      to recalculate the initial memory size all the time from the total
      memory size. This conversion is possible when we also make sure that
      memory hotplug accounts properly for the update of the total memory size
      and thus the helpers for inserting and removing memory devices need to
      be tweaked too.
      
      This fixes a bug where a cold-plug and cold-remove of a memory device
      would increase the size reported in <memory> in the XML by the size of
      the memory device. This would happen as the persistent definition is
      copied before attaching the device and this would lead to the loss of
      data in 'initial_memory'.
      
      Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1344892
      a877a163
    • L
      qemu: don't add pci-bridge to Q35/arm domains unless it's needed · d5fb8f45
      Laine Stump 提交于
      Until now, a Q35 domain (or arm/virt, or any other domain that has a
      pcie-root bus) would always have a pci-bridge added, so that there
      would be a hotpluggable standard PCI slot available to plug in any PCI
      devices that might be added. This patch removes the explicit add,
      instead relying on the pci-bridge being auto-added during PCI address
      assignment (it will add a pci-bridge if there are no free slots).
      
      This doesn't eliminate the dmi-to-pci-bridge controller that is
      explicitly added whether or not a standard PCI slot is required (and
      that is almost never used as anything other than a converter between
      pcie.0's PCIe slots and standard PCI). That will be done separately.
      d5fb8f45
    • L
      qemu: don't be as insistent about adding dmi-to-pci-bridge or pci-bridge · 97b215a4
      Laine Stump 提交于
      Previously there was no way to have a Q35 domain that didn't have
      these two controllers. This patch skips their creation as long as
      there are some other kinds of pci controllers at index 1 and 2
      (e.g. some pcie-root-port controllers).
      
      I'm hoping that soon we won't add them at all, plugging all devices
      into auto-added pcie-*-port ports instead, but in the meantime this
      makes it easier to experiment with alternative bus hierarchies.
      97b215a4
  7. 09 6月, 2016 3 次提交
    • P
      vnc: add support for listen type 'socket' · acc83afe
      Pavel Hrdina 提交于
      VNC graphics already supports sockets but only via 'socket' attribute.
      This patch coverts that attribute into listen type 'socket'.
      
      For backward compatibility we need to handle listen type 'socket' and 'socket'
      attribute properly to support old XMLs and new XMLs.  If both are provided they
      have to match, if only one of them is provided we need to be able to parse that
      configuration too.
      
      To not break migration back to old libvirt if the socket is provided by user we
      need to generate migratable XML without the listen element and use only 'socket'
      attribute.
      Signed-off-by: NPavel Hrdina <phrdina@redhat.com>
      acc83afe
    • P
      vnc: rename socketAutogenerated to socketFromConfig · 17271d04
      Pavel Hrdina 提交于
      Even though it's auto-generated it's based on qemu.conf option and listen type
      address already uses "fromConfig" to carry this information.  Following commits
      will convert the socket to listen element so this rename is required because
      there will be also an option to get socket auto-generated independently on the
      qemu.conf option.
      Signed-off-by: NPavel Hrdina <phrdina@redhat.com>
      17271d04
    • M
      qemu: Move channel path generation out of command creation · f670008b
      Martin Kletzander 提交于
      Put it into separate function called qemuDomainPrepareChannel() and call
      it from the new qemuProcessPrepareDomain().
      Signed-off-by: NMartin Kletzander <mkletzan@redhat.com>
      f670008b
  8. 08 6月, 2016 2 次提交
  9. 07 6月, 2016 2 次提交
  10. 23 5月, 2016 1 次提交
  11. 20 5月, 2016 4 次提交
    • J
      qemu: Utilize qemu secret objects for RBD auth/secret · a1344f70
      John Ferlan 提交于
      https://bugzilla.redhat.com/show_bug.cgi?id=1182074
      
      If they're available and we need to pass secrets to qemu, then use the
      qemu domain secret object in order to pass the secrets for RBD volumes
      instead of passing the base64 encoded secret on the command line.
      
      The goal is to make AES secrets the default and have no user interaction
      required in order to allow using the AES mechanism. If the mechanism
      is not available, then fall back to the current plain mechanism using
      a base64 encoded secret.
      
      New APIs:
      
      qemu_domain.c:
        qemuDomainGetSecretAESAlias:
          Generate/return the secret object alias for an AES Secret Info type.
          This will be called from qemuDomainSecretAESSetup.
      
        qemuDomainSecretAESSetup: (private)
          This API handles the details of the generation of the AES secret
          and saves the pieces that need to be passed to qemu in order for
          the secret to be decrypted. The encrypted secret based upon the
          domain master key, an initialization vector (16 byte random value),
          and the stored secret. Finally, the requirement from qemu is the IV
          and encrypted secret are to be base64 encoded.
      
      qemu_command.c:
        qemuBuildSecretInfoProps: (private)
          Generate/return a JSON properties object for the AES secret to
          be used by both the command building and eventually the hotplug
          code in order to add the secret object. Code was designed so that
          in the future perhaps hotplug could use it if it made sense.
      
        qemuBuildObjectSecretCommandLine (private)
          Generate and add to the command line the -object secret for the
          secret. This will be required for the subsequent RBD reference
          to the object.
      
        qemuBuildDiskSecinfoCommandLine (private)
          Handle adding the AES secret object.
      
      Adjustments:
      
      qemu_domain.c:
        The qemuDomainSecretSetup was altered to call either the AES or Plain
        Setup functions based upon whether AES secrets are possible (we have
        the encryption API) or not, we have secrets, and of course if the
        protocol source is RBD.
      
      qemu_command.c:
        Adjust the qemuBuildRBDSecinfoURI API's in order to generate the
        specific command options for an AES secret, such as:
      
          -object secret,id=$alias,keyid=$masterKey,data=$base64encodedencrypted,
                  format=base64
          -drive file=rbd:pool/image:id=myname:auth_supported=cephx\;none:\
                 mon_host=mon1.example.org\:6321,password-secret=$alias,...
      
        where the 'id=' value is the secret object alias generated by
        concatenating the disk alias and "-aesKey0". The 'keyid= $masterKey'
        is the master key shared with qemu, and the -drive syntax will
        reference that alias as the 'password-secret'. For the -drive
        syntax, the 'id=myname' is kept to define the username, while the
        'key=$base64 encoded secret' is removed.
      
        While according to the syntax described for qemu commit '60390a21'
        or as seen in the email archive:
      
          https://lists.gnu.org/archive/html/qemu-devel/2016-01/msg04083.html
      
        it is possible to pass a plaintext password via a file, the qemu
        commit 'ac1d8878' describes the more feature rich 'keyid=' option
        based upon the shared masterKey.
      
      Add tests for checking/comparing output.
      
      NB: For hotplug, since the hotplug code doesn't add command line
          arguments, passing the encoded secret directly to the monitor
          will suffice.
      a1344f70
    • J
      qemu: Introduce qemuDomainSecretSetup · 97868a2b
      John Ferlan 提交于
      Currently just a shim to call qemuDomainSecretPlainSetup, but soon to be more
      97868a2b
    • J
      util: Introduce virCryptoGenerateRandom · 23803250
      John Ferlan 提交于
      Move the logic from qemuDomainGenerateRandomKey into this new
      function, altering the comments, variable names, and error messages
      to keep things more generic.
      
      NB: Although perhaps more reasonable to add soemthing to virrandom.c.
          The virrandom.c was included in the setuid_rpc_client, so I chose
          placement in vircrypto.
      23803250
    • P
  12. 19 5月, 2016 1 次提交
    • C
      qemu: Assign device addresses in PostParse · 5d7314bb
      Cole Robinson 提交于
      This wires up qemuDomainAssignAddresses into the new
      virDomainDefAssignAddressesCallback, so it's always triggered
      via virDomainDefPostParse. We are essentially doing this already
      with open coded calls sprinkled about.
      
      qemu argv parse output changes slightly since previously it wasn't
      hitting qemuDomainAssignAddresses.
      5d7314bb
  13. 18 5月, 2016 1 次提交
    • A
      qemu: Automatically choose usable GIC version · 1a012c9a
      Andrea Bolognani 提交于
      When the <gic/> element in not present in the domain XML, use the
      domain capabilities to figure out what GIC version is usable and
      choose that one automatically.
      
      This allows guests to be created on hardware that only supports
      GIC v3 without having to update virt-manager and similar tools.
      
      Keep using the default GIC version if the <gic/> element has been
      added to the domain XML but no version has been specified, as not
      to break existing guests.
      1a012c9a
  14. 16 5月, 2016 3 次提交
    • J
      secret: Alter virSecretGetSecretString · abd2272c
      John Ferlan 提交于
      Rather than returning a "char *" indicating perhaps some sized set of
      characters that is NUL terminated, alter the function to return 0 or -1
      for success/failure and add two parameters to handle returning the
      buffer and it's size.
      
      The function no longer encodes the returned secret, rather it returns
      the unencoded secret forcing callers to make the necessary adjustments.
      
      Alter the callers to handle the adjusted model.
      Signed-off-by: NJohn Ferlan <jferlan@redhat.com>
      abd2272c
    • P
      qemu: domain: Fix names for functions that clear security info · fb1dddfb
      Peter Krempa 提交于
      They don't free the structure itself so they should be called *Clear
      rather than *Free.
      fb1dddfb
    • P
      secret: util: Refactor virSecretGetSecretString · 1d632c39
      Peter Krempa 提交于
      Call the internal driver callbacks rather than the public APIs to avoid
      calling unnecessarily the error dispatching code and don't overwrite
      the error messages provided by the APIs. They are good enough to
      describe which secret is missing either by UUID or the usage (basically
      name).
      1d632c39
  15. 13 5月, 2016 1 次提交
  16. 12 5月, 2016 1 次提交
  17. 11 5月, 2016 2 次提交
    • L
      conf: log error when incorrect PCI root controller is added to domain · e5aecc2f
      Laine Stump 提交于
      libvirt may automatically add a pci-root or pcie-root controller to a
      domain, depending on the arch/machinetype, and it hopefully always
      makes the right decision about which to add (since in all cases these
      controllers are an implicit part of the virtual machine).
      
      But it's always possible that someone will create a config that
      explicitly supplies the wrong type of PCI controller for the selected
      machinetype. In the past that would lead to an error later when
      libvirt was trying to assign addresses to other devices, for example:
      
        XML error: PCI bus is not compatible with the device at
        0000:00:02.0. Device requires a PCI Express slot, which is not
        provided by bus 0000:00
      
      (that's the error message that appears if you replace the pcie-root
      controller in a Q35 domain with a pci-root controller).
      
      This patch adds a check at the same place that the implicit
      controllers are added (to ensure that the same logic is used to check
      which type of pci root is correct). If a pci controller with index='0'
      is already present, we verify that it is of the model that we would
      have otherwise added automatically; if not, an error is logged:
      
        The PCI controller with index='0' must be " model='pcie-root' for
        this machine type, " but model='pci-root' was found instead.
      
      Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1004602
      e5aecc2f
    • J
      qemu: Add extra checks for secret destroy API's · fc5c1e7f
      John Ferlan 提交于
      Remove the possibility that a NULL hostdev->privateData or a
      disk->privateData could crash libvirtd by checking for NULL
      before dereferencing for the secinfo structure in the
      qemuDomainSecret{Disk|Hostdev}Destroy functions. The hostdevPriv
      could be NULL if qemuProcessNetworkPrepareDevices adds a new
      hostdev during virDomainNetGetActualHostdev that then gets
      inserted via virDomainHostdevInsert. The hostdevPriv was added
      by commit id '27726d8c' and is currently only used by scsi hostdev.
      fc5c1e7f
  18. 09 5月, 2016 2 次提交
  19. 06 5月, 2016 3 次提交
    • J
      qemu: Introduce qemuDomainSecretIV · bead05ea
      John Ferlan 提交于
      Add the data structure and infrastructure to support an initialization
      vector (IV) secrets. The IV secret generation will need to have access
      to the domain private master key, so let's make sure the prepare disk
      and hostdev functions can accept that now.
      
      Anywhere that needs to make a decision over which secret type to use
      in order to fill in or use the IV secret has a switch added.
      Signed-off-by: NJohn Ferlan <jferlan@redhat.com>
      bead05ea
    • J
      qemu: Split out the master key create and write · 608dfc6a
      John Ferlan 提交于
      A recent review of related changes noted that we should split the creation
      (or generation) of the master key into the qemuProcessPrepareDomain and leave
      the writing of the master key for qemuProcessPrepareHost.
      
      Made the adjustment and modified some comments to functions that have
      changed calling parameters, but didn't change the intro doc.
      Signed-off-by: NJohn Ferlan <jferlan@redhat.com>
      608dfc6a
    • J
      qemu: Adjust names of qemuDomainSecretInfoType enums · 70ae856e
      John Ferlan 提交于
      From a review after push, add the "_TYPE" into the name.
      
      Also use qemuDomainSecretInfoType in the struct rather than int
      with the comment field containing the struct name
      Signed-off-by: NJohn Ferlan <jferlan@redhat.com>
      70ae856e
  20. 03 5月, 2016 2 次提交
    • J
      Remove useless os.machine NULL check · f2b15794
      Ján Tomko 提交于
      In qemuDomainDefAddDefaultDevices we check for a non-NULL
      def->os.machine for x86 archs, but not the others.
      
      Moreover, the only caller - qemuDomainDefPostParse
      already checks for it and even then it can happen only
      if /etc/libvirt contains an XML without a machine type.
      f2b15794
    • J
      Introduce qemuDomainMachineIsVirt · 53a868f1
      Ján Tomko 提交于
      Use it everywhere except for virQEMUCapsFillDomainFeatureGICCaps.
      53a868f1