1. 11 7月, 2016 33 次提交
    • M
      qemuDomainObjPrivateFree: Free @masterKey too · 6b6e2cf9
      Michal Privoznik 提交于
      This one's a bit more complicated. In qemuProcessPrepareDomain()
      a master key for encrypting secret for ciphered disks is created.
      This object lives within qemuDomainObjPrivate object. It is freed
      in qemuProcessStop(), but if nobody calls it (for instance like
      our qemuxml2argvtest does), the key object leaks.
      
      ==17078== 32 bytes in 1 blocks are definitely lost in loss record 633 of 707
      ==17078==    at 0x4C2C070: calloc (vg_replace_malloc.c:623)
      ==17078==    by 0xAD924DF: virAllocN (viralloc.c:191)
      ==17078==    by 0x5050BA6: virCryptoGenerateRandom (qemuxml2argvmock.c:166)
      ==17078==    by 0x453DC8: qemuDomainMasterKeyCreate (qemu_domain.c:678)
      ==17078==    by 0x47A36B: qemuProcessPrepareDomain (qemu_process.c:4913)
      ==17078==    by 0x47C728: qemuProcessCreatePretendCmd (qemu_process.c:5542)
      ==17078==    by 0x433698: testCompareXMLToArgvFiles (qemuxml2argvtest.c:332)
      ==17078==    by 0x4339AC: testCompareXMLToArgvHelper (qemuxml2argvtest.c:413)
      ==17078==    by 0x446E7A: virTestRun (testutils.c:179)
      ==17078==    by 0x445BD9: mymain (qemuxml2argvtest.c:2022)
      ==17078==    by 0x44886F: virTestMain (testutils.c:969)
      ==17078==    by 0x445D9B: main (qemuxml2argvtest.c:2036)
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      6b6e2cf9
    • M
      qemuBuildCpuCommandLine: Don't leak @buf · 87df9452
      Michal Privoznik 提交于
      Just like every other qemuBuild*CommandLine() function, this uses
      a buffer to hold partial cmd line strings too. However, if
      there's an error, the control jumps to 'cleanup' label leaving
      the buffer behind and thus leaking it.
      
      ==2013== 1,006 bytes in 1 blocks are definitely lost in loss record 701 of 711
      ==2013==    at 0x4C29F80: malloc (vg_replace_malloc.c:296)
      ==2013==    by 0x4C2C32F: realloc (vg_replace_malloc.c:692)
      ==2013==    by 0xAD925A8: virReallocN (viralloc.c:245)
      ==2013==    by 0xAD95EA8: virBufferGrow (virbuffer.c:130)
      ==2013==    by 0xAD95F78: virBufferAdd (virbuffer.c:165)
      ==2013==    by 0x5097F5: qemuBuildCpuModelArgStr (qemu_command.c:6339)
      ==2013==    by 0x509CC3: qemuBuildCpuCommandLine (qemu_command.c:6437)
      ==2013==    by 0x51142C: qemuBuildCommandLine (qemu_command.c:9174)
      ==2013==    by 0x47CA3A: qemuProcessCreatePretendCmd (qemu_process.c:5546)
      ==2013==    by 0x433698: testCompareXMLToArgvFiles (qemuxml2argvtest.c:332)
      ==2013==    by 0x4339AC: testCompareXMLToArgvHelper (qemuxml2argvtest.c:413)
      ==2013==    by 0x446E7A: virTestRun (testutils.c:179)
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      87df9452
    • M
      virStorageEncryptionSecretFree: Don't leak secret lookup definition · b0483525
      Michal Privoznik 提交于
      When storage secret is parsed in virStorageEncryptionSecretParse(),
      virSecretLookupParseSecret() which allocates some memory. This is
      however never freed.
      
      ==21711== 134 bytes in 6 blocks are definitely lost in loss record 70 of 85
      ==21711==    at 0x4C29F80: malloc (vg_replace_malloc.c:296)
      ==21711==    by 0xBCA0356: xmlStrndup (in /usr/lib64/libxml2.so.2.9.4)
      ==21711==    by 0xA9F432E: virXMLPropString (virxml.c:479)
      ==21711==    by 0xA9D25B0: virSecretLookupParseSecret (virsecret.c:70)
      ==21711==    by 0xA9D616E: virStorageEncryptionSecretParse (virstorageencryption.c:172)
      ==21711==    by 0xA9D66B2: virStorageEncryptionParseXML (virstorageencryption.c:281)
      ==21711==    by 0xA9D68DF: virStorageEncryptionParseNode (virstorageencryption.c:338)
      ==21711==    by 0xAA12575: virDomainDiskDefParseXML (domain_conf.c:7606)
      ==21711==    by 0xAA2CAC6: virDomainDefParseXML (domain_conf.c:16658)
      ==21711==    by 0xAA2FC75: virDomainDefParseNode (domain_conf.c:17472)
      ==21711==    by 0xAA2FAE4: virDomainDefParse (domain_conf.c:17419)
      ==21711==    by 0xAA2FB72: virDomainDefParseFile (domain_conf.c:17443)
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      b0483525
    • C
      virsh: allow both --uuid and --name at same time · 8f5becf3
      Chen Hanxiao 提交于
      #virsh list --uuid --name
      49c765a0-25e7-40d0-964f-dac99724b32c   c7
      918f1dd6-b19f-412b-ba17-d113bad89af8   f23
      Signed-off-by: NChen Hanxiao <chenhanxiao@gmail.com>
      8f5becf3
    • M
    • M
    • M
      qemu: Add qemuProcessSetupPid() and use it in qemuProcessSetupIOThread() · 71e419bb
      Martin Kletzander 提交于
      Setting up cgroups and other things for all kinds of threads (the
      emulator thread, vCPU threads, I/O threads) was copy-pasted every time
      new thing was added.  Over time each one of those functions changed a
      bit differently.  So create one function that does all that setup and
      start using it, starting with I/O thread setup.  That will shave some
      duplicated code and maybe fix some bugs as well.
      Signed-off-by: NMartin Kletzander <mkletzan@redhat.com>
      71e419bb
    • D
      Fix logic in qemuDomainObjPrivateXMLParseVcpu · ed1fbd7c
      Daniel P. Berrange 提交于
      The code in qemuDomainObjPrivateXMLParseVcpu for parsing
      the 'idstr' string was comparing the overall boolean
      result against 0 which was always true
      
      qemu/qemu_domain.c: In function 'qemuDomainObjPrivateXMLParseVcpu':
      qemu/qemu_domain.c:1482:59: error: comparison of constant '0' with boolean expression is always false [-Werror=bool-compare]
           if ((idstr && virStrToLong_uip(idstr, NULL, 10, &idx)) < 0 ||
                                                                 ^
      
      It was further performing two distinct error checks in
      the same conditional and reporting a single error message,
      which was misleading in one of the two cases.
      
      This splits the conditional check into two parts with
      distinct error messages and fixes the logic error.
      
      Fixes the bug in
      
        commit 5184f398
        Author: Peter Krempa <pkrempa@redhat.com>
        Date:   Fri Jul 1 14:56:14 2016 +0200
      
          qemu: Store vCPU thread ids in vcpu private data objects
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      ed1fbd7c
    • A
      qemu: capabilities: Make virHostCPUGetKVMMaxVCPUs() errors fatal · 4074a82c
      Andrea Bolognani 提交于
      An error in virHostCPUGetKVMMaxVCPUs() means we've been unable
      to access /dev/kvm, or we're running on a platform that doesn't
      support KVM in the first place.
      
      If that's the case, we shouldn't ignore the error and report
      domcapabilities even though we know the user won't be able to
      start any KVM guest.
      4074a82c
    • A
      util: hostcpu: Drop obsolete compatibility code · 1addfa33
      Andrea Bolognani 提交于
      All Linux releases we support (RHEL6 era) include these
      definitions.
      1addfa33
    • A
      util: hostcpu: Add virHostCPUGetKVMMaxVCPUs() stub · 8efca30f
      Andrea Bolognani 提交于
      If we don't HAVE_LINUX_KVM_H, we can't query /dev/kvm to discover
      the limits on the number of vCPUs, so we report an error and
      return a negative value instead.
      8efca30f
    • P
      qemu: Store vCPU thread ids in vcpu private data objects · 5184f398
      Peter Krempa 提交于
      Rather than storing them in an external array store them directly.
      5184f398
    • P
      qemu: Add cpu ID to the vCPU pid list in the status XML · 3f57ce4a
      Peter Krempa 提交于
      Note the vcpu ID so that once we allow non-contiguous vCPU topologies it
      will be possible to pair thread id's with the vcpus.
      3f57ce4a
    • P
      qemu: domain: Extract formating and parsing of vCPU thread ids · b91335af
      Peter Krempa 提交于
      Further patches will be adding index and modifying the source variables
      so this will make it more clear.
      b91335af
    • P
      qemu: domain: Add vcpu private data structure · 2540c932
      Peter Krempa 提交于
      Members will be added in follow-up patches.
      2540c932
    • P
      conf: Add private data for virDomainVcpuDef · 5fe0b6b0
      Peter Krempa 提交于
      Allow to store driver specific data on a per-vcpu basis.
      
      Move of the virDomainDef*Vcpus* functions was necessary as
      virDomainXMLOptionPtr was declared below this block and I didn't want to
      split the function headers.
      5fe0b6b0
    • P
      conf: convert def->vcpus to a array of pointers · 990b06de
      Peter Krempa 提交于
      990b06de
    • P
      tests: qemuxml2xml: Format status XML header dynamically · 7615917a
      Peter Krempa 提交于
      Status XML tests were done by prepending a constant string to an
      existing XML. With the planned changes the header will depend on data
      present in the definition rather than just on the data that was parsed.
      
      The first dynamic element in the header will be the vcpu thread list.
      Reuse and rename qemuXML2XMLPreFormatCallback for gathering the relevant
      data when checking the active XML parsing and formating and pass the
      bitmap to a newly crated header generator.
      7615917a
    • P
      conf: Don't report errors from virDomainDefGetVcpu · 9cc931f0
      Peter Krempa 提交于
      Most callers make sure that it's never called with an out of range vCPU.
      Every other caller reports a different error explicitly. Drop the error
      reporting and clean up some dead code paths.
      9cc931f0
    • P
      c7d5dd39
    • P
      conf: Extract code formatting vCPU info · 54f875dc
      Peter Krempa 提交于
      54f875dc
    • P
      conf: Annotate that private data for objects are not copied · dfe0f423
      Peter Krempa 提交于
      Our copy functions format and parse XML thus are not able to copy data.
      Annotate the private data pointers that this is happening.
      dfe0f423
    • N
      virsh: Introduce vshReadlineParse for improved auto-completion · 3987eba9
      Nishith Shah 提交于
      The new function works as expected, and matches the current level of
      autocomplete offered, along with several other improvements like quotes
      handling, multiple command completion and space handling. Now, it is easy
      to introduce options completer here.
      Signed-off-by: NNishith Shah <nishithshah.2211@gmail.com>
      3987eba9
    • N
      virsh: Add option to suppress error in various functions · aceb6308
      Nishith Shah 提交于
      A bool 'report' has been introduced in various functions, which when set
      to true will produce the error it is suppposed to produce, and when
      false, will suppress the error. These functions are used in the next
      patch for auto-completion.
      Signed-off-by: NNishith Shah <nishithshah.2211@gmail.com>
      aceb6308
    • N
      virsh: Fix variable types in readline generators · d7079ec9
      Nishith Shah 提交于
      Use unsigned int for array indexes and size_t for length variables.
      Signed-off-by: NNishith Shah <nishithshah.2211@gmail.com>
      d7079ec9
    • N
      virsh: Break vshCmddefOptParse into helper functions · 2432521e
      Nishith Shah 提交于
      Decompose vshCmddefOptParse into two helper functions, vshCmddefOptFill
      and vshCmddefCheckInternals.
      
      vshCmddefCheckInternals checks if the internal command definitions are
      correct or not.
      
      vshCmddefOptFill keeps track of the required options and mandatory
      arguments through opts_required and opts_need_arg.
      Signed-off-by: NNishith Shah <nishithshah.2211@gmail.com>
      2432521e
    • F
      bhyve: implement virConnectGetDomainCapabilities · 32916b16
      Fabian Freyer 提交于
      32916b16
    • R
      bhyve: fix bhyveargv2xml custom loader test · 9bbb3676
      Roman Bogorodskiy 提交于
      Before pushing this test, I changed the appropriate args file
      to pet test-wrap-argv.pl, but forgot to change the xml file, so
      update it accordingly.
      9bbb3676
    • F
      bhyve: add tests for bhyveParseCommandLineString · dd23c382
      Fabian Freyer 提交于
      dd23c382
    • F
      bhyve: implement argument parser for loader · 9f22b347
      Fabian Freyer 提交于
      A simple getopt-based argument parser is added for the /usr/sbin/bhyveload
      command, loosely based on its argument parser.
      
      The boot disk is guessed by iterating over all
      disks and matching their sources. If any non-default arguments are found,
      def->os.bootloaderArgs is set accordingly, and the bootloader is treated as a
      custom bootloader.
      
      Custom bootloader are supported by setting the def->os.bootloader and
      def->os.bootloaderArgs accordingly
      
      grub-bhyve is also treated as a custom bootloader. Since we don't get the
      device map in the native format anyways, we can't reconstruct the complete
      boot order. While it is possible to check what type the grub boot disk is by
      checking if the --root argument is "cd" or "hd0,msdos1", and then just use the
      first disk found, implementing the grub-bhyve argument parser as-is in the
      grub-bhyve source would mean adding a dependency to argp or duplicating lots
      of the code of argp. Therefore it's not really worth implementing that now.
      Signed-off-by: NFabian Freyer <fabian.freyer@physik.tu-berlin.de>
      9f22b347
    • F
      bhyve: implement bhyve argument parser · 8151b300
      Fabian Freyer 提交于
      A simpe getopt-based argument parser is added for the /usr/sbin/bhyve command,
      loosely based on its argument parser, which reads the following from the bhyve
      command line string:
      
      * vm name
      * number of vcpus
      * memory size
      * the time offset (UTC or localtime)
      * features:
        * acpi
        * ioapic: While this flag is deprecated in FreeBSD r257423, keep checking for
          it for backwards compatibiility.
      * the domain UUID; if not explicitely given, one will be generated.
      * lpc devices: for now only the com1 and com2 are supported. It is required for
         these to be /dev/nmdm[\d+][AB], and the slave devices are automatically
         inferred from these to be the corresponding end of the virtual null-modem
         cable: /dev/nmdm<N>A <-> /dev/nmdm<N>B
      * PCI devices:
        * Disks: these are numbered in the order they are found, for virtio and ahci
          disks separately. The destination is set to sdX or vdX with X='a'+index;
          therefore only 'z'-'a' disks are supported.
          Disks are considered to be block devices if the path
          starts with /dev, otherwise they are considered to be files.
        * Networks: only tap devices are supported. Since it isn't possible to tell
          the type of the network, VIR_DOMAIN_NET_TYPE_ETHERNET is assumed, since it
          is the most generic. If no mac is specified, one will be generated.
      Signed-off-by: NFabian Freyer <fabian.freyer@physik.tu-berlin.de>
      8151b300
    • F
      bhyve: implement virConnectDomainXMLFromNative · 01163b1b
      Fabian Freyer 提交于
      First, remove escaped newlines and split up the string into an argv-list for
      the bhyve and loader commands, respectively. This is done by iterating over the
      string splitting it by newlines, and then re-iterating over each line,
      splitting it by spaces.
      
      Since this code reuses part of the code of qemu_parse_command.c
      (in bhyveCommandLine2argv), add the appropriate copyright notices.
      Signed-off-by: NFabian Freyer <fabian.freyer@physik.tu-berlin.de>
      01163b1b
    • F
      gnulib: add getopt module · b436a8ae
      Fabian Freyer 提交于
      Unconditionally use gnulib's getopt module. This is needed by the bhyve driver
      to provide a reentrant interface for getopt.
      
      Several gnulib headers rely on features.h being included by ctype.h to provide
      __GNUC_PREREQ, but on systems without glibc, this is not provided. In these
      cases __GNUC_PREREQ gets redefined to 0, which causes build errors from checks
      in src/internal.h.
      Therefore, define __GNUC_PREREQ as early as possible. config-post.h is probably
      the first header that is included, before any other headers.
      b436a8ae
  2. 09 7月, 2016 4 次提交
  3. 08 7月, 2016 2 次提交
  4. 07 7月, 2016 1 次提交