1. 26 4月, 2012 17 次提交
    • M
      win32: Properly handle TlsGetValue returning NULL · 1d655dd1
      Matthias Bolte 提交于
      virThreadSelf tries to access the virThreadPtr stored in TLS for the
      current thread via TlsGetValue. When virThreadSelf is called on a thread
      that was not created via virThreadCreate (e.g. the main thread) then
      TlsGetValue returns NULL as TlsAlloc initializes TLS slots to NULL.
      
      virThreadSelf can be called on the main thread via this call chain from
      virsh
      
      vshDeinit
      virEventAddTimeout
      virEventPollAddTimeout
      virEventPollInterruptLocked
      virThreadIsSelf
      
      triggering a segfault as virThreadSelf unconditionally dereferences the
      return value of TlsGetValue.
      
      Fix this by making virThreadSelf check the TLS slot value for NULL and
      setting the given virThreadPtr accordingly.
      
      Reported by Marcel Müller.
      1d655dd1
    • R
      esx: Fix segfault in esxConnectToHost · 622c0c7f
      Ryan Woodsmall 提交于
      Caused by commit 4445e16b that
      made the code used the connection private data pointer before
      it was initialized.
      622c0c7f
    • G
      openvz: wire up getHostname · 881dd9dc
      Guido Günther 提交于
      881dd9dc
    • E
      virnetserver: handle sigaction correctly · ac620c2e
      Eric Blake 提交于
      POSIX says that sa_sigaction is only safe to use if sa_flags
      includes SA_SIGINFO; conversely, sa_handler is only safe to
      use when flags excludes that bit.  Gnulib doesn't guarantee
      an implementation of SA_SIGINFO, but does guarantee that
      if SA_SIGINFO is undefined, we can safely define it to 0 as
      long as we don't dereference the 2nd or 3rd argument of
      any handler otherwise registered via sa_sigaction.
      
      Based on a report by Wen Congyang.
      
      * src/rpc/virnetserver.c (SA_SIGINFO): Stub for mingw.
      (virNetServerSignalHandler): Avoid bogus dereference.
      (virNetServerFatalSignal, virNetServerNew): Set flags properly.
      (virNetServerAddSignalHandler): Drop unneeded #ifdef.
      ac620c2e
    • E
      conf: tighten up XML integer parsing · 8a55d381
      Eric Blake 提交于
      https://bugzilla.redhat.com/show_bug.cgi?id=617711 reported that
      even with my recent patched to allow <memory unit='G'>1</memory>,
      people can still get away with trying <memory>1G</memory> and
      silently get <memory unit='KiB'>1</memory> instead.  While
      virt-xml-validate catches the error, our C parser did not.
      
      Not to mention that it's always fun to fix bugs while reducing
      lines of code.  :)
      
      * src/conf/domain_conf.c (virDomainParseMemory): Check for parse error.
      (virDomainDefParseXML): Avoid strtoll.
      * src/conf/storage_conf.c (virStorageDefParsePerms): Likewise.
      * src/util/xml.c (virXPathLongBase, virXPathULongBase)
      (virXPathULongLong, virXPathLongLong): Likewise.
      8a55d381
    • E
      build: avoid type-punning in vbox · 834bb448
      Eric Blake 提交于
      Commit 78345c68 makes at least gcc 4.1.2 on RHEL 5 complain:
      
      cc1: warnings being treated as errors
      In file included from vbox/vbox_V4_0.c:13:
      vbox/vbox_tmpl.c: In function 'vboxDomainUndefineFlags':
      vbox/vbox_tmpl.c:5298: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
      
      * src/vbox/vbox_tmpl.c (vboxDomainUndefineFlags): Use union to
      avoid compiler warning.
      834bb448
    • E
      build: fix fresh checkout on RHEL5 · e3f725a1
      Eric Blake 提交于
      Building a fresh checkout on RHEL 5 has been broken since commit
      29db7a00, due to a gnulib regression in the bootstrap script
      (incremental builds from a checkout earlier than that point were
      okay, though).
      
      * .gnulib: Update to latest, for bootstrap fixes.
      * bootstrap: Resync from gnulib.
      * gnulib/local/top/maint.mk.diff: Drop patch that was added
      upstream in the meantime.
      e3f725a1
    • D
      util: only register callbacks for CREATE operations in virnetdevmacvlan.c · dde004a7
      D. Herrendoerfer 提交于
      Currently upon a migration a callback is created when a 802.1qbg link
      is set to PREASSOCIATE, this should not happen because this is a no-op
      on most switches, and does not lead to an ASSOCIATE state.  This patch
      only creates callbacks when CREATE or RESTORE is requested.  Migration
      and libvirtd restart scenarios are already handled elsewhere.
      Signed-off-by: ND. Herrendoerfer <d.herrendoerfer@herrendoerfer.name>
      dde004a7
    • S
      Fix a memory leak · b38be9da
      Stefan Berger 提交于
      The below patch fixes the following memory leak.
      
      ==20624== 24 bytes in 2 blocks are definitely lost in loss record 532 of 1,867
      ==20624==    at 0x4A05E46: malloc (vg_replace_malloc.c:195)
      ==20624==    by 0x38EC27FC01: strdup (strdup.c:43)
      ==20624==    by 0x4EB6BA3: virDomainChrSourceDefCopy (domain_conf.c:1122)
      ==20624==    by 0x495D76: qemuProcessFindCharDevicePTYs (qemu_process.c:1497)
      ==20624==    by 0x498321: qemuProcessWaitForMonitor (qemu_process.c:1258)
      ==20624==    by 0x49B5F9: qemuProcessStart (qemu_process.c:3652)
      ==20624==    by 0x468B5C: qemuDomainObjStart (qemu_driver.c:4753)
      ==20624==    by 0x469171: qemuDomainStartWithFlags (qemu_driver.c:4810)
      ==20624==    by 0x4F21735: virDomainCreate (libvirt.c:8153)
      ==20624==    by 0x4302BF: remoteDispatchDomainCreateHelper (remote_dispatch.h:852)
      ==20624==    by 0x4F72C14: virNetServerProgramDispatch (virnetserverprogram.c:416)
      ==20624==    by 0x4F6D690: virNetServerHandleJob (virnetserver.c:164)
      ==20624==    by 0x4E8F43D: virThreadPoolWorker (threadpool.c:144)
      ==20624==    by 0x4E8EAB5: virThreadHelper (threads-pthread.c:161)
      ==20624==    by 0x38EC606CCA: start_thread (pthread_create.c:301)
      ==20624==    by 0x38EC2E0C2C: clone (clone.S:115)
      b38be9da
    • J
      vbox: avoid provoking assertions in VBoxSVC · 3dab791f
      Jean-Baptiste Rouault 提交于
      Passing a NULL pointer to IMachine::delete virtualbox API
      causes VBoxSVC to raise an assertion. This patch passes
      an empty array instead.
      3dab791f
    • O
      conf: Do not parse cpuset only if the placement is auto · d2aec113
      Osier Yang 提交于
      So that a domain xml which doesn't have "placement" specified, but
      "cpuset" is specified, could be parsed. And in this case, the
      "placement" mode will be set as "static".
      d2aec113
    • J
      Do not enforce source type of console[0] · 9963f590
      Jan Kiszka 提交于
      If console[0] is an alias for serial[0], do not enforce the former to
      have a PTY source type. This breaks serial consoles on stdio and makes
      no sense.
      Signed-off-by: NJan Kiszka <jan.kiszka@siemens.com>
      9963f590
    • S
      xen: do not use ioemu type for any emulated NIC · e3cac12c
      Stefan Bader 提交于
      When using the xm/xend stack to manage instances there is a bug
      that causes the emulated interfaces to be unusable when the vif
      config contains type=ioemu.
      
      The current code already has a special quirk to not use this
      keyword if no specific model is given for the emulated NIC
      (defaulting to rtl8139).
      Essentially it works because regardless of the type argument,i
      the Xen stack always creates emulated and paravirt interfaces and
      lets the guest decide which one to use. So neither xl nor xm stack
      actually require the type keyword for emulated NICs.
      Signed-off-by: NStefan Bader <stefan.bader@canonical.com>
      e3cac12c
    • C
      docs: fix 'omitted' typo in <cputune> doc · 0efe7ecc
      Christophe Fergeau 提交于
      'omitted' was mispelt 'commited' twice. One of the sentences with
      the typo was also missing an 'is' ('each VCPU *is* pinned to all...')
      which I added in this commit while I was at it.
      0efe7ecc
    • C
      f2be8879
    • G
    • C
      storage: lvm: use correct lv* command parameters · 61544d31
      Cole Robinson 提交于
      lvcreate want's the parent pool's name, not the pool path
      lvchange and lvremove want lv specified as $vgname/$lvname
      
      This largely worked before because these commands strip off a
      starting /dev. But https://bugzilla.redhat.com/show_bug.cgi?id=714986
      is from a user using a 'nested VG' that was having problems.
      
      I couldn't find any info on nested LVM and the reporter never responded,
      but I reproduced with XML that specified a valid source name, and
      set target path to a symlink.
      61544d31
  2. 16 4月, 2012 23 次提交
    • O
      numad: Ignore cpuset if placement is auto · 455d2224
      Osier Yang 提交于
      As explained in previous patch, numad will balance the affinity
      dynamically, so reflecting the cpuset from numad at the first
      time doesn't make much case, and may just could cause confusion.
      (cherry picked from commit 8fb2164c)
      455d2224
    • O
      numad: Convert node list to cpumap before setting affinity · 3f764157
      Osier Yang 提交于
      Instead of returning a CPUs list, numad returns NUMA node
      list instead, this patch is to convert the node list to
      cpumap before affinity setting. Otherwise, the domain
      processes will be pinned only to CPU[$numa_cell_num],
      which will cause significiant performance losses.
      
      Also because numad will balance the affinity dynamically,
      reflecting the cpuset from numad back doesn't make much
      sense then, and it may just could produce confusion for
      the users. Thus the better way is not to reflect it back
      to XML. And in this case, it's better to ignore the cpuset
      when parsing XML.
      
      The codes to update the cpuset is removed in this patch
      incidentally, and there will be a follow up patch to ignore
      the manually specified "cpuset" if "placement" is "auto",
      and document will be updated too.
      (cherry picked from commit ccf80e36)
      3f764157
    • G
      Fix macvtap detection by also checking for IFLA_VF_MAX · 4ceabdf5
      Guido Günther 提交于
      since this isn't available on older kernels such as Debian Squeeze's
      2.6.32. This make --with-macvtap=check work as expected.
      (cherry picked from commit a2996926)
      4ceabdf5
    • P
      virnetdev: Check for defined IFLA_VF_* · 4ecd1d69
      Philipp Hahn 提交于
      The linux-2.6.32 kernel header does not yet define IFLA_VF_MAX and others,
      which breaks compiling a new libvirt on old systems like Debian Squeeze.
      
      (I also have to add --without-macvtap --disable-werror --without-virtualport to
       ./configure to get it to compile.)
      Signed-off-by: NPhilipp Hahn <hahn@univention.de>
      (cherry picked from commit d7451bdd)
      4ecd1d69
    • M
      conf: Avoid double assignment in virDomainDiskRemove · cea0c393
      Michal Privoznik 提交于
      Although it should be harmless to do:
          disk = disk = def->disks[i]
      some not-so-wise compilers may fool around.
      Besides, such assignment is useless here.
      (cherry picked from commit e14d6571)
      cea0c393
    • M
      qemu: Fix mem leak in qemuProcessInitCpuAffinity · 7175699c
      Michal Privoznik 提交于
      If placement mode is AUTO, on some return paths char *cpumap or
      char *nodeset are leaked.
      (cherry picked from commit 354e6d4e)
      7175699c
    • S
      xend_internal: Use domain/status for shutdown check · 413d8670
      Stefan Bader 提交于
      On newer xend (v3.x and after) there is no state and domid reported
      for inactive domains. When initially creating connections this is
      handled in various places by assigning domain->id = -1.
      But once an instance has been running, the id is set to the current
      domain id. And it does not change when the instance is shut down.
      So when querying the domain info, the hypervisor driver, which gets
      asked first will indicate it cannot find information, then the
      xend driver is asked and will set the status to NOSTATE because it
      checks for the -1 domain id.
      Checking domain/status for 0 seems to be more reliable for that.
      
      One note: I am not sure whether the domain->id also should get set
      back to -1 whenever any sub-driver thinks the instance is no longer
      running.
      
      BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=746007
      BugLink: http://bugs.launchpad.net/bugs/929626Signed-off-by: NStefan Bader <stefan.bader@canonical.com>
      (cherry picked from commit 26e9ef47)
      413d8670
    • D
      qemu,util: fix netlink callback registration for migration · 965e7f14
      D. Herrendoerfer 提交于
      This patch adds a netlink callback when migrating a VEPA enabled
      virtual machine.  It fixes a Bug where a VM would not request a port
      association when it was cleared by lldpad.
      
      This patch requires the latest git version of lldpad to work.
      Signed-off-by: ND. Herrendoerfer <d.herrendoerfer@herrendoerfer.name>
      (cherry picked from commit 997366ca)
      965e7f14
    • M
      qemuOpenFile: Don't force chown on NFS · 27ef74ff
      Michal Privoznik 提交于
      If dynamic_ownership is off and we are creating a file on NFS
      we force chown. This will fail as chown/chmod are not supported
      on NFS. However, with no dynamic_ownership we are not required
      to do any chown.
      (cherry picked from commit b1256816)
      27ef74ff
    • A
      daemon: Plug memory leaks · 9b72feec
      Alex Jia 提交于
      * daemon/libvirtd-config.c (daemonConfigFree): fix memory leaks.
      
      How to reproduce?
      
      % make && make -C tests check TESTS=libvirtdconftest
      % cd tests && valgrind -v --leak-check=full ./libvirtdconftest
      
      actual result:
      
      ==11008== 185 bytes in 5 blocks are definitely lost in loss record 3 of 5
      ==11008==    at 0x4A05FDE: malloc (vg_replace_malloc.c:236)
      ==11008==    by 0x39CF07F6E1: strdup (strdup.c:43)
      ==11008==    by 0x406626: daemonConfigLoadOptions (libvirtd-config.c:438)
      ==11008==    by 0x406800: daemonConfigLoadData (libvirtd-config.c:492)
      ==11008==    by 0x403CCF: testCorrupt (libvirtdconftest.c:110)
      ==11008==    by 0x404FAD: virtTestRun (testutils.c:145)
      ==11008==    by 0x403A34: mymain (libvirtdconftest.c:219)
      ==11008==    by 0x404687: virtTestMain (testutils.c:700)
      ==11008==    by 0x39CF01ECDC: (below main) (libc-start.c:226)
      ==11008==
      ==11008== LEAK SUMMARY:
      ==11008==    definitely lost: 185 bytes in 5 blocks
      Signed-off-by: NAlex Jia <ajia@redhat.com>
      (cherry picked from commit d0eaf4b1)
      
      Conflicts:
      
      	daemon/libvirtd-config.c
      9b72feec
    • P
      qemu: Fix deadlock when qemuDomainOpenConsole cleans up a connection · 8dce8b82
      Peter Krempa 提交于
      The new safe console handling introduced a possibility to deadlock the
      qemu driver when a new console connection forcibly disconnects a
      previous console stream that belongs to an already closed connection.
      
      The virStreamFree function calls subsequently a the virReleaseConnect
      function that tries to lock the driver while discarding the connection,
      but the driver was already locked in qemuDomainOpenConsole.
      
      Backtrace of the deadlocked thread:
      0  0x00007f66e5aa7f14 in __lll_lock_wait () from /lib64/libpthread.so.0
      1  0x00007f66e5aa3411 in _L_lock_500 () from /lib64/libpthread.so.0
      2  0x00007f66e5aa322a in pthread_mutex_lock () from/lib64/libpthread.so.0
      3  0x0000000000462bbd in qemudClose ()
      4  0x00007f66e6e178eb in virReleaseConnect () from/usr/lib64/libvirt.so.0
      5  0x00007f66e6e19c8c in virUnrefStream () from /usr/lib64/libvirt.so.0
      6  0x00007f66e6e3d1de in virStreamFree () from /usr/lib64/libvirt.so.0
      7  0x00007f66e6e09a5d in virConsoleHashEntryFree () from/usr/lib64/libvirt.so.0
      8  0x00007f66e6db7282 in virHashRemoveEntry () from/usr/lib64/libvirt.so.0
      9  0x00007f66e6e09c4e in virConsoleOpen () from /usr/lib64/libvirt.so.0
      10 0x00000000004526e9 in qemuDomainOpenConsole ()
      11 0x00007f66e6e421f1 in virDomainOpenConsole () from/usr/lib64/libvirt.so.0
      12 0x00000000004361e4 in remoteDispatchDomainOpenConsoleHelper ()
      13 0x00007f66e6e80375 in virNetServerProgramDispatch () from/usr/lib64/libvirt.so.0
      14 0x00007f66e6e7ae11 in virNetServerHandleJob () from/usr/lib64/libvirt.so.0
      15 0x00007f66e6da897d in virThreadPoolWorker () from/usr/lib64/libvirt.so.0
      16 0x00007f66e6da7ff6 in virThreadHelper () from/usr/lib64/libvirt.so.0
      17 0x00007f66e5aa0c5c in start_thread () from /lib64/libpthread.so.0
      18 0x00007f66e57e7fcd in clone () from /lib64/libc.so.6
      
      * src/qemu/qemu_driver.c: qemuDomainOpenConsole()
              -- unlock the qemu driver right after acquiring the domain
              object
      (cherry picked from commit 3d3de46a)
      8dce8b82
    • E
      build: avoid s390 compiler warnings · 3f62b113
      Eric Blake 提交于
      I noticed these compiler warnings when building for the s390 architecture.
      
      * src/node_device/node_device_udev.c (udevDeviceMonitorStartup):
      Mark unused variable.
      * src/nodeinfo.c (linuxNodeInfoCPUPopulate): Avoid unused variable.
      (cherry picked from commit 9011a494)
      3f62b113
    • P
      virsh: Clarify use of the --managed-save flag for the list command · 28f8deb2
      Peter Krempa 提交于
      The documentation for the flag doesn't clearly state that the flag only
      enhances the output and the user needs to specify other flags to list
      inactive domains, that are enhanced by this flag.
      (cherry picked from commit cc510065)
      28f8deb2
    • D
      Fix comment about GNUTLS initialization/cleanup · f9d589cc
      Daniel P. Berrange 提交于
      (cherry picked from commit 20171c8d)
      f9d589cc
    • S
      Fix compilation error on 32bit · 194d0b8b
      Stefan Berger 提交于
      Below code failed to compile on a 32 bit machine with error
      
      typewrappers.c: In function 'libvirt_intUnwrap':
      typewrappers.c:135:5: error: logical 'and' of mutually exclusive tests is always false [-Werror=logical-op]
      cc1: all warnings being treated as errors
      
      The patch fixes this error.
      
      (cherry picked from commit 4e9bb1df)
      194d0b8b
    • M
      UML: fix iteration over consoles · ad8a0469
      MATSUDA, Daiki 提交于
      I found typo in UML driver.
      
      MATSUDA Daiki
      (cherry picked from commit 257191c9)
      ad8a0469
    • E
      snapshot: fix memory leak on error · 47e63245
      Eric Blake 提交于
      Leak introduced in commit 0436d328.  If we allocate an actions array,
      but fail early enough to never consume it with the qemu monitor
      transaction call, we leaked memory.
      
      But our semantics of making the transaction command free the caller's
      memory is awkward; avoiding the memory leak requires making every
      intermediate function in the call chain check for error.  It is much
      easier to fix things so that the function that allocates also frees,
      while the call chain leaves the caller's data intact.  To do that,
      I had to hack our JSON data structure to make it easy to protect a
      portion of an arbitrary JSON tree from being freed.
      
      * src/util/json.h (virJSONType): Name the enum.
      (_virJSONValue): New field.
      * src/util/json.c (virJSONValueFree): Use it to protect a portion
      of an array.
      * src/qemu/qemu_monitor_json.c (qemuMonitorJSONTransaction): Avoid
      freeing caller's data.
      * src/qemu/qemu_driver.c (qemuDomainSnapshotCreateDiskActive):
      Free actions array on failure.
      (cherry picked from commit 14135609)
      47e63245
    • M
      qemu_ga: Don't overwrite errors on FSThaw · f25ef09f
      Michal Privoznik 提交于
      We can tell qemuDomainSnapshotFSThaw if we want it to report errors or
      not. However, if we don't want to and an error has been already set by
      previous qemuReportError() we must keep copy of that error not just a
      pointer to it. Otherwise, it get overwritten if FSThaw reports an error.
      (cherry picked from commit 650da0e9)
      f25ef09f
    • S
      xen config: No vfb in HVM guest configuration · c5031e2d
      Stefan Bader 提交于
      This causes an implicit vkbd device to be added which takes
      6min to finally fail being initialized in the guest.
      
      http://lists.xen.org/archives/html/xen-devel/2012-04/msg00409.htmlSigned-off-by: NStefan Bader <stefan.bader@canonical.com>
      (cherry picked from commit fb98da00)
      c5031e2d
    • E
      tests: avoid compiler warnings · a791cde7
      Eric Blake 提交于
      gcc 4.7 warns about uninitialized struct members
      
      * tests/testutilsqemu.c (testQemuCapsInit): Populate new members.
      * tests/viruritest.c (mymain): Likewise.
      (cherry picked from commit 72505073)
      a791cde7
    • L
      test: fix build errors with gcc 4.7.0 and -O0 · cc8b3237
      Laine Stump 提交于
      When building on Fedora 17 (which uses gcc 4.7.0) with -O0 in CFLAGS,
      three of the tests failed to compile.
      
      cputest.c and qemuxml2argvtest.c had non-static structs defined
      inside the macro that was being repeatedly invoked. Due to some so-far
      unidentified change in gcc, the stack space used by variables defined
      inside { } is not recovered/re-used when the block ends, so all these
      structs have become additive (this is the same problem worked around
      in commit cf57d345). Fortunately, these two files could be fixed with
      a single line addition of "static" to the struct definition in the
      macro.
      
      virnettlscontexttest.c was a bit different, though. The problem structs
      in the do/while loop of macros had non-constant initializers, so it
      took a bit more work and piecemeal initialization instead of member
      initialization to get things to be happy.
      
      In an ideal world, none of these changes should be necessary, but not
      knowing how long it will be until the gcc regressions are fixed, and
      since the code is just as correct after this patch as before, it makes
      sense to fix libvirt's build for -O0 while also reporting the gcc
      problem.
      (cherry picked from commit 06a1a45c)
      cc8b3237
    • G
      virURIParse: don't forget to copy the user part · 3506eb7a
      Guido Günther 提交于
      This got dropped with 300e60e1
      
      Cheers,
       -- Guido
      (cherry picked from commit 4eb1c256)
      3506eb7a
    • L
      test: fix segfault in networkxml2argvtest · 07530184
      Laine Stump 提交于
      This bug resolves https://bugzilla.redhat.com/show_bug.cgi?id=810100
      
      rpm builds for i686 were failing with a segfault in
      networkxml2argvtest. Running under valgrind showed that a region of
      memory was being referenced after it had been freed (as the result of
      realloc - see the valgrind report in the BZ).
      
      The problem (in replaceTokens() - added in commit 22ec60, meaning this
      bug was in 0.9.10 and 0.9.11) was that the pointers token_start and
      token_end were being computed based on the value of *buf, then *buf
      was being realloc'ed (potentially moving it), then token_start and
      token_end were used without recomputing them to account for movement
      of *buf.
      
      The solution is to change the code so that token_start and token_end
      are offsets into *buf rather than pointers. This way there is only a
      single pointer to the buffer, and nothing needs readjusting after a
      realloc. (You may note that some uses of token_start/token_end didn't
      need to be changed to add in "*buf +" - that's because there ended up
      being a +*buf and -*buf which canceled each other out).
      
      DV gets the credit for finding this bug and pointing out the valgrind
      report.
      (cherry picked from commit bde32b1a)
      07530184