1. 21 1月, 2016 2 次提交
    • J
      Introduce migration iteration event · 0b50f4a0
      Jiri Denemark 提交于
      The VIR_DOMAIN_EVENT_ID_MIGRATION_ITERATION event will be triggered
      whenever VIR_DOMAIN_JOB_MEMORY_ITERATION changes its value, i.e.,
      whenever a new iteration over guest memory pages is started during
      migration.
      Signed-off-by: NJiri Denemark <jdenemar@redhat.com>
      0b50f4a0
    • D
      qemuDomainReboot: use fakeReboot=true only for acpi mode · e2b86f58
      Dmitry Andreev 提交于
      When acpi is used to reboot/shutdown qemu domain, qemu emits
      SHUTDOWN event. Libvirt uses fakeReboot variable in order to
      differentiate reboot or shutdown. fakeReboot value is reseted
      to false after domain restart/reset.
      
      When mode=agent is used to reboot qemu domain, qemu doesn't emit
      SHUTDOWN event and libvirt doesn't reset fakeReboot value to false.
      In this case next 'shutdown -h now' performs reboot. That's why
      we don't need to set fakeReboot=true for mode=agent.
      Signed-off-by: NJiri Denemark <jdenemar@redhat.com>
      e2b86f58
  2. 20 1月, 2016 10 次提交
  3. 19 1月, 2016 2 次提交
    • M
      virLogManagerDomainReadLogFile: Don't do dummy allocs · c03fbecc
      Michal Privoznik 提交于
      Since we pass dummy variables @fdout and @fdoutlen into
      virNetClientProgramCall() we make it alloc @fdout array (even
      though it's an array of 0 elements since vitlogd can hardly pass
      us some FDs at this stage). Nevertheless, it's an allocation not
      followed by free():
      
      ==29385== 0 bytes in 60 blocks are definitely lost in loss record 2 of 1,009
      ==29385==    at 0x4C2C070: calloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
      ==29385==    by 0x54B99EF: virAllocN (viralloc.c:191)
      ==29385==    by 0x56821B1: virNetClientProgramCall (virnetclientprogram.c:359)
      ==29385==    by 0x563B304: virLogManagerDomainReadLogFile (log_manager.c:272)
      ==29385==    by 0x217CD613: qemuDomainLogContextRead (qemu_domain.c:2485)
      ==29385==    by 0x217EDC76: qemuProcessReadLog (qemu_process.c:1660)
      ==29385==    by 0x217EDE1D: qemuProcessReportLogError (qemu_process.c:1696)
      ==29385==    by 0x217EE8C1: qemuProcessWaitForMonitor (qemu_process.c:1957)
      ==29385==    by 0x217F6636: qemuProcessLaunch (qemu_process.c:4955)
      ==29385==    by 0x217F71A4: qemuProcessStart (qemu_process.c:5152)
      ==29385==    by 0x21846582: qemuDomainObjStart (qemu_driver.c:7396)
      ==29385==    by 0x218467DE: qemuDomainCreateWithFlags (qemu_driver.c:7450)
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      c03fbecc
    • M
      qemuProcessReadLog: Fix memmove arguments · 105b51f4
      Michal Privoznik 提交于
      So I can observe this crasher that with freshly started daemon
      (and virtlogd enabled) I am trying to startup a domain that
      immediately dies (because it's said to use huge pages but I
      haven't allocated a single one in the pool). Hardly reproducible
      with -O0 or under valgrind. But I just got lucky:
      
      ==20469== Invalid write of size 8
      ==20469==    at 0x4C2E99B: memcpy@GLIBC_2.2.5 (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
      ==20469==    by 0x217EDD07: qemuProcessReadLog (qemu_process.c:1670)
      ==20469==    by 0x217EDE1D: qemuProcessReportLogError (qemu_process.c:1696)
      ==20469==    by 0x217EE8C1: qemuProcessWaitForMonitor (qemu_process.c:1957)
      ==20469==    by 0x217F6636: qemuProcessLaunch (qemu_process.c:4955)
      ==20469==    by 0x217F71A4: qemuProcessStart (qemu_process.c:5152)
      ==20469==    by 0x21846582: qemuDomainObjStart (qemu_driver.c:7396)
      ==20469==    by 0x218467DE: qemuDomainCreateWithFlags (qemu_driver.c:7450)
      ==20469==    by 0x21846845: qemuDomainCreate (qemu_driver.c:7468)
      ==20469==    by 0x5611CD0: virDomainCreate (libvirt-domain.c:6753)
      ==20469==    by 0x125D9A: remoteDispatchDomainCreate (remote_dispatch.h:3613)
      ==20469==    by 0x125CB7: remoteDispatchDomainCreateHelper (remote_dispatch.h:3589)
      ==20469==  Address 0x27a52ad0 is 0 bytes after a block of size 5,584 alloc'd
      ==20469==    at 0x4C29F80: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
      ==20469==    by 0x9B8D1DB: xdr_string (in /lib64/libc-2.21.so)
      ==20469==    by 0x563B39C: xdr_virLogManagerProtocolNonNullString (log_protocol.c:24)
      ==20469==    by 0x563B6B7: xdr_virLogManagerProtocolDomainReadLogFileRet (log_protocol.c:123)
      ==20469==    by 0x164B34: virNetMessageDecodePayload (virnetmessage.c:407)
      ==20469==    by 0x5682360: virNetClientProgramCall (virnetclientprogram.c:379)
      ==20469==    by 0x563B30E: virLogManagerDomainReadLogFile (log_manager.c:272)
      ==20469==    by 0x217CD613: qemuDomainLogContextRead (qemu_domain.c:2485)
      ==20469==    by 0x217EDC76: qemuProcessReadLog (qemu_process.c:1660)
      ==20469==    by 0x217EDE1D: qemuProcessReportLogError (qemu_process.c:1696)
      ==20469==    by 0x217EE8C1: qemuProcessWaitForMonitor (qemu_process.c:1957)
      ==20469==    by 0x217F6636: qemuProcessLaunch (qemu_process.c:4955)
      
      This points to memmove() in qemuProcessReadLog(). Imagine we just
      read the following string from qemu:
      
      "abc\n2016-01-18T09:40:44.022744Z qemu-system-x86_64: Error\n"
      
      After the first pass of the while() loop in the
      qemuProcessReadLog() (in which we have taken the false branch in
      the if) @buf still points to the beginning of the string,
      @filter_next points to the beginning of the second line.  So we
      start second iteration because there is yet another newline
      character at the end. In this iteration @eol points to it
      actually. Now, the control gets inside true branch of if(). Just
      to remind you:
      
      got = 58
      filter_next = buf + 5,
      eol = buf + 58.
      
      Therefore skip = 54 which is correct. The message we want to skip
      is 54 bytes long. However:
      
      memmove(filter_next, eol + 1, (got - skip) +1);
      
      which is
      
      memmove(filter_next, eol + 1, 5)
      
      is obviously wrong as there is only one byte we can access, not 5!
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      105b51f4
  4. 18 1月, 2016 2 次提交
    • M
      Fix make check with gcc version 5 · 4b47f9b8
      Martin Kletzander 提交于
      When building with gcc-5 (particularly gcc-5.3.0 now) and having pdwtags
      installed (package dwarves) make check fails with the following error:
      
        $ make lock_protocol-struct
        GEN      lock_protocol-struct
        --- lock_protocol-structs	2016-01-13 15:04:59.318809607 +0100
        +++ lock_protocol-struct-t3	2016-01-13 15:05:17.703501234 +0100
        @@ -26,10 +26,6 @@
                 virLockSpaceProtocolNonNullString name;
                 u_int                      flags;
         };
        -enum virLockSpaceProtocolAcquireResourceFlags {
        -        VIR_LOCK_SPACE_PROTOCOL_ACQUIRE_RESOURCE_SHARED = 1,
        -        VIR_LOCK_SPACE_PROTOCOL_ACQUIRE_RESOURCE_AUTOCREATE = 2,
        -};
         struct virLockSpaceProtocolAcquireResourceArgs {
                 virLockSpaceProtocolNonNullString path;
                 virLockSpaceProtocolNonNullString name;
        Makefile:10415: recipe for target 'lock_protocol-struct' failed
        make: *** [lock_protocol-struct] Error 1
      
      That happens because without any specific options gcc doesn't keep enum
      information in the resulting binary object.  I managed to isolate the
      parameters of gcc that caused this issue to disappear, however I
      remember that they influenced the resulting binaries quite a bit and
      were definitely not something we would want to add as mandatory to the
      build process.
      
      So to deal with this cleanly, let's take that enum and separate it out
      to its own header file.  Since it is only used in the lockd driver and
      the protocol, lock_driver_lockd.h feels like a suitable name.
      Signed-off-by: NMartin Kletzander <mkletzan@redhat.com>
      4b47f9b8
    • W
      rbd: Set r variable so it can be returned should an error occur · a5a383ad
      Wido den Hollander 提交于
      This was reported in bug #1298024 where r would be filled with the
      return code of rbd_open().
      
      Should rbd_snap_unprotect() fail for any reason the virReportSystemError
      call would return 'Success' since rbd_open() succeeded.
      
      https://bugzilla.redhat.com/show_bug.cgi?id=1298024Signed-off-by: NWido den Hollander <wido@widodh.nl>
      a5a383ad
  5. 15 1月, 2016 6 次提交
  6. 14 1月, 2016 3 次提交
    • J
      Revert "qemu: do not put a task into machine cgroup" · f8f69072
      John Ferlan 提交于
      This reverts commit a41c00b4.
      
      After much testing and upstream discussion this has been deemed to be
      the incorrect operation since it means we no longer have any guarantee
      about which resource controllers the QEMU processes in general are in.
      f8f69072
    • C
      virt-aa-helper: don't deny writes to readonly mounts · c726af2d
      Cédric Bosdonnat 提交于
      There is no need to deny writes on a readonly mount: write still
      won't be accepted, even if the user remounts the folder as RW in
      the guest as qemu sets the 9p mount as ro.
      
      This deny rule was leading to problems for example with readonly /:
      The qemu process had to write to a bunch of files in / like logs,
      sockets, etc. This deny rule was also preventing auditing of these
      denials, making it harder to debug.
      c726af2d
    • J
      conf: Initialize 'deflate' for balloon parse XML · 3e2d6374
      John Ferlan 提交于
      Commit id '7bf3198d' neglected to initialize deflate leading to a
      possibility if model allocation/checks fail, then the VIR_FREE(deflate)
      would be erroneous. Noted by Jan Tomko.
      3e2d6374
  7. 13 1月, 2016 3 次提交
    • M
      qemuProcessCleanupChardevDevice: Don't unlink NULL paths · e988ba94
      Michal Privoznik 提交于
      So, you try to start a domain, but before we even get to the part
      where chardev part of qemu command line is generated (and
      possibly missing path to unix sockets is made up) an error occurs
      which results in calling qemuProcessStop. This will then try to
      clean up the mess and possibly ends up calling unlink(NULL).
      
      ==8085== Thread 3:
      ==8085== Syscall param unlink(pathname) points to unaddressable byte(s)
      ==8085==    at 0xA85EA57: unlink (in /lib64/libc-2.21.so)
      ==8085==    by 0x213D3C24: qemuProcessCleanupChardevDevice (qemu_process.c:2866)
      ==8085==    by 0x558D6B1: virDomainChrDefForeach (domain_conf.c:22924)
      ==8085==    by 0x213DA9AE: qemuProcessStop (qemu_process.c:5326)
      ==8085==    by 0x213DA2F2: qemuProcessStart (qemu_process.c:5190)
      ==8085==    by 0x2142957F: qemuDomainObjStart (qemu_driver.c:7396)
      ==8085==    by 0x214297DB: qemuDomainCreateWithFlags (qemu_driver.c:7450)
      ==8085==    by 0x21429842: qemuDomainCreate (qemu_driver.c:7468)
      ==8085==    by 0x5611B95: virDomainCreate (libvirt-domain.c:6753)
      ==8085==    by 0x125D9A: remoteDispatchDomainCreate (remote_dispatch.h:3613)
      ==8085==    by 0x125CB7: remoteDispatchDomainCreateHelper (remote_dispatch.h:3589)
      ==8085==    by 0x568BF41: virNetServerProgramDispatchCall (virnetserverprogram.c:437)
      ==8085==  Address 0x0 is not stack'd, malloc'd or (recently) free'd
      ==8085==
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      e988ba94
    • J
      xenconfig: check return value of regcomp · 71daae96
      Jim Fehlig 提交于
      Commit ec63000a missed checking the return value of regcomp(),
      which coverity promptly identified.
      71daae96
    • J
      Xen: use correct domctl version in domaininfolist union · 6564de5e
      Jim Fehlig 提交于
      Commmit fd2e3c4c used the domctl version 8 structure for version 9
      in the xen_getdomaininfolist union, resulting in insufficient buffer
      size (and subsequent memory corruption) for the GETDOMAININFOLIST
      ioctl.
      Signed-off-by: NJim Fehlig <jfehlig@suse.com>
      6564de5e
  8. 12 1月, 2016 12 次提交
    • D
      qemu: add support of optional 'autodeflate' attribute · 981c01d4
      Dmitry Andreev 提交于
      Autodeflate can be enabled/disabled for memballon device
      of model 'virtio'.
      
      xml:
      <devices>
        <memballoon model='virtio' autodeflate='on'/>
      </devices>
      
      qemu:
      qemu -device virtio-balloon-pci,...,deflate-on-oom=on
      
      Autodeflate cannot be enabled/disabled for running domain.
      981c01d4
    • D
      qemu: add capability check for memballoon 'deflate-on-oom' feature · 3522a311
      Dmitry Andreev 提交于
      Add appropriate capability check and new virQEMUCaps flag for the new
      virtio balloon feature. QEMU commit with the complete feature description:
      http://git.qemu.org/?p=qemu.git;a=commit;h=e3816255bf4b6377bb405331e2ee0dc14d841b80
      3522a311
    • D
      conf: introduce 'autodeflate' attribute for memballoon device · 7bf3198d
      Dmitry Andreev 提交于
      Excessive memory balloon inflation can cause invocation of OOM-killer,
      when Linux is under severe memory pressure. QEMU memballoon device
      has a feature to release some memory at the last moment before some
      process will be get killed by OOM-killer.
      
      Introduce a new optional balloon device attribute 'autodeflate' to
      enable or disable this feature.
      7bf3198d
    • C
      rpc: socket: Don't repeatedly attempt to launch daemon · 2eb7a975
      Cole Robinson 提交于
      On every socket connect(2) attempt we were re-launching session
      libvirtd, up to 100 times in 5 seconds.
      
      This understandably caused some weird load races and intermittent
      qemu:///session startup failures
      
      https://bugzilla.redhat.com/show_bug.cgi?id=1271183
      2eb7a975
    • C
      rpc: socket: Explicitly error if we exceed retry count · 8da02d52
      Cole Robinson 提交于
      When we autolaunch libvirtd for session URIs, we spin in a retry
      loop waiting for the daemon to start and the connect(2) to succeed.
      
      However if we exceed the retry count, we don't explicitly raise an
      error, which can yield a slew of different error messages elsewhere
      in the code.
      
      Explicitly raise the last connect(2) failure if we run out of retries.
      8da02d52
    • C
      rpc: socket: Minor cleanups · f102c714
      Cole Robinson 提交于
      - Add some debugging
      - Make the loop dependent only on retries
      - Make it explicit that connect(2) success exits the loop
      - Invert the error checking logic
      f102c714
    • R
      Add missing virxdrdefs.h include to log_protocol · bc451c49
      Roman Bogorodskiy 提交于
      Commit 2b6f6ad6 introduced the virxdrdefs.h header with
      common definitions to be included in the protocol files,
      but logging/log_protocol.x was missed, so add it there as well.
      
      Hopefully this fixes build on OS X.
      bc451c49
    • B
      rpc: Don't rewrite msg->fds on every read dispatch · 133c511b
      Ben Gray 提交于
      When we are receiving data in smaller chunks it might happen that
      virNetServerClientDispatchRead() will be called multiple times.  And as
      that happens, if it is a message that also transfer headers, we decode
      the number of them every single time and, unfortunately, also allocate
      the memory for them.  That causes a leak, in the best scenario.
      
      Best viewed with '-w'.
      Signed-off-by: NMartin Kletzander <mkletzan@redhat.com>
      133c511b
    • L
      util: eliminate bogus error log in virNetDevVPortProfileGetStatus · 21e63916
      Laine Stump 提交于
       if instanceId is NULL
      
      When virNetDevVPortProfileGetStatus() was called with instanceId =
      NULL (which is the case for all DISASSOCIATE requests in 802.1Qbh) it
      would log the following error:
      
         Could not find netlink response with expected parameters
      
      even though the disassociate had been successfully completely. Then,
      due to the fortunate coincidence of status having been initialized to
      0 and then not changed when the "failure" was encountered, it would
      still return a status of 0 (PORT_VDP_RESPONSE_SUCCESS), so the caller
      would assume a successful operation.
      
      This would result in a spurious log message though, and would fill in
      LastErrorMessage, so that the API would return that error if it
      happened during cleanup from some other error. That, in turn, would
      lead to an incorrect supposition that the response to the port profile
      disassociate was the cause of the failure.
      
      During debugging, I noticed that the VF in question usually had *no
      uuid* associated with it (big surprise)by the time the disassociate
      completed, so the solution is *not* to send the previous instanceId
      down.
      
      This patch fixes virNetDevVPortProfileGetStatus() to only check the
      VF's uuid in the status if it was given an instanceId to check against
      when originally called. Otherwise it only checks that the particular
      VF is present (it will be).
      
      This does cause a slight difference in behavior - rather than
      returning with status unchanged (and thus always 0) it will actually
      get the IFLA_PORT_RESPONSE. This could lead to revelation of error
      conditions we were previously ignoring. Or not. So far "not".
      21e63916
    • L
      qemu: use enum when setting PCI "multi" value, not 0 or 1 · 47b83037
      Laine Stump 提交于
      Use the VIR_TRISTATE_SWITCH_* enums appropriately.
      
      No functional change.
      47b83037
    • L
      qemu: auto-add a USB2 controller set for Q35 machines · bd04ad42
      Laine Stump 提交于
      Use virDomainDefAddUSBController() to add an EHCI1+UHCI1+UHCI2+UHCI3
      controller set to newly defined Q35 domains that don't have any USB
      controllers defined.
      bd04ad42
    • L
      qemu: define virDomainDevAddUSBController() · 8ebca27b
      Laine Stump 提交于
      This new function will add a single controller of the given model,
      except the case of ich9-usb-ehci1 (the master controller for a USB2
      controller set) in which case a set of related controllers will be
      added (EHCI1, UHCI1, UHCI2, UHCI3). These controllers will not be
      given PCI addresses, but should be otherwise ready to use.
      
      "-1" is allowed for controller model, and means "default for this
      machinetype". This matches the existing practice in
      qemuDomainDefPostParse(), which always adds the default controller
      with model = -1, and relies on the commandline builder to set a model
      (that is wrong, but will be fixed later).
      8ebca27b