1. 24 1月, 2013 21 次提交
    • D
      Fix leak of securityDriverNames · d200363e
      Daniel P. Berrange 提交于
      When shutting down, the QEMU driver forgot to free the
      securityDriverNames string list
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      d200363e
    • D
      Avoid use of free'd memory in auto destroy callback · 4e4c6620
      Daniel P. Berrange 提交于
      The autodestroy callback code has the following function
      called from a hash iterator
      
        qemuDriverCloseCallbackRun(void *payload,
                                   const void *name,
                                   void *opaque)
        {
          ...
          char *uuidstr = name
          ...
      
          dom = closeDef->cb(data->driver, dom, data->conn);
          if (dom)
              virObjectUnlock(dom);
      
          virHashRemoveEntry(data->driver->closeCallbacks, uuidstr);
        }
      
      The closeDef->cb function may well cause the current callback
      to be removed, if it shuts down 'dom'. As such the use of
      'uuidstr' in virHashRemoveEntry is accessing free'd memory.
      We must make a copy of the uuid str before invoking the
      callback to be safe.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      4e4c6620
    • D
      Ensure nodeinfo struct is initialized to zero · 83b4137d
      Daniel P. Berrange 提交于
      When linuxNodeInfoCPUPopulate() method triggered use of an
      uninitialize value, since it did not initialize the 'sockets'
      field in the virNodeInfoPtr struct:
      
      ==30020== Conditional jump or move depends on uninitialised value(s)
      ==30020==    at 0x5125DBD: linuxNodeInfoCPUPopulate (nodeinfo.c:513)
      ==30020==    by 0x51261A0: nodeGetInfo (nodeinfo.c:884)
      ==30020==    by 0x149B9B10: qemuCapsInit (qemu_capabilities.c:846)
      ==30020==    by 0x14A11B25: qemuCreateCapabilities (qemu_driver.c:424)
      ==30020==    by 0x14A12426: qemuStartup (qemu_driver.c:874)
      ==30020==    by 0x512A7AF: virStateInitialize (libvirt.c:822)
      ==30020==    by 0x40DE04: daemonRunStateInit (libvirtd.c:877)
      ==30020==    by 0x50ADCE5: virThreadHelper (virthreadpthread.c:161)
      ==30020==    by 0x328CA07D14: start_thread (pthread_create.c:308)
      ==30020==    by 0x328C6F246C: clone (clone.S:114)
      (happened twice)
      
              if (socks > nodeinfo->sockets)    <--- here
                  nodeinfo->sockets = socks;
      
      Rather than doing this for each field, just make the caller memset
      the entire struct to zero.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      83b4137d
    • J
      selinux: Properly indent preprocessor directives · 3b35369c
      Jiri Denemark 提交于
      3b35369c
    • J
      apparmor: Avoid freeing uninitialized pointer · d4b7309a
      Jiri Denemark 提交于
      d4b7309a
    • P
      xen: Actually fix the uninitialized variable · 4db3fd74
      Peter Krempa 提交于
      0eedb1d9 fixed the wrong variable
      4db3fd74
    • P
      xen: Initialize variable before using · 0eedb1d9
      Peter Krempa 提交于
      Commit 87b4c10c added code that may call
      the virCapabilitiesClearHostNUMACellCPUTopology function with
      uninitialized second argument. Although the value wouldn't be used some
      compilers whine about that.
      0eedb1d9
    • R
      selinux: Only create the selabel_handle once. · 6159710c
      Richard W.M. Jones 提交于
      According to Eric Paris this is slightly more efficient because it
      only loads the regular expressions in libselinux once.
      6159710c
    • J
      08cb0433
    • J
      util: Need to add virCommandFree() · 96e8565d
      John Ferlan 提交于
      96e8565d
    • J
      storage: Need to add virCommandFree() · 5e556b60
      John Ferlan 提交于
      5e556b60
    • J
      security: Need to add virCommandFree() · a2b36ec5
      John Ferlan 提交于
      a2b36ec5
    • J
      parallels: Resolve some resource leaks · 50dc7015
      John Ferlan 提交于
      Be sure to VIR_FREE(accel) and moved virDomainVideoDefFree() within no_memory
      label to be consistent
      
      Resolve resource leak in parallelsApplyIfaceParams() when the 'oldnet' is
      allocated locally. Also virCommandFree(cmd) as necessary.
      50dc7015
    • P
      test: Add support for thread and core information for the test driver · e3818b2a
      Peter Krempa 提交于
      This patch adds demo processor topology information for the test driver.
      e3818b2a
    • P
      capabilities: Add additional data to the NUMA topology info · 79a003f9
      Peter Krempa 提交于
      This patch adds data gathering to the NUMA gathering files and adds
      support for outputting the data. The test driver and xend driver need to
      be adapted to fill sensible data to the structure in a future patch.
      79a003f9
    • P
      capabilities: Switch CPU data in NUMA topology to a struct · 87b4c10c
      Peter Krempa 提交于
      This will allow storing additional topology data in the NUMA topology
      definition.
      
      This patch changes the storage type and fixes fallout of the change
      across the drivers using it.
      
      This patch also changes semantics of adding new NUMA cell information.
      Until now the data were re-allocated and copied to the topology
      definition. This patch changes the addition function to steal the
      pointer to a pre-allocated structure to simplify the code.
      87b4c10c
    • P
    • P
      schemas: Add schemas for more CPU topology information in the caps XML · 828820e2
      Peter Krempa 提交于
      This patch adds RNG schemas for adding more information in the topology
      output of the NUMA section in the capabilities XML.
      
      The added elements are designed to provide more information about the
      placement and topology of the processors in the system to management
      applications.
      
      A demonstration of supported XML added by this patch:
      <capabilities>
        <host>
          <topology>
            <cells num='3'>
              <cell id='0'>
                <cpus num='4'> <!-- this is node with Hyperthreading -->
                  <cpu id='0' socket_id='0' core_id='0' siblings='0-1'/>
                  <cpu id='1' socket_id='0' core_id='0' siblings='0-1'/>
                  <cpu id='2' socket_id='0' core_id='1' siblings='2-3'/>
                  <cpu id='3' socket_id='0' core_id='1' siblings='2-3'/>
                </cpus>
              </cell>
              <cell id='1'>
                <cpus num='4'> <!-- this is node with modules (Bulldozer) -->
                  <cpu id='4' socket_id='0' core_id='2' siblings='4-5'/>
                  <cpu id='5' socket_id='0' core_id='3' siblings='4-5'/>
                  <cpu id='6' socket_id='0' core_id='4' siblings='6-7'/>
                  <cpu id='7' socket_id='0' core_id='5' siblings='6-7'/>
                </cpus>
               </cell>
              <cell id='2'>
                <cpus num='4'> <!-- this is a normal multi-core node -->
                  <cpu id='8' socket_id='1' core_id='0' siblings='8'/>
                  <cpu id='9' socket_id='1' core_id='1' siblings='9'/>
                  <cpu id='10' socket_id='1' core_id='2' siblings='10'/>
                  <cpu id='11' socket_id='1' core_id='3' siblings='11'/>
                </cpus>
               </cell>
            </cells>
          </topology>
        </host>
      </capabilities>
      
      The socket_id field represents identification of the physical socket the
      CPU is plugged in. This ID may not be identical to the physical socket
      ID reported by the kernel.
      
      The core_id identifies a core within a socket. Also this field may not
      accurately represent physical ID's.
      
      The core_id is guaranteed to be unique within a cell and a socket. There
      may be duplicates between sockets. Only cores sharing core_id within one
      cell and one socket can be considered as threads. Cores sharing core_id
      within sparate cells are distinct cores.
      
      The siblings field is a list of CPU id's the cpu id's the CPU is sibling
      with - thus a thread. The list is in the cpuset format.
      828820e2
    • P
      14940b5e
    • V
      S390: Enhance memballoon handling for virtio-s390 · 053e813a
      Viktor Mihajlovski 提交于
      The way in that memory balloon suppression was handled for S390
      is flawed for a number or reasons.
      1. Just preventing the default balloon to be created in the case
         of VIR_ARCH_S390[X] is not sufficient. An explicit memballoon
         element in the guest definition will still be honored, resulting
         both in a -balloon option and the allocation of a PCI bus address,
         neither being supported.
      2. Prohibiting balloon for S390 altogether at a domain_conf level
         is no good solution either as there's work in progress on the QEMU
         side to implement a virtio-balloon device, although in
         conjunction with a new machine type. Suppressing the balloon
         should therefore be done at the QEMU driver level depending
         on the present capabilities.
      
      Therefore we remove the conditional suppression of the default
      balloon in domain_conf.c.
      Further, we are claiming the memballoon device for virtio-s390
      during device address assignment to prevent it from being considered
      as a PCI device.
      Finally, we suppress the generation of the balloon command line option
      if this is a virtio-s390 machine.
      Signed-off-by: NViktor Mihajlovski <mihajlov@linux.vnet.ibm.com>
      Signed-off-by: NEric Blake <eblake@redhat.com>
      053e813a
    • V
      qemu: Re-add driver unlock to qemuDomainSendKey · 7b3a9f75
      Viktor Mihajlovski 提交于
      Should have been done in commit 56fd5134 already, but was missed
      due to oversight: qemuDomainSendKey didn't release the driver lock
      in its cleanup section. This fixes an issue introduced by commit
      8c5d2bad.
      Signed-off-by: NViktor Mihajlovski <mihajlov@linux.vnet.ibm.com>
      7b3a9f75
  2. 23 1月, 2013 19 次提交
    • P
      conf: Fix usage of virBitmapParse · bf62e995
      Peter Krempa 提交于
      virNetworkObjUpdateParseFile used ',' as the termination character for
      virBitmapParse. This would break if an non-contiguous range would be
      parsed.
      bf62e995
    • P
      util: Fix docs for virBitmapParse · 4004977f
      Peter Krempa 提交于
      This patch changes the name of the @sep argument to @terminator and
      clarifies it's usage. This patch also explicitly documents that
      whitespace can't be used as @terminator as it is skipped multiple times
      in the implementation.
      4004977f
    • O
      rng: Have colorful *.rng with editor · 3f46ce78
      Osier Yang 提交于
      Just add the head line to let the editor know it's XML document.
      3f46ce78
    • M
      qemu_agent: Ignore expected EOFs · d960d06f
      Michal Privoznik 提交于
      https://bugzilla.redhat.com/show_bug.cgi?id=892079
      
      One of my previous patches (f2a4e5f1) tried to fix crashing
      libvirtd on domain detroy. However, we need to copy pattern from
      qemuProcessHandleMonitorEOF() instead of decrementing reference
      counter. The rationale for this is, if qemu process is dying due
      to domain being destroyed, we obtain EOF on both the monitor and
      agent sockets. However, if the exit is expected, qemuProcessStop
      is called, which cleans both agent and monitor sockets up. We
      want qemuAgentClose() to be called iff the EOF is not expected,
      so we don't leak an FD and memory. Moreover, there could be race
      with qemuProcessHandleMonitorEOF() which could have already
      closed the agent socket, in which case we don't want to do
      anything.
      d960d06f
    • J
      virbitmaptest: Resolve Coverity errors · 9ff3876c
      John Ferlan 提交于
      test1: Need to check for bitmap before using as well as free it properly
      test2: need to check for bitsString2 before using it.
      9ff3876c
    • J
      rpc: Revert Coverity tag message · dd36cc3f
      John Ferlan 提交于
      Turns out the fix for VIR_FREE made this particular Coverity tag
      unnecessary, so I'm removing it.
      dd36cc3f
    • J
      lxc_process: Avoid passing NULL iface->iname · 73cdac3f
      John Ferlan 提交于
      A followon to commit id: 68dceb63 - if iface->iname is NULL, then
      neither virNetDevOpenvswitchRemovePort() nor virNetDevVethDelete()
      should be called.  Found by Coverity.
      73cdac3f
    • J
      2e774db8
    • J
      31e0de1a
    • J
      7489a9c3
    • D
      Fix nwfilter driver reload/shutdown handling when unprivileged · abbec81b
      Daniel P. Berrange 提交于
      Although the nwfilter driver skips startup when running in a
      session libvirtd, it did not skip reload or shutdown. This
      caused errors to be reported when sending SIGHUP to libvirtd,
      and caused an abort() in libdbus on shutdown due to trying
      to remove a dbus filter that was never added
      abbec81b
    • E
      build: allow virObject to have no parent · 682c79c4
      Eric Blake 提交于
      When building with static analysis enabled, we turn on attribute
      nonnull checking.  However, this caused the build to fail with:
      
      ../../src/util/virobject.c: In function 'virObjectOnceInit':
      ../../src/util/virobject.c:55:40: error: null argument where non-null required (argument 1) [-Werror=nonnull]
      
      Creation of the virObject class is the one instance where the
      parent class is allowed to be NULL.  Making things conditional
      will let us keep static analysis checking for all other .c file
      callers, without breaking the build on this one exception.
      
      * src/util/virobject.c: Define witness.
      * src/util/virobject.h (virClassNew): Use it to force most callers
      to pass non-null parameter.
      682c79c4
    • A
      qemu: Support ram bar size for qxl devices · 55bfd020
      Alon Levy 提交于
      Adds a "ram" attribute globally to the video.model element, that changes
      the resulting qemu command line only if video.type == "qxl".
      
      <video>
        <model type='qxl' ram='65536' vram='65536' heads='1'/>
      </video>
      
      That attribute gets a default value of 64*1024. The schema is unchanged
      for other video element types.
      
      The resulting qemu command line change is the addition of
      
      -global qxl-vga.ram_size=<ram>*1024
      
      or
      
      -global qxl.ram_size=<ram>*1024
      
      For the main and secondary qxl devices respectively.
      
      The default for the qxl ram bar is 64*1024 kilobytes (the same as the
      default qxl vram bar size).
      55bfd020
    • J
      viralloc: Adjust definition of VIR_FREE() for Coverity · c9a85af3
      John Ferlan 提交于
      The Coverity static analyzer was generating many false positives for the
      unary operation inside the VIR_FREE() definition as it was trying to evaluate
      the else portion of the "?:" even though the if portion was (1).
      Signed-off-by: NEric Blake <eblake@redhat.com>
      c9a85af3
    • P
      23b9502b
    • P
      conf: Check if number of vCPUs fits in the storage variable · c58e1f4d
      Peter Krempa 提交于
      The count of vCPUs for a domain is extracted as a usingned long variable
      but is stored in a unsigned short. If the actual number was too large,
      a faulty number was stored.
      c58e1f4d
    • P
      virsh-domain: Refactor error paths for cmdCPUStats · a54f25a9
      Peter Krempa 提交于
      This patch fixes the following issues in the cpu-stats virsh command:
      
      1) Renames label failed_params to no_memory to match coding style
      2) Uses proper typed parameter cleanup in error paths to avoid leaks
      3) Adds a ret variable and simplifies error labels
      4) Changes error message to a slightly more descriptive one and gets rid
         of the newline at the end:
      
      Before:
      $ virsh cpu-stats tr
      error: Failed to virDomainGetCPUStats()
      
      error: Requested operation is not valid: domain is not running
      
      After:
      $ tools/virsh cpu-stats tr
      error: Failed to retrieve CPU statistics for domain 'tr'
      error: Requested operation is not valid: domain is not running
      a54f25a9
    • J
      tests: Need to initialize 'test' properly on error path · 35c30522
      John Ferlan 提交于
      In the error path, the test buffer is free'd, but due to how the free
      routine is written the 'test' buffer pointer does not return to the caller
      as NULL and then the free'd buffer address is returned to the caller.
      35c30522
    • J
      virkeepalive: Remove erroneous VIR_FREE(msg) · 618a5b33
      John Ferlan 提交于
      The 'msg' free is handled via virNetMessageFree() already.
      618a5b33