]> git.ipfire.org Git - thirdparty/libvirt.git/log
thirdparty/libvirt.git
13 years agocommand: avoid double close bugs
Eric Blake [Tue, 29 May 2012 23:47:58 +0000 (17:47 -0600)] 
command: avoid double close bugs

KAMEZAWA Hiroyuki reported a nasty double-free bug when virCommand
is used to convert a string into input to a child command.  The
problem is that the poll() loop of virCommandProcessIO would close()
the write end of the pipe in order to let the child see EOF, then
the caller virCommandRun() would also close the same fd number, with
the second close possibly nuking an fd opened by some other thread
in the meantime.  This in turn can have all sorts of bad effects.

The bug has been present since the introduction of virCommand in
commit f16ad06f.

This is based on his first attempt at a patch, at
https://bugzilla.redhat.com/show_bug.cgi?id=823716

* src/util/command.c (_virCommand): Drop inpipe member.
(virCommandProcessIO): Add argument, to avoid closing caller's fd
without informing caller.
(virCommandRun, virCommandNewArgs): Adjust clients.
(cherry picked from commit da831afcf2f6c0d3ed1ea3128a6208f548a05d8f)

13 years agoavoid fd leak
Wen Congyang [Wed, 30 May 2012 09:20:46 +0000 (17:20 +0800)] 
avoid fd leak

virCommandRunAsync() will set errfd if it succeed. We should
close it if virFDStreamOpenInternal() fails.
(cherry picked from commit 655cffa0f25be40c68624036af80bde102177612)

13 years agoavoid closing uninitialized fd
Wen Congyang [Wed, 30 May 2012 09:20:41 +0000 (17:20 +0800)] 
avoid closing uninitialized fd

If the system does not support bypass cache, we will close fd,
but it is uninitialized.
(cherry picked from commit 0a045f01cfa48fabd41c801e3f44034a4e6da485)

13 years agobuild: silence warning from autoconf
Eric Blake [Tue, 29 May 2012 14:10:44 +0000 (08:10 -0600)] 
build: silence warning from autoconf

Autoconf 2.60 and later insist on using ${datarootdir}, rather than
the derived ${datadir} (although the latter defaults to the former,
it is possible to set configure arguments so that they differ):

config.status: creating libvirt.pc
config.status: WARNING:  'libvirt.pc.in' seems to ignore the --datarootdir setting

This patch follows the autoconf manual's suggestions for how to
support 2.59 (RHEL 5) and newer simultaneously.

* libvirt.pc.in (datarootdir): Define, so ${datadir} will not ignore
datarootdir when using newer autoconf.
(cherry picked from commit aabf77aa41e9589faa7ce44add87b97f5a6dde2e)

13 years agovirCommand: Extend debug message for handshake
Michal Privoznik [Wed, 30 May 2012 12:17:26 +0000 (14:17 +0200)] 
virCommand: Extend debug message for handshake

Currently, we are logging only one side of pipes we
create in virCommandRequireHandshake(); This is enough
in cases where pipe2() returns two consecutive FDs. However,
it is not guaranteed and it may return any FDs.
Therefore, it's wise to log the other ends as well.
(cherry picked from commit 7454849ec5489c7b52d3b41a8022f2bc6fda9eee)

13 years agolxc: return correct number of CPUs
Martin Kletzander [Tue, 29 May 2012 07:12:32 +0000 (09:12 +0200)] 
lxc: return correct number of CPUs

When getting number of CPUs the host has assigned, there was always
number "1" returned. Even though all lxc domains with no pinning
launched by libvirt run on all pCPUs (by default, no matter what's the
number), we should at least return the same number as the user
specified when creating the domain.
(cherry picked from commit 87dfdb0b92f234a08408332095454260f1c86917)

13 years agoexamples: add consolecallback example python script
Dave Allan [Tue, 29 May 2012 22:49:13 +0000 (16:49 -0600)] 
examples: add consolecallback example python script

A while back I wrote the attached code to demonstrate how to use
events and serial console to create a serial console that stays up
even when the VM is down.  It might need some work, as I am not
terribly strong with Python.

* examples/python/consolecallback.py: New file.
* examples/python/Makefile.am (EXTRA_DIST): Ship it.
(cherry picked from commit ffc9f7ab4f203ce6825dbdc22b75f0894ae833b2)

13 years agoleak_fix.diff
Stefan Berger [Tue, 29 May 2012 10:25:59 +0000 (06:25 -0400)] 
leak_fix.diff

==3240== 23 bytes in 1 blocks are definitely lost in loss record 242 of 744
==3240==    at 0x4C2A4CD: malloc (vg_replace_malloc.c:236)
==3240==    by 0x8077537: __vasprintf_chk (vasprintf_chk.c:82)
==3240==    by 0x509C677: virVasprintf (stdio2.h:199)
==3240==    by 0x509C733: virAsprintf (util.c:1912)
==3240==    by 0x1906583A: qemudStartup (qemu_driver.c:679)
==3240==    by 0x511991D: virStateInitialize (libvirt.c:809)
==3240==    by 0x40CD84: daemonRunStateInit (libvirtd.c:751)
==3240==    by 0x5098745: virThreadHelper (threads-pthread.c:161)
==3240==    by 0x7953D8F: start_thread (pthread_create.c:309)
==3240==    by 0x805FF5C: clone (clone.S:115)

(cherry picked from commit 67dd486f20d4028ebf723735565697146207d301)

13 years agodocs: typo in acceleration element
Martin Kletzander [Mon, 28 May 2012 10:44:32 +0000 (12:44 +0200)] 
docs: typo in acceleration element

"accel3d" was specified twice, the second one is obviously "accel2d"
(also from the text down below.
(cherry picked from commit 94618eb66ac79cae49bd564f397ae3a4f1e49f98)

13 years agoRe-order config options in qemu driver augeas lens
Daniel P. Berrange [Fri, 25 May 2012 10:20:43 +0000 (11:20 +0100)] 
Re-order config options in qemu driver augeas lens

Currently all the config options are listed under a 'vnc_entry'
group. Create a bunch of new groups & move options to the
right place

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
(cherry picked from commit 6c10c04c3944a2083b589b41e3f1b77c44165e03)

13 years agoFix mistakes in augeas lens
Daniel P. Berrange [Fri, 25 May 2012 10:18:24 +0000 (11:18 +0100)] 
Fix mistakes in augeas lens

Add nmissing 'host_uuid' entry to libvirtd.conf lens and
rename spice_passwd to spice_password in qemu.conf lens

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
(cherry picked from commit a9c779caf3b9295ed0cf549d0f36214d7d8fabf7)

13 years agoStandardize whitespace used in example config files
Daniel P. Berrange [Fri, 25 May 2012 09:32:17 +0000 (10:32 +0100)] 
Standardize whitespace used in example config files

Instead of doing

  # example_config

use

  #example_config

so it is possible to programatically uncomment example config
options, as distinct from their comment/descriptions

Also delete rogue trailing comma not allowed by lens

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
(cherry picked from commit c5c3278e9b96246ab0b755da6d74583e41612ed3)

(crobinso: Fix spacing to appease tests/daemon-conf, which is
 still in -maint branch)

13 years agoFix check for socket existance / daemon spawn
Daniel P. Berrange [Fri, 25 May 2012 13:54:31 +0000 (14:54 +0100)] 
Fix check for socket existance / daemon spawn

When you try to connect to a socket in the abstract namespace,
the error will be ECONNREFUSED for a non-listening daemon. With
the non-abstract namespace though, you instead get ENOENT. Add
a check for this extra errno when auto-spawning the daemon

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
(cherry picked from commit 54c4d9d90bf9f9583e0db89232671c1801c61142)

13 years agoRemove last usage of PATH_MAX and ban its future use
Daniel P. Berrange [Fri, 25 May 2012 13:14:07 +0000 (14:14 +0100)] 
Remove last usage of PATH_MAX and ban its future use

Remove a number of pointless checks against PATH_MAX and
add a syntax-check rule to prevent its use in future

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
(cherry picked from commit ebbcc0263969cc4472f4aafea8901154c790a196)

13 years agomaint: avoid new automake warning about AM_PROG_CC_STDC
Jim Meyering [Sat, 26 May 2012 09:21:47 +0000 (11:21 +0200)] 
maint: avoid new automake warning about AM_PROG_CC_STDC

* configure.ac (AM_PROG_CC_STDC): Stop using this macro.
It provokes warnings from newer automake and is superseded by
autoconf's AC_PROG_CC, which we're already using.
(cherry picked from commit 0d07aa512c775d9b4e8460f203898364ba5413dd)

13 years agoImprove docs about compiling libvirt from GIT
Daniel P. Berrange [Thu, 24 May 2012 15:07:58 +0000 (16:07 +0100)] 
Improve docs about compiling libvirt from GIT

Add a note about setting the LIBVIRT_DRIVER_DIR env variable,
explain --system and fix example to use --disable-werror
(cherry picked from commit 4878a33125a0793b8af3a1f9837bb1c396a80420)

13 years agotests: run valgrind on real executables, not libtool wrappers
Eric Blake [Wed, 24 Nov 2010 20:41:50 +0000 (13:41 -0700)] 
tests: run valgrind on real executables, not libtool wrappers

* tests/Makefile.am (valgrind): Use libtool's ability to bypass
libtool wrappers when running valgrind.
(cherry picked from commit 428fc2bf3138136de2f340e06fae287a37d3f5f2)

13 years agoqemu augeas: Add spice_tls/spice_tls_x509_cert_dir
Douglas Schilling Landgraf [Thu, 24 May 2012 19:04:47 +0000 (15:04 -0400)] 
qemu augeas: Add spice_tls/spice_tls_x509_cert_dir

If vdsm is installed and configured in Fedora 17, we add the following
items into qemu.conf:

spice_tls=1
spice_tls_x509_cert_dir="/etc/pki/vdsm/libvirt-spice"

However, after this changes, augtool cannot identify qemu.conf anymore.
(cherry picked from commit cdd762e425a5b8b076d36d63c742f25cd4f87c85)

13 years agotests: back to short test names
Eric Blake [Fri, 25 May 2012 02:34:16 +0000 (20:34 -0600)] 
tests: back to short test names

With the switch to modules by default, I was getting super long
test output:

TEST: /home/remote/eblake/libvirt/tests/.libs/lt-interfacexml2xmltest

compared to the former:

TEST: interfacexml2xmltest

* tests/testutils.c (virtTestMain): Trim off libtool goop.
(cherry picked from commit ee407255101e372b9f7943d012f3f92c172be2f0)

13 years agoAdd parsing for VIR_ENUM_IMPL & VIR_ENUM_DECL in apibuild.py
Daniel P. Berrange [Tue, 15 May 2012 10:59:00 +0000 (11:59 +0100)] 
Add parsing for VIR_ENUM_IMPL & VIR_ENUM_DECL in apibuild.py

The apibuild.py parser needs to be able to parse & ignore
any VIR_ENUM_IMPL/VIR_ENUM_DECL macros in the source. Add
some special case code to deal with this rather than trying
to figure out a generic syntax for parsing macros.

* apibuild.py: Special case  VIR_ENUM_IMPL & VIR_ENUM_DECL
(cherry picked from commit 45b43a8cab69db315b07ef17f80bb5d752074002)

13 years agoAdd stub impl of virNetlinkEventServiceLocalPid for Win32
Daniel P. Berrange [Thu, 24 May 2012 12:14:57 +0000 (13:14 +0100)] 
Add stub impl of virNetlinkEventServiceLocalPid for Win32

The libvirt_private.syms file exports virNetlinkEventServiceLocalPid
so there needs to be a no-op stub for Win32 to avoid linker errors

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
(cherry picked from commit 2d191e8e2720abb86e3a14a073dc05c88966b8dc)

13 years agoFix dep from libvirt-lock-sanlock RPM
Daniel P. Berrange [Mon, 21 May 2012 18:36:30 +0000 (19:36 +0100)] 
Fix dep from libvirt-lock-sanlock RPM

The libvirt-lock-sanlock RPM requires libvirtd, so its RPM dep
should be on libvirt-daemon, not libvirt
(cherry picked from commit aad1625da693f765af60ab0a184b23069cb5cb4e)

13 years agoRemove more bogus systemd service dependencies
Daniel P. Berrange [Wed, 23 May 2012 11:01:57 +0000 (12:01 +0100)] 
Remove more bogus systemd service dependencies

Adding syslog.target is obsolete, avahi.target does not
exist and dbus.target is also obsolete

Reported-by: Lennart Poettering <lpoetter@redhat.com>
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
(cherry picked from commit 4c7973e184a4ce52f78e63f1a92f9597709279ab)

13 years agoRevert "rpc: Discard non-blocking calls only when necessary"
Jiri Denemark [Mon, 21 May 2012 14:02:05 +0000 (16:02 +0200)] 
Revert "rpc: Discard non-blocking calls only when necessary"

This reverts commit b1e374a7ac56927cfe62435179bf0bba1e08b372, which was
rather bad since I failed to consider all sides of the issue. The main
things I didn't consider properly are:

- a thread which sends a non-blocking call waits for the thread with
  the buck to process the call
- the code doesn't expect non-blocking calls to remain in the queue
  unless they were already partially sent

Thus, the reverted patch actually breaks more than what it fixes and
clients (which may even be libvirtd during p2p migrations) will likely
end up in a deadlock.
(cherry picked from commit 63643f67abcdeaa33a0f85ea8e54da75ea9908e4)

13 years agoqemu_hotplug: Don't free the PCI device structure after hot-unplug
Peter Krempa [Mon, 21 May 2012 14:31:53 +0000 (16:31 +0200)] 
qemu_hotplug: Don't free the PCI device structure after hot-unplug

The pciDevice structure corresponding to the device being hot-unplugged
was freed after it was "stolen" from activeList. The pointer was still
used for eg-inactive list. This patch removes the free of the structure
and frees it only if reset fails on the device.
(cherry picked from commit db19417fc012416639c2230e5f19717b84245ce5)

13 years agobuild: fix unused variable after last patch
Eric Blake [Mon, 21 May 2012 18:36:50 +0000 (12:36 -0600)] 
build: fix unused variable after last patch

The previous commit (2cb0899) left a dead variable behind.

* src/libxl/libxl_driver.c (libxlClose): Drop dead variable.
(cherry picked from commit b8e6021e7b7ef0d371cac59fa333848c8cebffd0)

13 years agoFix potential events deadlock when unref'ing virConnectPtr
Daniel P. Berrange [Mon, 21 May 2012 11:10:53 +0000 (12:10 +0100)] 
Fix potential events deadlock when unref'ing virConnectPtr

When the last reference to a virConnectPtr is released by
libvirtd, it was possible for a deadlock to occur in the
virDomainEventState functions. The virDomainEventStatePtr
holds a reference on virConnectPtr for each registered
callback. When removing a callback, the virUnrefConnect
function is run. If this causes the last reference on the
virConnectPtr to be released, then virReleaseConnect can
be run, which in turns calls qemudClose. This function has
a call to virDomainEventStateDeregisterConn which is intended
to remove all callbacks associated with the virConnectPtr
instance. This will try to grab a lock on virDomainEventState
but this lock is already held. Deadlock ensues

Thread 1 (Thread 0x7fcbb526a840 (LWP 23185)):

Since each callback associated with a virConnectPtr holds a
reference on virConnectPtr, it is impossible for the qemudClose
method to be invoked while any callbacks are still registered.
Thus the call to virDomainEventStateDeregisterConn must in fact
be a no-op. Thus it is possible to just remove all trace of
virDomainEventStateDeregisterConn and avoid the deadlock.

* src/conf/domain_event.c, src/conf/domain_event.h,
  src/libvirt_private.syms: Delete virDomainEventStateDeregisterConn
* src/libxl/libxl_driver.c, src/lxc/lxc_driver.c,
  src/qemu/qemu_driver.c, src/uml/uml_driver.c: Remove
  calls to virDomainEventStateDeregisterConn
(cherry picked from commit 2cb0899eec72376629a0583647dcad39b00c5715)

13 years agoFix build when configuring with polkit0
Jim Fehlig [Mon, 21 May 2012 15:23:41 +0000 (09:23 -0600)] 
Fix build when configuring with polkit0

Commit 2223ea98 removed the only use of 'server' param in
remoteDispatchAuthPolkit().  Mark the parameter with ATTRIBUTE_UNUSED
to fix the build when configuring with polkit0.
(cherry picked from commit 651d7124529b997031d525ea30bbee5d112c2e88)

13 years agobuild: fix virnetlink on glibc 2.11
Eric Blake [Fri, 18 May 2012 15:42:25 +0000 (09:42 -0600)] 
build: fix virnetlink on glibc 2.11

We were being lazy - virnetlink.c was getting uint32_t as a
side-effect from glibc 2.14's <unistd.h>, but older glibc 2.11
does not provide uint32_t from <unistd.h>.  In fact, POSIX states
that <unistd.h> need only provide intptr_t, not all of <stdint.h>,
so the bug really is ours.  Reported by Jonathan Alescio.

* src/util/virnetlink.h: Include <stdint.h>.
(cherry picked from commit e8314e78f9c5d5ad84cfda5c61000e50d91c4a1e)

13 years agoqemu: Don't delete USB device on failed qemuPrepareHostdevUSBDevices
Michal Privoznik [Thu, 17 May 2012 11:40:52 +0000 (13:40 +0200)] 
qemu: Don't delete USB device on failed qemuPrepareHostdevUSBDevices

If qemuPrepareHostdevUSBDevices fail it will roll back devices added
to the driver list of used devices. However, if it may fail because
the device is being used already. But then again - with roll back.
Therefore don't try to remove a usb device manually if the function
fail. Although, we want to remove the device if any operation
performed afterwards fail.
(cherry picked from commit 9c484e3dc5464dfbb538744360b401a0bc59c1c6)

13 years agoqemu: Rollback on used USB devices
Michal Privoznik [Wed, 16 May 2012 14:42:02 +0000 (16:42 +0200)] 
qemu: Rollback on used USB devices

One of our latest USB device handling patches
05abd1507d66aabb6cad12eeafeb4c4d1911c585 introduced a regression.
That is, we first create a temporary list of all USB devices that
are to be used by domain just starting up. Then we iterate over and
check if a device from the list is in the global list of currently
assigned devices (activeUsbHostdevs). If not, we add it there and
continue with next iteration then. But if a device from temporary
list is either taken already or adding to the activeUsbHostdevs fails,
we remove all devices in temp list from the activeUsbHostdevs list.
Therefore, if a device is already taken we remove it from
activeUsbHostdevs even if we should not. Thus, next time we allow
the device to be assigned to another domain.
(cherry picked from commit 2f5fdc886ec7ed8b871ebd0576271f8ee5be1f71)

13 years agoReject any non-option command line arguments
Daniel P. Berrange [Wed, 16 May 2012 11:03:02 +0000 (12:03 +0100)] 
Reject any non-option command line arguments

Due to a bug in editing /etc/sysconfig/libvirtd, VDSM was causing
libvirt processes to run with the following command line args

   /usr/sbin/libvirtd --listen '#' 'by vdsm'

While it correctly rejects any invalid option flags, libvirtd
was not rejecting any non-option command line arguments

* daemon/libvirtd.c: Reject non-option argv
(cherry picked from commit 51bcb09fe946c01ff7e0f94fee0be9d6411ca2ad)

13 years agoRemove bogus udev.target dep from libvirtd unit
Daniel P. Berrange [Tue, 15 May 2012 16:33:00 +0000 (17:33 +0100)] 
Remove bogus udev.target dep from libvirtd unit

There is no 'udev.target' unit in systemd (only 'udev.service')
yet libvirtd's unit file had a dep on one. There's no compelling
reason for a dep on udev, so remove it altogether.

Reported-by: Avi Kivity <avi@redhat.com>
(cherry picked from commit 6cfc3f8f4facc7f549ee494b216bde18d15a1d33)

13 years agoSet a sensible default master start port for ehci companion controllers
Daniel P. Berrange [Mon, 14 May 2012 12:22:58 +0000 (13:22 +0100)] 
Set a sensible default master start port for ehci companion controllers

The uhci1, uhci2, uhci3 companion controllers for ehci1 must
have a master start port set. Since this value is predictable
we should set it automatically if the app does not supply it
(cherry picked from commit 03b804a200e214e3faf264b16f41a640c1344962)

(crobinso: Drop an element that wasn't backported to -maint branch.)

13 years agoFix logic for assigning PCI addresses to USB2 companion controllers
Daniel P. Berrange [Mon, 14 May 2012 10:16:22 +0000 (11:16 +0100)] 
Fix logic for assigning PCI addresses to USB2 companion controllers

Currently each USB2 companion controller gets put on a separate
PCI slot. Not only is this wasteful of PCI slots, but it is not
in compliance with the spec for USB2 controllers. The master
echi1 and all companion controllers should be in the same slot,
with echi1 in function 7, and uhci1-3 in functions 0-2 respectively.

* src/qemu/qemu_command.c: Special case handling of USB2 controllers
  to apply correct pci slot assignment
* tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-ehci-addr.args,
  tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-ehci-addr.xml: Expand
  test to cover automatic slot assignment
(cherry picked from commit 1ebd52cb871f87b7868503b28448e96d59e41d63)

Conflicts:

tests/qemuxml2xmltest.c

13 years agoFix virDomainDeviceInfoIsSet() to check all struct fields
Daniel P. Berrange [Tue, 15 May 2012 15:16:49 +0000 (16:16 +0100)] 
Fix virDomainDeviceInfoIsSet() to check all struct fields

The virDomainDeviceInfoIsSet API was only checking if an
address or alias was set in the struct. Thus if only a
rom bar setting / filename, boot index, or USB master
value was set, they could be accidentally dropped when
formatting XML
(cherry picked from commit 2c195fdbf3293792e39bc4f06755ae751025b0ea)

13 years agoAllow stack traces to be included with log messages
Daniel P. Berrange [Wed, 9 May 2012 14:18:56 +0000 (15:18 +0100)] 
Allow stack traces to be included with log messages

Sometimes it is useful to see the callpath for log messages.
This change enhances the log filter syntax so that stack traces
can be show by setting '1:+NAME' instead of '1:NAME'.

This results in output like:

2012-05-09 14:18:45.136+0000: 13314: debug : virInitialize:414 : register drivers
/home/berrange/src/virt/libvirt/src/.libs/libvirt.so.0(virInitialize+0xd6)[0x7f89188ebe86]
/home/berrange/src/virt/libvirt/tools/.libs/lt-virsh[0x431921]
/lib64/libc.so.6(__libc_start_main+0xf5)[0x3a21e21735]
/home/berrange/src/virt/libvirt/tools/.libs/lt-virsh[0x40a279]

2012-05-09 14:18:45.136+0000: 13314: debug : virRegisterDriver:775 : driver=0x7f8918d02760 name=Test
/home/berrange/src/virt/libvirt/src/.libs/libvirt.so.0(virRegisterDriver+0x6b)[0x7f89188ec717]
/home/berrange/src/virt/libvirt/src/.libs/libvirt.so.0(+0x11b3ad)[0x7f891891e3ad]
/home/berrange/src/virt/libvirt/src/.libs/libvirt.so.0(virInitialize+0xf3)[0x7f89188ebea3]
/home/berrange/src/virt/libvirt/tools/.libs/lt-virsh[0x431921]
/lib64/libc.so.6(__libc_start_main+0xf5)[0x3a21e21735]
/home/berrange/src/virt/libvirt/tools/.libs/lt-virsh[0x40a279]

* docs/logging.html.in: Document new syntax
* configure.ac: Check for execinfo.h
* src/util/logging.c, src/util/logging.h: Add support for
  stack traces
* tests/testutils.c: Adapt to API change

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
(cherry picked from commit 548563956e484e0e43e9a66a89bdda0f95930108)

13 years agoAdd bundled(gnulib) to RPM specfile
Daniel P. Berrange [Tue, 15 May 2012 15:03:14 +0000 (16:03 +0100)] 
Add bundled(gnulib) to RPM specfile

According to Fedora guidelines, because we bundle gnulib we
need to add a virtual Provides: bundled(gnulib).

https://fedoraproject.org/wiki/Packaging:No_Bundled_Libraries#Requirement_if_you_bundle
(cherry picked from commit 3247b63ba9ba8f83a34a6058661172701d09939b)

13 years agolibvirt-guests: Remove LISTFILE if it's empty when stopping service
Osier Yang [Tue, 15 May 2012 08:22:28 +0000 (16:22 +0800)] 
libvirt-guests: Remove LISTFILE if it's empty when stopping service

$LISTFILE is created even no domain is running, and the empty
$LISTFILE could cause improper service status.

    stopped ,with saved guests

Which is not right, as there is no domain was saved.
(cherry picked from commit c086af6b9b2296e2ab45e571f0fdfca097f7f127)

13 years agoqemu: Use the CPU index in capabilities to map NUMA node to cpu list.
Osier Yang [Sat, 12 May 2012 12:52:45 +0000 (20:52 +0800)] 
qemu: Use the CPU index in capabilities to map NUMA node to cpu list.

On some of the NUMA platforms, the CPU index in each NUMA node
grows non-consecutive. While on other platforms, it can be inconsecutive,
E.g.

% numactl --hardware
available: 4 nodes (0-3)
node 0 cpus: 0 4 8 12 16 20 24 28
node 0 size: 131058 MB
node 0 free: 86531 MB
node 1 cpus: 1 5 9 13 17 21 25 29
node 1 size: 131072 MB
node 1 free: 127070 MB
node 2 cpus: 2 6 10 14 18 22 26 30
node 2 size: 131072 MB
node 2 free: 127758 MB
node 3 cpus: 3 7 11 15 19 23 27 31
node 3 size: 131072 MB
node 3 free: 127226 MB
node distances:
node   0   1   2   3
  0:  10  20  20  20
  1:  20  10  20  20
  2:  20  20  10  20
  3:  20  20  20  10

This patch is to fix the problem by using the CPU index in
caps->host.numaCell[i]->cpus[i] to set the bitmask instead of
assuming the CPU index of the NUMA nodes are always sequential.
(cherry picked from commit d1bdeca875d92c6fe9c9eb854fa1f3d891fef84a)

13 years agoAssign spapr-vio bus address to ibmvscsi controller
Li Zhang [Mon, 14 May 2012 06:16:37 +0000 (14:16 +0800)] 
Assign spapr-vio bus address to ibmvscsi controller

For pseries guest, the default controller model is
ibmvscsi controller, this controller only can work
on spapr-vio address.

This patch is to assign spapr-vio address type to
ibmvscsi controller and correct vscsi test case.

Signed-off-by: Li Zhang <zhlcindy@linux.vnet.ibm.com>
(cherry picked from commit bb725ac1faf1e0cee1efd3d5b94c4fba87988e3a)

13 years agoesx: Fix memory leaks in error paths related to transferred ownership
Matthias Bolte [Sun, 6 May 2012 17:33:59 +0000 (19:33 +0200)] 
esx: Fix memory leaks in error paths related to transferred ownership

Appending an item to a list transfers ownership of that item to the
list owner. But an error can occur in between item allocation and
appending it to the list. In this case the item has to be freed
explicitly. This was not done in some special cases resulting in
possible memory leaks.

Reported by Coverity.
(cherry picked from commit 3b9a12958d822792c6f5309c2bf44acb4356c0c8)

13 years agoqemu: Don't skip detection of virtual cpu's on non KVM targets
Peter Krempa [Mon, 7 May 2012 11:58:22 +0000 (13:58 +0200)] 
qemu: Don't skip detection of virtual cpu's on non KVM targets

This patch lifts the limit of calling thread detection code only on KVM
guests. With upstream qemu the thread mappings are reported also on
non-KVM machines.

QEMU adopted the thread_id information from the kvm branch.

To remain compatible with older upstream versions of qemu the check is
attempted but the failure to detect threads (or even run the monitor
command - on older versions without SMP support) is treated non-fatal
and the code reports one vCPU with pid of the hypervisor (in same
fashion this was done on non-KVM guests).
(cherry picked from commit c833526924d56e14f2d0133804cf209f5f47a228)

13 years agoqemu: Re-detect virtual cpu threads after cpu hot (un)plug.
Peter Krempa [Mon, 7 May 2012 11:56:17 +0000 (13:56 +0200)] 
qemu: Re-detect virtual cpu threads after cpu hot (un)plug.

After a cpu hotplug the qemu driver did not refresh information about
virtual processors used by qemu and their corresponding threads. This
patch forces a re-detection as is done on start of QEMU.

This ensures that correct information is reported by the
virDomainGetVcpus API and "virsh vcpuinfo".

A failure to obtain the thread<->vcpu mapping is treated non-fatal and
the mapping is not updated in a case of failure as not all versions of
QEMU report this in the info cpus command.
(cherry picked from commit 3163682b585da7e894c9ea069741755fc316bdb3)

13 years agoqemu: Refactor qemuDomainSetVcpusFlags
Peter Krempa [Mon, 7 May 2012 11:53:20 +0000 (13:53 +0200)] 
qemu: Refactor qemuDomainSetVcpusFlags

This patch changes a switch statement into ifs when handling live vs.
configuration modifications getting rid of redundant code in case when
both live and persistent configuration gets changed.
(cherry picked from commit e99ad93d028cf7a63fb9ffd7a620dc00b0d54fce)

13 years agousb: fix crash when failing to attach a second usb device
Guannan Ren [Fri, 11 May 2012 06:29:15 +0000 (14:29 +0800)] 
usb: fix crash when failing to attach a second usb device

when failing to attach another usb device to a domain for some reason
which has one use device attached before, the libvirtd crashed.
The crash is caused by null-pointer dereference error in invoking
usbDeviceListSteal passed in NULL value usb variable.
commit 05abd1507d66aabb6cad12eeafeb4c4d1911c585 introduces the bug.
(cherry picked from commit ab5fb8f34c93661bb19b62e4ed3592fb53cd6b36)

13 years agodocs: mention migration issue of which credentials are used
Eric Blake [Mon, 30 Apr 2012 20:51:07 +0000 (14:51 -0600)] 
docs: mention migration issue of which credentials are used

Based on a report by Seth Vidal.  Just because _you_ can use virsh
to connect to both source and destinations does not mean that libvirtd
on the source (aka _root_) can likewise connect to the destination;
this matters when setting up a peer-to-peer migration instead of a
native one.

* docs/migration.html.in: Mention that in peer-to-peer, the owner
of the source libvirtd (usually root) must be able to connect to
the destination.
(cherry picked from commit 38bd605b71d43e951ebfcb247f82c0435bad397b)

13 years agobuild: Fix the typo in configure.ac
Osier Yang [Thu, 10 May 2012 02:25:22 +0000 (10:25 +0800)] 
build: Fix the typo in configure.ac

s/nuamd/numad/,
(cherry picked from commit eecee94c3a620f0076ca3c7a466399feb4a4485d)

13 years agoqemu: fix build when !HAVE_NUMACTL
Eric Blake [Wed, 9 May 2012 23:55:31 +0000 (17:55 -0600)] 
qemu: fix build when !HAVE_NUMACTL

Commit 97010eb1f forgot to change the other side of an #ifdef.

* src/qemu/qemu_process.c (qemuProcessInitNumaMemoryPolicy): Add
argument.
(cherry picked from commit 5c650b98ced19bcb344a20011f4923a9626331e9)

13 years agoReport error when parsing character device target type
Jim Fehlig [Wed, 9 May 2012 17:12:38 +0000 (11:12 -0600)] 
Report error when parsing character device target type

No useful error was being reported when an invalid character device
target type is specified in the domainXML. E.g.

    ...
    <console type="pty">
      <source path="/dev/pts/2"/>
      <target type="kvm" port="0"/>
    </console>
    ...

resulted in

error: Failed to define domain from x.xml
error: An error occurred, but the cause is unknown

With this small patch, the error is more helpful

error: Failed to define domain from x.xml
error: XML error: unknown target type 'kvm' specified for character device
(cherry picked from commit 10a87145f73068e572d14d82a13df46c95960273)

13 years agonumad: Update comments in libvirt.spec.in
Osier Yang [Wed, 9 May 2012 04:26:36 +0000 (12:26 +0800)] 
numad: Update comments in libvirt.spec.in

Not only support CPU placement now.
(cherry picked from commit b736e72255e54b7df9ea8018a8467fc4b58cd9a4)

13 years agonumad: Check numactl-devel if compiled with numad support
Osier Yang [Wed, 9 May 2012 04:22:58 +0000 (12:22 +0800)] 
numad: Check numactl-devel if compiled with numad support

Since now we pre-set memory policy using libnuma to fully
drive numad, it needs to check numactl-devel if "with_numad"
is "yes".

configure with groups "--with-numad=yes --with-numactl=yes",
"--with-numad=no --with-numactl=yes", "--with-numad=yes
--with-numactl=yes" works fine after the change.
(cherry picked from commit b0f3244554b7b67183615a353897a2e19e0c6d68)

13 years agosnapshot: allow block devices past cgroup
Eric Blake [Mon, 7 May 2012 22:56:08 +0000 (16:56 -0600)] 
snapshot: allow block devices past cgroup

It turns out that when cgroups are enabled, the use of a block device
for a snapshot target was failing with EPERM due to libvirt failing
to add the block device to the cgroup whitelist.  See also
https://bugzilla.redhat.com/show_bug.cgi?id=810200

* src/qemu/qemu_driver.c
(qemuDomainSnapshotCreateSingleDiskActive)
(qemuDomainSnapshotUndoSingleDiskActive): Account for cgroup.
(qemuDomainSnapshotCreateDiskActive): Update caller.
(cherry picked from commit 8be304ecb9c8294c9ca3ef7324dea8228e496f9c)

13 years agotests: add some self-documentation to tests
Alon Levy [Tue, 8 May 2012 17:46:45 +0000 (20:46 +0300)] 
tests: add some self-documentation to tests

Alon tried './qemuxml2argvtest --help' to figure out a test failure,
but it didn't help.  The information is in HACKING, but it doesn't
hurt to make the tests also provide their own help.

Signed-off-by: Alon Levy <alevy@redhat.com>
Signed-off-by: Eric Blake <eblake@redhat.com>
(cherry picked from commit 75d155ec26fd2d6f4f95c3238b44309dca6caf34)

13 years agobuild: avoid link failure on Windows
Eric Blake [Wed, 2 May 2012 18:53:04 +0000 (12:53 -0600)] 
build: avoid link failure on Windows

We only know -lpthread exists on platforms where we build
threads-pthread.c; but when we build threads-win32.c, LIB_PTHREAD
is empty.

* tests/Makefile.am (shunloadtest_LDADD): Use correct library.
(cherry picked from commit 0ca336b32bed7e77e9e7cce6dd2b671b6c308c05)

13 years agovirsh: avoid heap corruption leading to virsh abort
Jim Meyering [Mon, 7 May 2012 19:22:09 +0000 (21:22 +0200)] 
virsh: avoid heap corruption leading to virsh abort

* tools/virsh.c (vshParseSnapshotDiskspec): Fix off-by-3 memmove
that would corrupt heap when parsing escaped --diskspec comma.
Bug introduced via commit v0.9.4-260-g35d52b5.
(cherry picked from commit c6694ab85c207e51c6f39cd958c4323b636d8d8d)

13 years agoutil: set src_pid for virNetlinkCommand when appropriate
Laine Stump [Fri, 4 May 2012 17:48:20 +0000 (13:48 -0400)] 
util: set src_pid for virNetlinkCommand when appropriate

Until now, the nl_pid of the source address of every message sent by
virNetlinkCommand has been set to the value of getpid(). Most of the
time this doesn't matter, and in the one case where it does
(communication with lldpad), it previously was the proper thing to do,
because the netlink event service (which listens on a netlink socket
for unsolicited messages from lldpad) coincidentally always happened
to bind with a local nl_pid == getpid().

With the fix for:

  https://bugzilla.redhat.com/show_bug.cgi?id=816465

that particular nl_pid is now effectively a reserved value, so the
netlink event service will always bind to something else
(coincidentally "getpid() + (1 << 22)", but it really could be
anything). The result is that communication between lldpad and
libvirtd is broken (lldpad gets a "disconnected" error when it tries
to send a directed message).

The solution to this problem caused by a solution, is to query the
netlink event service's nlhandle for its "local_port", and send that
as the source nl_pid (but only when sending to lldpad, of course - in
other cases we maintain the old behavior of sending getpid()).

There are two cases where a message is being directed at lldpad - one
in virNetDevLinkDump, and one in virNetDevVPortProfileOpSetLink.

The case of virNetDevVPortProfileOpSetLink is simplest to explain -
only if !nltarget_kernel, i.e. the message isn't targetted for the
kernel, is the dst_pid set (by calling
virNetDevVPortProfileGetLldpadPid()), so only in that case do we call
virNetlinkEventServiceLocalPid() to set src_pid.

For virNetDevLinkDump, it's a bit more complicated. The call to
virNetDevVPortProfileGetLldpadPid() was effectively up one level (in
virNetDevVPortProfileOpCommon), although obscured by an unnecessary
passing of a function pointer. This patch removes the function
pointer, and calls virNetDevVPortProfileGetLldpadPid() directly in
virNetDevVPortProfileOpCommon - if it's doing this, it knows that it
should also call virNetlinkEventServiceLocalPid() to set src_pid too;
then it just passes src_pid and dst_pid down to
virNetDevLinkDump. Since (src_pid == 0 && dst_pid == 0) implies that
the kernel is the destination, there is no longer any need to send
nltarget_kernel as an arg to virNetDevLinkDump, so it's been removed.

The disparity between src_pid being int and dst_pid being uint32_t may
be a bit disconcerting to some, but I didn't want to complicate
virNetlinkEventServiceLocalPid() by having status returned separately
from the value.
(cherry picked from commit cc0737713a8e1ad37fc9d5393b4ea514f7708138)

13 years agoutil: function to get local nl_pid used by netlink event socket
Laine Stump [Fri, 4 May 2012 17:19:51 +0000 (13:19 -0400)] 
util: function to get local nl_pid used by netlink event socket

This value will be needed to set the src_pid when sending netlink
messages to lldpad. It is part of the solution to:

  https://bugzilla.redhat.com/show_bug.cgi?id=816465

Note that libnl's port generation algorithm guarantees that the
nl_socket_get_local_port() will always be > 0 (since it is "getpid() +
(n << 22>" where n is always < 1024), so it is okay to cast the
uint32_t to int (thus allowing us to use -1 as an error sentinel).
(cherry picked from commit c99e93758d44e7c6d62dbd3d064b6df61d1fefb2)

13 years agoutil: allow specifying both src and dst pid in virNetlinkCommand
Laine Stump [Fri, 4 May 2012 16:58:36 +0000 (12:58 -0400)] 
util: allow specifying both src and dst pid in virNetlinkCommand

Until now, virNetlinkCommand has assumed that the nl_pid in the source
address of outgoing netlink messages should always be the return value
of getpid(). In most cases it actually doesn't matter, but in the case
of communication with lldpad, lldpad saves this info and later uses it
to send netlink messages back to libvirt. A recent patch to fix Bug
816465 changed the order of the universe such that the netlink event
service socket is no longer bound with nl_pid == getpid(), so lldpad
could no longer send unsolicited messages to libvirtd. Adding src_pid
as an argument to virNetlinkCommand() is the first step in notifying
lldpad of the proper address of the netlink event service socket.
(cherry picked from commit cca7bb1fb583459824f7a42be0406d0833a80593)

13 years agoutil: fix libvirtd startup failure due to netlink error
Laine Stump [Thu, 3 May 2012 14:39:04 +0000 (10:39 -0400)] 
util: fix libvirtd startup failure due to netlink error

This is part of the solution to the problem detailed in:

  https://bugzilla.redhat.com/show_bug.cgi?id=816465

and further detailed in

  https://www.redhat.com/archives/libvir-list/2012-May/msg00202.htm

A short explanation is included in the comments of the patch itself.

Note that this patch by itself breaks communication between lldpad and
libvirtd, so the other 3 patches in the series must be applied at the
same time as this patch.
(cherry picked from commit 642973135c54b93242c4548ef27d591b52b0994c)

Conflicts:

daemon/libvirtd.c

13 years agoqemu: call usb search function for hostdev initialization and hotplug
Guannan Ren [Sun, 6 May 2012 14:45:05 +0000 (22:45 +0800)] 
qemu: call usb search function for hostdev initialization and hotplug

src/qemu/qemu_hostdev.c:
refactor qemuPrepareHostdevUSBDevices function, make it focus on
adding usb device to activeUsbHostdevs after check. After that,
the usb hotplug function qemuDomainAttachHostDevice also could use
it.
expand qemuPrepareHostUSBDevices to perform the usb search,
rollback on failure.

src/qemu/qemu_hotplug.c:
If there are multiple usb devices available with same vendorID and productID,
but with different value of "bus, device", we give an error to let user
use <address> to specify the desired one.
(cherry picked from commit 05abd1507d66aabb6cad12eeafeb4c4d1911c585)

13 years agousb: create functions to search usb device accurately
Guannan Ren [Fri, 4 May 2012 07:49:58 +0000 (15:49 +0800)] 
usb: create functions to search usb device accurately

usbFindDevice():get usb device according to
                idVendor, idProduct, bus, device
                it is the exact match of the four parameters

usbFindDeviceByBus():get usb device according to bus, device
                  it returns only one usb device same as usbFindDevice

usbFindDeviceByVendor():get usb device according to idVendor,idProduct
                     it probably returns multiple usb devices.

usbDeviceSearch(): a helper function to do the actual search
(cherry picked from commit 9914477efc9764f691ca50faca6592a2d4fecec8)

13 years agorpm: Handle different source URLs for maint releases
Cole Robinson [Sun, 6 May 2012 18:09:22 +0000 (14:09 -0400)] 
rpm: Handle different source URLs for maint releases
(cherry picked from commit f4345ac21fead319a22a5761e86a46752df23402)

Conflicts:

libvirt.spec.in

13 years agoqemu: Emit compatible XML when migrating a domain
Jiri Denemark [Fri, 4 May 2012 19:23:17 +0000 (21:23 +0200)] 
qemu: Emit compatible XML when migrating a domain

When we added the default USB controller into domain XML, we efficiently
broke migration to older versions of libvirt that didn't support USB
controllers at all (0.9.4 and earlier) even for domains that don't use
anything that the older libvirt can't provide. We still want to present
the default USB controller in any XML seen by a user/app but we can
safely remove it from the domain XML used during migration. If we are
migrating to a new enough libvirt, it will add the controller XML back,
while older libvirt won't be confused with it although it will still
tell qemu to create the controller.

Similar approach can be used in the future whenever we find out we
always enabled some kind of device without properly advertising it in
domain XML.
(cherry picked from commit 409b5f549530e7b3a33f4505f2cad2e26896107c)

13 years agoqemu: Don't use virDomainDefFormat* directly
Jiri Denemark [Fri, 4 May 2012 19:00:13 +0000 (21:00 +0200)] 
qemu: Don't use virDomainDefFormat* directly

Always use appropriate qemuDomain{,Def}Format wrapper since it may do
some additional magic based on the flags.
(cherry picked from commit cd603008b1ddde1c549e6efd40fa2ea32fbc8053)

13 years agoqemu: reject blockiotune if qemu too old
Eric Blake [Fri, 4 May 2012 16:24:17 +0000 (10:24 -0600)] 
qemu: reject blockiotune if qemu too old

Commit 4c82f09e added a capability check for qemu per-device io
throttling, but only applied it to domain startup.  As mentioned
in the previous commit (98cec05), the user can still get an 'internal
error' message during a hotplug attempt, when the monitor command
doesn't exist.  It is confusing to allow tuning on inactive domains
only to then be rejected when starting the domain.

* src/qemu/qemu_driver.c (qemuDomainSetBlockIoTune): Reject
offline tuning if online can't match it.
(cherry picked from commit 13f9a19326a7727e07ab689ea5392255fbd5cd4f)

13 years agoqemu: don't modify domain on failed blockiotune
Eric Blake [Fri, 4 May 2012 15:43:23 +0000 (09:43 -0600)] 
qemu: don't modify domain on failed blockiotune

If you have a qemu build that lacks the blockio tune monitor command,
then this command:

$ virsh blkdeviotune rhel6u2 hda --total_bytes_sec 1000
error: Unable to change block I/O throttle
error: internal error Unexpected error

fails as expected (well, the error message is lousy), but the next
dumpxml shows that the domain was modified anyway.  Worse, that means
if you save the domain then restore it, the restore will likely fail
due to throttling being unsupported, even though no throttling should
even be active because the monitor command failed in the first place.

* src/qemu/qemu_driver.c (qemuDomainSetBlockIoTune): Check for
error before making modification permanent.
(cherry picked from commit 98cec052882c9acb5e3b8bc3f8e8a37a2cdb2982)

13 years agoutil: remove error log from stubs of virNetlinkEventServiceStart|Stop
Laine Stump [Thu, 3 May 2012 15:52:17 +0000 (11:52 -0400)] 
util: remove error log from stubs of virNetlinkEventServiceStart|Stop

These two functions are called from main() on all platforms, and
always return success on platforms that don't support libnl. They
still log an error message, though, which doesn't make sense - they
should just be NOPs on those platforms. (Per a suggestion during
review, I've turned the logs into debug messages rather than removing
them completely).
(cherry picked from commit bae4ff282bb95c4a0b035a0e3c00964f88e81d25)

13 years agonode_device: fix possible non-terminated string
Stefan Berger [Fri, 4 May 2012 17:22:22 +0000 (13:22 -0400)] 
node_device: fix possible non-terminated string

Error: STRING_NULL:
/libvirt/src/node_device/node_device_linux_sysfs.c:80:
string_null_argument: Function "saferead" does not terminate string "*buf".
/libvirt/src/util/util.c:101:
string_null_argument: Function "read" fills array "*buf" with a non-terminated string.
/libvirt/src/node_device/node_device_linux_sysfs.c:87:
string_null: Passing unterminated string "buf" to a function expecting a null-terminated string.

(cherry picked from commit 43d1616ff59eb6dd5d1f484d1e9de9133ca034a6)

13 years agouuid: fix possible non-terminated string
Stefan Berger [Fri, 4 May 2012 17:22:22 +0000 (13:22 -0400)] 
uuid: fix possible non-terminated string

Error: STRING_NULL:
/libvirt/src/util/uuid.c:273:
string_null_argument: Function "getDMISystemUUID" does not terminate string "*dmiuuid".
/libvirt/src/util/uuid.c:241:
string_null_argument: Function "saferead" fills array "*uuid" with a non-terminated string.
/libvirt/src/util/util.c:101:
string_null_argument: Function "read" fills array "*buf" with a non-terminated string.
/libvirt/src/util/uuid.c:274:
string_null: Passing unterminated string "dmiuuid" to a function expecting a null-terminated string.
/libvirt/src/util/uuid.c:138:
var_assign_parm: Assigning: "cur" = "uuidstr". They now point to the same thing.
/libvirt/src/util/uuid.c:164:
string_null_sink_loop: Searching for null termination in an unterminated array "cur".

(cherry picked from commit b4586051ec15bdf853c8440a1dd716a4467d77d7)

13 years agotests: fix resource leak
Stefan Berger [Fri, 4 May 2012 14:42:09 +0000 (10:42 -0400)] 
tests: fix resource leak

Error: RESOURCE_LEAK:
/libvirt/tests/qemuxml2argvtest.c:47:
alloc_arg: Calling allocation function "virAlloc" on "ret".
/libvirt/src/util/memory.c:101:
alloc_fn: Storage is returned from allocation function "calloc".
/libvirt/src/util/memory.c:101:
var_assign: Assigning: "*((void **)ptrptr)" = "calloc(1UL, size)".
/libvirt/tests/qemuxml2argvtest.c:54:
leaked_storage: Variable "ret" going out of scope leaks the storage it points to.

(cherry picked from commit a01e67217c5e0a3fcba260e44c15b0fa94b47782)

13 years agoqemu: fix resource leak
Stefan Berger [Fri, 4 May 2012 14:42:09 +0000 (10:42 -0400)] 
qemu: fix resource leak

Error: RESOURCE_LEAK:
/libvirt/src/qemu/qemu_driver.c:6968:
alloc_fn: Calling allocation function "calloc".
/libvirt/src/qemu/qemu_driver.c:6968:
var_assign: Assigning: "nodeset" =  storage returned from "calloc(1UL, 1UL)".
/libvirt/src/qemu/qemu_driver.c:6977:
noescape: Variable "nodeset" is not freed or pointed-to in function "virTypedParameterAssign".
/libvirt/src/qemu/qemu_driver.c:6997:
leaked_storage: Variable "nodeset" going out of scope leaks the storage it points to.

(cherry picked from commit c0774482ff9d0689e13eab5bed1da69867dd1902)

13 years agovmx: fix resource leak
Stefan Berger [Fri, 4 May 2012 14:42:09 +0000 (10:42 -0400)] 
vmx: fix resource leak

Error: RESOURCE_LEAK:
/libvirt/src/vmx/vmx.c:2431:
alloc_fn: Calling allocation function "calloc".
/libvirt/src/vmx/vmx.c:2431:
var_assign: Assigning: "networkName" =  storage returned from "calloc(1UL, 1UL)".
/libvirt/src/vmx/vmx.c:2495:
leaked_storage: Variable "networkName" going out of scope leaks the storage it points to.

(cherry picked from commit 409a637eb1dc99ac1b85d3876302f876cb38a536)

13 years agoCoverity: Fix resource leak in virnetlink.c
Osier Yang [Wed, 2 May 2012 14:51:38 +0000 (22:51 +0800)] 
Coverity: Fix resource leak in virnetlink.c
(cherry picked from commit fd2b41574e05510ddeffbf9acbf06584acb3c2b2)

13 years agoCoverity: Fix resource leak in nodeinfo.c
Osier Yang [Wed, 2 May 2012 15:18:03 +0000 (23:18 +0800)] 
Coverity: Fix resource leak in nodeinfo.c

Error: RESOURCE_LEAK:
/builddir/build/BUILD/libvirt-0.9.10/src/nodeinfo.c:629: alloc_fn: Calling allocation function "fopen".
/builddir/build/BUILD/libvirt-0.9.10/src/nodeinfo.c:629: var_assign: Assigning: "cpuinfo" =  storage returned from "fopen("/proc/cpuinfo", "r")".
/builddir/build/BUILD/libvirt-0.9.10/src/nodeinfo.c:638: leaked_storage: Variable "cpuinfo" going out of scope leaks the storage it points to.
(cherry picked from commit 739cfc31619e9ba8ee450e8762261285093f1f47)

13 years agoCoverity: Fix resource leak in test driver
Osier Yang [Wed, 2 May 2012 14:51:36 +0000 (22:51 +0800)] 
Coverity: Fix resource leak in test driver

Error: RESOURCE_LEAK:
/builddir/build/BUILD/libvirt-0.9.10/src/test/test_driver.c:1041: alloc_arg: Calling allocation function "virXPathNodeSet" on "devs".
/builddir/build/BUILD/libvirt-0.9.10/src/util/xml.c:621: alloc_arg: "virAllocN" allocates memory that is stored into "*list".
/builddir/build/BUILD/libvirt-0.9.10/src/util/memory.c:129: alloc_fn: Storage is returned from allocation function "calloc".
/builddir/build/BUILD/libvirt-0.9.10/src/util/memory.c:129: var_assign: Assigning: "*((void **)ptrptr)" = "calloc(count, size)".
/builddir/build/BUILD/libvirt-0.9.10/src/util/xml.c:625: noescape: Variable "*list" is not freed or pointed-to in function "memcpy".
/builddir/build/BUILD/libvirt-0.9.10/src/test/test_driver.c:1098: leaked_storage: Variable "devs" going out of scope leaks the storage it points to.
(cherry picked from commit ad4d4ad036c80806afbfa108fb2d47bb73497d31)

13 years agoCoverity: Fix resource leak in xen driver
Osier Yang [Wed, 2 May 2012 14:51:35 +0000 (22:51 +0800)] 
Coverity: Fix resource leak in xen driver

Coverity logs:

Error: RESOURCE_LEAK:
/builddir/build/BUILD/libvirt-0.9.10/src/xen/xen_inotify.c:103: alloc_fn: Calling allocation function "xenDaemonLookupByUUID".
/builddir/build/BUILD/libvirt-0.9.10/src/xen/xend_internal.c:2534: alloc_fn: Storage is returned from allocation function "virGetDomain".
/builddir/build/BUILD/libvirt-0.9.10/src/datatypes.c:191: alloc_arg: "virAlloc" allocates memory that is stored into "ret".
/builddir/build/BUILD/libvirt-0.9.10/src/util/memory.c:101: alloc_fn: Storage is returned from allocation function "calloc".
/builddir/build/BUILD/libvirt-0.9.10/src/util/memory.c:101: var_assign: Assigning: "*((void **)ptrptr)" = "calloc(1UL, size)".
/builddir/build/BUILD/libvirt-0.9.10/src/datatypes.c:210: return_alloc: Returning allocated memory "ret".
/builddir/build/BUILD/libvirt-0.9.10/src/xen/xend_internal.c:2534: var_assign: Assigning: "ret" = "virGetDomain(conn, name, uuid)".
/builddir/build/BUILD/libvirt-0.9.10/src/xen/xend_internal.c:2541: return_alloc: Returning allocated memory "ret".
/builddir/build/BUILD/libvirt-0.9.10/src/xen/xen_inotify.c:103: var_assign: Assigning: "dom" =  storage returned from "xenDaemonLookupByUUID(conn, rawuuid)".
/builddir/build/BUILD/libvirt-0.9.10/src/xen/xen_inotify.c:126: leaked_storage: Variable "dom" going out of scope leaks the storage it points to.

Error: RESOURCE_LEAK:
/builddir/build/BUILD/libvirt-0.9.10/src/xen/xen_hypervisor.c:2742: alloc_fn: Calling allocation function "fopen".
/builddir/build/BUILD/libvirt-0.9.10/src/xen/xen_hypervisor.c:2742: var_assign: Assigning: "cpuinfo" =  storage returned from "fopen("/proc/cpuinfo", "r")".
/builddir/build/BUILD/libvirt-0.9.10/src/xen/xen_hypervisor.c:2763: noescape: Variable "cpuinfo" is not freed or pointed-to in function "xenHypervisorMakeCapabilitiesInternal".
/builddir/build/BUILD/libvirt-0.9.10/src/xen/xen_hypervisor.c:2574:45: noescape: "xenHypervisorMakeCapabilitiesInternal" does not free or save its pointer parameter "cpuinfo".
/builddir/build/BUILD/libvirt-0.9.10/src/xen/xen_hypervisor.c:2768: leaked_storage: Variable "cpuinfo" going out of scope leaks the storage it points to.

Error: RESOURCE_LEAK:
/builddir/build/BUILD/libvirt-0.9.10/src/xen/xen_hypervisor.c:2752: alloc_fn: Calling allocation function "fopen".
/builddir/build/BUILD/libvirt-0.9.10/src/xen/xen_hypervisor.c:2752: var_assign: Assigning: "capabilities" =  storage returned from "fopen("/sys/hypervisor/properties/capabilities", "r")".
/builddir/build/BUILD/libvirt-0.9.10/src/xen/xen_hypervisor.c:2763: noescape: Variable "capabilities" is not freed or pointed-to in function "xenHypervisorMakeCapabilitiesInternal".
/builddir/build/BUILD/libvirt-0.9.10/src/xen/xen_hypervisor.c:2574:60: noescape: "xenHypervisorMakeCapabilitiesInternal" does not free or save its pointer parameter "capabilities".
/builddir/build/BUILD/libvirt-0.9.10/src/xen/xen_hypervisor.c:2768: leaked_storage: Variable "capabilities" going out of scope leaks the storage it points to.
(cherry picked from commit e91e0ab6042879a170b22bb942cf4051f8900e46)

13 years agoCoverity: Fix resource leaks in phyp driver
Osier Yang [Fri, 4 May 2012 02:25:58 +0000 (10:25 +0800)] 
Coverity: Fix resource leaks in phyp driver

Coverity logs:

Error: RESOURCE_LEAK:
/builddir/build/BUILD/libvirt-0.9.10/src/phyp/phyp_driver.c:523: alloc_fn: Calling allocation function "fopen".
/builddir/build/BUILD/libvirt-0.9.10/src/phyp/phyp_driver.c:523: var_assign: Assigning: "fd" =  storage returned from "fopen(local_file, "rb")".
/builddir/build/BUILD/libvirt-0.9.10/src/phyp/phyp_driver.c:540: noescape: Variable "fd" is not freed or pointed-to in function "fread".
/builddir/build/BUILD/libvirt-0.9.10/src/phyp/phyp_driver.c:542: noescape: Variable "fd" is not freed or pointed-to in function "feof".
/builddir/build/BUILD/libvirt-0.9.10/src/phyp/phyp_driver.c:575: leaked_storage: Variable "fd" going out of scope leaks the storage it points to.
/builddir/build/BUILD/libvirt-0.9.10/src/phyp/phyp_driver.c:585: leaked_storage: Variable "fd" going out of scope leaks the storage it points to.

Error: RESOURCE_LEAK:
/builddir/build/BUILD/libvirt-0.9.10/src/phyp/phyp_driver.c:2088: alloc_fn: Calling allocation function "phypVolumeLookupByName".
/builddir/build/BUILD/libvirt-0.9.10/src/phyp/phyp_driver.c:2026: alloc_fn: Storage is returned from allocation function "virGetStorageVol".
/builddir/build/BUILD/libvirt-0.9.10/src/datatypes.c:724: alloc_arg: "virAlloc" allocates memory that is stored into "ret".
/builddir/build/BUILD/libvirt-0.9.10/src/util/memory.c:101: alloc_fn: Storage is returned from allocation function "calloc".
/builddir/build/BUILD/libvirt-0.9.10/src/util/memory.c:101: var_assign: Assigning: "*((void **)ptrptr)" = "calloc(1UL, size)".
/builddir/build/BUILD/libvirt-0.9.10/src/datatypes.c:753: return_alloc: Returning allocated memory "ret".
/builddir/build/BUILD/libvirt-0.9.10/src/phyp/phyp_driver.c:2026: var_assign: Assigning: "vol" = "virGetStorageVol(pool->conn, pool->name, volname, key)".
/builddir/build/BUILD/libvirt-0.9.10/src/phyp/phyp_driver.c:2030: return_alloc: Returning allocated memory "vol".
/builddir/build/BUILD/libvirt-0.9.10/src/phyp/phyp_driver.c:2088: leaked_storage: Failing to save storage allocated by "phypVolumeLookupByName(pool, voldef->name)" leaks it.

Error: RESOURCE_LEAK:
/builddir/build/BUILD/libvirt-0.9.10/src/phyp/phyp_driver.c:2725: alloc_fn: Calling allocation function "phypGetStoragePoolLookUpByUUID".
/builddir/build/BUILD/libvirt-0.9.10/src/phyp/phyp_driver.c:2689: alloc_fn: Storage is returned from allocation function "virGetStoragePool".
/builddir/build/BUILD/libvirt-0.9.10/src/datatypes.c:592: alloc_arg: "virAlloc" allocates memory that is stored into "ret".
/builddir/build/BUILD/libvirt-0.9.10/src/util/memory.c:101: alloc_fn: Storage is returned from allocation function "calloc".
/builddir/build/BUILD/libvirt-0.9.10/src/util/memory.c:101: var_assign: Assigning: "*((void **)ptrptr)" = "calloc(1UL, size)".
/builddir/build/BUILD/libvirt-0.9.10/src/datatypes.c:610: return_alloc: Returning allocated memory "ret".
/builddir/build/BUILD/libvirt-0.9.10/src/phyp/phyp_driver.c:2689: var_assign: Assigning: "sp" = "virGetStoragePool(conn, pools[i], uuid)".
/builddir/build/BUILD/libvirt-0.9.10/src/phyp/phyp_driver.c:2694: return_alloc: Returning allocated memory "sp".
/builddir/build/BUILD/libvirt-0.9.10/src/phyp/phyp_driver.c:2725: leaked_storage: Failing to save storage allocated by "phypGetStoragePoolLookUpByUUID(conn, def->uuid)" leaks it.

Error: RESOURCE_LEAK:
/builddir/build/BUILD/libvirt-0.9.10/src/phyp/phyp_driver.c:2719: alloc_fn: Calling allocation function "phypStoragePoolLookupByName".
/builddir/build/BUILD/libvirt-0.9.10/src/phyp/phyp_driver.c:2254: alloc_fn: Storage is returned from allocation function "virGetStoragePool".
/builddir/build/BUILD/libvirt-0.9.10/src/datatypes.c:592: alloc_arg: "virAlloc" allocates memory that is stored into "ret".
/builddir/build/BUILD/libvirt-0.9.10/src/util/memory.c:101: alloc_fn: Storage is returned from allocation function "calloc".
/builddir/build/BUILD/libvirt-0.9.10/src/util/memory.c:101: var_assign: Assigning: "*((void **)ptrptr)" = "calloc(1UL, size)".
/builddir/build/BUILD/libvirt-0.9.10/src/datatypes.c:610: return_alloc: Returning allocated memory "ret".
/builddir/build/BUILD/libvirt-0.9.10/src/phyp/phyp_driver.c:2254: return_alloc_fn: Directly returning storage allocated by "virGetStoragePool".
/builddir/build/BUILD/libvirt-0.9.10/src/phyp/phyp_driver.c:2719: leaked_storage: Failing to save storage allocated by "phypStoragePoolLookupByName(conn, def->name)" leaks it.

Error: RESOURCE_LEAK:
/builddir/build/BUILD/libvirt-0.9.10/src/phyp/phyp_driver.c:2270: alloc_fn: Calling allocation function "phypStoragePoolLookupByName".
/builddir/build/BUILD/libvirt-0.9.10/src/phyp/phyp_driver.c:2254: alloc_fn: Storage is returned from allocation function "virGetStoragePool".
/builddir/build/BUILD/libvirt-0.9.10/src/datatypes.c:592: alloc_arg: "virAlloc" allocates memory that is stored into "ret".
/builddir/build/BUILD/libvirt-0.9.10/src/util/memory.c:101: alloc_fn: Storage is returned from allocation function "calloc".
/builddir/build/BUILD/libvirt-0.9.10/src/util/memory.c:101: var_assign: Assigning: "*((void **)ptrptr)" = "calloc(1UL, size)".
/builddir/build/BUILD/libvirt-0.9.10/src/datatypes.c:610: return_alloc: Returning allocated memory "ret".
/builddir/build/BUILD/libvirt-0.9.10/src/phyp/phyp_driver.c:2254: return_alloc_fn: Directly returning storage allocated by "virGetStoragePool".
/builddir/build/BUILD/libvirt-0.9.10/src/phyp/phyp_driver.c:2270: var_assign: Assigning: "sp" =  storage returned from "phypStoragePoolLookupByName(vol->conn, vol->pool)".
/builddir/build/BUILD/libvirt-0.9.10/src/phyp/phyp_driver.c:2324: leaked_storage: Variable "sp" going out of scope leaks the storage it points to.
/builddir/build/BUILD/libvirt-0.9.10/src/phyp/phyp_driver.c:2327: leaked_storage: Variable "sp" going out of scope leaks the storage it points t
(cherry picked from commit cff0d342adbbb955664c781b6c51bfd9b9d738b8)

13 years agoCoverity: Fix the forward_null error in Python binding codes
Osier Yang [Wed, 2 May 2012 15:05:59 +0000 (23:05 +0800)] 
Coverity: Fix the forward_null error in Python binding codes

Related coverity log:

Error: FORWARD_NULL:
/builddir/build/BUILD/libvirt-0.9.10/python/libvirt-override.c:355:
assign_zero: Assigning: "params" = 0.
/builddir/build/BUILD/libvirt-0.9.10/python/libvirt-override.c:458:
var_deref_model: Passing null variable "params" to function
"getPyVirTypedParameter", which dereferences it. (The dereference is assumed on
the basis of the 'nonnull' parameter attribute.)
(cherry picked from commit b80f4db9931ceea4bec1d178322058df77ece7a4)

13 years agobuild: fix build on cygwin
Eric Blake [Thu, 3 May 2012 20:39:19 +0000 (14:39 -0600)] 
build: fix build on cygwin

On cygwin, <rpc/rpc.h> lives in a different directory than
/usr/include, so anything that uses it must modify CFLAGS.  This
previously tripped up just 'make check', but now that we build
all test programs unconditionally, it also trips up 'make'.

* tests/Makefile.am (virnetmessagetest_CFLAGS): Find rpc headers.
(cherry picked from commit c898263826794ffded3301baafcf15d268657021)

13 years agoCorrect indent errors in the function qemuDomainNetsRestart
Li Zhang [Thu, 3 May 2012 05:52:44 +0000 (13:52 +0800)] 
Correct indent errors in the function qemuDomainNetsRestart

qemuDomainNetsRestart indents with 3 spaces.

This patch is to correct it.

Signed-off-by: Li Zhang <zhlcindy@linux.vnet.ibm.com>
(cherry picked from commit 0d631e91823529a7ca7631a7f708a4fdbc9ed51e)

13 years agobuild: update pid_t type static check
Marc-André Lureau [Fri, 20 Apr 2012 13:13:52 +0000 (15:13 +0200)] 
build: update pid_t type static check

The code uses long long for pid_t now.
It fails on mingw64 without this change.
(cherry picked from commit d08c28f65faf85804fe7a7295a1694bdb0d225c3)

13 years agobuild: fix output of pid values
Marc-André Lureau [Fri, 20 Apr 2012 13:13:51 +0000 (15:13 +0200)] 
build: fix output of pid values

Fix a few more places where pid_t is printed with wrong type
(cherry picked from commit ca1bf4bd7433f05862a6c46d7da4dacaa6a89e2b)

13 years agovirsh: make -h always give help
Eric Blake [Mon, 30 Apr 2012 20:19:11 +0000 (14:19 -0600)] 
virsh: make -h always give help

https://bugzilla.redhat.com/show_bug.cgi?id=817244 mentions that
unlike most other tools, where --help or --version prevent all
further parsing of all later options, virsh was strange in that
--version stopped parsing but --help tried to plow on to the end.
There was no rationale for this original implementation (since
2005!), so I think we can safely conform to common usage patterns.

* tools/virsh.c (main): Drop useless 'help' variable.
(cherry picked from commit 46e5d36b8998c53fbea9c589f618ae906103fec7)

13 years agobuild: make ATTRIBUTE_NONNULL() a NOP unless STATIC_ANALYSIS is on
Laine Stump [Wed, 25 Apr 2012 20:10:01 +0000 (16:10 -0400)] 
build: make ATTRIBUTE_NONNULL() a NOP unless STATIC_ANALYSIS is on

The ATTRIBUTE_NONNULL(m) macro normally resolves to the gcc builtin
__attribute__((__nonnull__(m))). The effect of this in gcc is
unfortunately only to make gcc believe that "m" can never possibly be
NULL, *not* to add in any checks to guarantee that it isn't ever NULL
(i.e. it is an optimization aid, *not* something to verify code
correctness.) - see the following gcc bug report for more details:

  http://gcc.gnu.org/bugzilla/show_bug.cgi?id=17308

Static source analyzers such as clang and coverity apparently can use
ATTRIBUTE_NONNULL(), though, to detect dead code (in the case that the
arg really is guaranteed non-NULL), as well as situations where an
obviously NULL arg is given to the function.

https://bugzilla.redhat.com/show_bug.cgi?id=815270 is a good example
of a bug caused by erroneous application of ATTRIBUTE_NONNULL().
Several people spent a long time staring at this code and not finding
the problem, because the problem wasn't in the function itself, but in
the prototype that specified ATTRIBUTE_NONNULL() for an arg that
actually *wasn't* always non-NULL, and caused a segv when dereferenced
(even though the code that dereferenced the pointer was inside an if()
that checked for a NULL pointer, that code was optimized out by gcc).

There may be some very small gain to be had from the optimizations
that can be inferred from ATTRIBUTE_NONNULL(), but it seems safer to
err on the side of generating code that behaves as expected, while
turning on the attribute for static analyzers.
(cherry picked from commit eefb881d4683d50882b43e5b28b0e94657cd0c9c)

13 years agoMake lxcContainerSetStdio the last thing to be called in container startup
Daniel P. Berrange [Tue, 1 May 2012 09:48:52 +0000 (10:48 +0100)] 
Make lxcContainerSetStdio the last thing to be called in container startup

Once lxcContainerSetStdio is invoked, logging will not work as
expected in libvirt_lxc. So make sure this is the last thing to
be called, in particular after setting the security process label
(cherry picked from commit 07cf96ecc7b0933c67febb1c5bd50fc0bbeba263)

13 years agoEnsure logging is initialized early in libvirt_lxc
Daniel P. Berrange [Tue, 1 May 2012 09:47:53 +0000 (10:47 +0100)] 
Ensure logging is initialized early in libvirt_lxc

The virLogSetFromEnv call was done too late in startup to
catch many log messages (eg from security driver initialization).
To assist debugging also explicitly log the security details
at startup
(cherry picked from commit 43ee98731256673b903d7ddf996eec7b4f72b99d)

13 years agoEnsure LXC security driver is set unconditonally
Daniel P. Berrange [Tue, 1 May 2012 09:46:08 +0000 (10:46 +0100)] 
Ensure LXC security driver is set unconditonally

The driver->securityDriverName field may be NULL, if automatic
probing is used to determine security driver. This meant that
unless selinux was explicitly requested in lxc.conf, it was
not being sent to the libvirt_lxc process.

The driver->securityManager field is guaranteed non-NULL, since
there will always be the 'none' security driver present if
nothing else exists. So use that to set the driver name for
libvirt_lxc

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
(cherry picked from commit 3746b070e79e5fe573f8b0bf32095a34f91b1eba)

13 years agoEnsure libvirt_lxc process loads the live XML config
Daniel P. Berrange [Mon, 30 Apr 2012 14:48:57 +0000 (15:48 +0100)] 
Ensure libvirt_lxc process loads the live XML config

Currently the libvirt_lxc process uses VIR_DOMAIN_XML_INACTIVE
when loading the XML for the container. This means it loses
any dynamic data such as the, just allocated, SELinux label.

Further there is an inconsistency in the libvirt LXC driver
whereby it saves the live config XML and then later overwrites
the file with the live status XML instead. Add a comment about
this for future reference.

* src/lxc/lxc_controller.c: Remove VIR_DOMAIN_XML_INACTIVE
  when loading XML
* src/lxc/lxc_driver.c: Add comment about inconsistent
  config file formats

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
(cherry picked from commit eb06375a84c841b769ba4ca89f060ea72a66f1f8)

13 years agomaint: avoid false positives on unmarked diagnostics
Eric Blake [Mon, 30 Apr 2012 21:55:13 +0000 (15:55 -0600)] 
maint: avoid false positives on unmarked diagnostics

Otherwise, a string such as _("Don't use \"" VAR "\".") would
complain about unmarked diagnostics.

* cfg.mk (sc_libvirt_unmarked_diagnostics): Handle \" in message.
(cherry picked from commit 8f3728f85366d99568134053c959ba32ffb0e662)

13 years agoqemu: allow snapshotting of sheepdog and rbd disks
Josh Durgin [Tue, 1 May 2012 05:55:22 +0000 (22:55 -0700)] 
qemu: allow snapshotting of sheepdog and rbd disks

Signed-off-by: Josh Durgin <josh.durgin@dreamhost.com>
(cherry picked from commit b57e01532a1691897e27f20eccfd667a46ee374e)

13 years agoqemu: change rbd auth_supported separation character to ;
Josh Durgin [Tue, 1 May 2012 05:56:08 +0000 (22:56 -0700)] 
qemu: change rbd auth_supported separation character to ;

This works with newer qemu that doesn't allow escaping spaces.
It's backwards compatible as well.

Signed-off-by: Josh Durgin <josh.durgin@dreamhost.com>
(cherry picked from commit d50cae33356f9ac220a5e84e9218c13806c0b246)

13 years agoutil: Avoid libvirtd crash in virNetDevTapCreate
Alex Jia [Sat, 28 Apr 2012 11:01:40 +0000 (19:01 +0800)] 
util: Avoid libvirtd crash in virNetDevTapCreate

In fact, the 'tapfd' is always NULL, the function 'virNetDevTapCreate()' hasn't
assign 'fd' to 'tapfd', when the function 'virNetDevSetMAC()' is failed then
goto 'error' label, finally, the VIR_FORCE_CLOSE() will deref a NULL 'tapfd'.

* util/virnetdevtap.c (virNetDevTapCreateInBridgePort): fix a NULL pointer derefing.

* How to reproduce?

$ cat > /tmp/net.xml <<EOF
<network>
  <name>test</name>
  <forward mode='nat'/>
  <bridge name='br1' stp='off' delay='1' />
  <mac address='00:00:00:00:00:00'/>
  <ip address='192.168.100.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.100.2' end='192.168.100.254' />
    </dhcp>
  </ip>
</network>
EOF

$ virsh net-define /tmp/net.xml

$ virsh net-start test
error: Failed to start network brTest
error: End of file while reading data: Input/output error

Signed-off-by: Alex Jia <ajia@redhat.com>
(cherry picked from commit 5ee18aaa578768893918d67e0dc36fe72b73b736)

13 years agostorage: Break out the loop if duplicate pool is found
Osier Yang [Sat, 28 Apr 2012 08:18:44 +0000 (16:18 +0800)] 
storage: Break out the loop if duplicate pool is found

It doesn't break out the "for" loop even if duplicate pool is
found, and thus the "matchpool" could be overriden as NULL again
if there is different pool afterwards.

To address the problem in libvirt-user list:

https://www.redhat.com/archives/libvirt-users/2012-April/msg00150.html
(cherry picked from commit 980f12be7221b07e569fed24b372ea00c52d9511)

13 years agoqemu: Make sure qemu can access its directory in hugetlbfs
Jiri Denemark [Fri, 27 Apr 2012 13:50:22 +0000 (15:50 +0200)] 
qemu: Make sure qemu can access its directory in hugetlbfs

When libvirtd is started, we create "libvirt/qemu" directories under
hugetlbfs mount point. Only the "qemu" subdirectory is chowned to qemu
user and "libvirt" remains owned by root. If umask was too restrictive
when libvirtd started, qemu user may lose access to "qemu"
subdirectory. Let's explicitly grant search permissions to "libvirt"
directory for all users.
(cherry picked from commit 9d2ac5453e4d50c6f12b2f8a5078691fec60020b)

13 years agoqemu_agent: Report error class at least
Michal Privoznik [Thu, 12 Apr 2012 14:35:24 +0000 (16:35 +0200)] 
qemu_agent: Report error class at least

Currently, qemu GA is not providing 'desc' field for errors like
we are used to from qemu monitor. Therefore, we fall back to this
general 'unknown error' string. However, GA is reporting 'class' which
is not perfect, but much more helpful than generic error string.
Thus we should fall back to class firstly and if even no class
is presented, then we can fall back to that generic string.

Before this patch:
virsh # dompmsuspend --target mem f16
error: Domain f16 could not be suspended
error: internal error unable to execute QEMU command
'guest-suspend-ram': unknown QEMU command error

After this patch:
virsh # dompmsuspend --target mem f16
error: Domain f16 could not be suspended
error: internal error unable to execute QEMU command
'guest-suspend-ram': The command has not been found
(cherry picked from commit 378031088fc95e576e517702f0ce2aa1fb30d8c3)

13 years agoMore coverity findings addressed
Stefan Berger [Fri, 27 Apr 2012 21:25:35 +0000 (17:25 -0400)] 
More coverity findings addressed

More bug extermination in the category of:

Error: CHECKED_RETURN:

/libvirt/src/conf/network_conf.c:595:
check_return: Calling function "virAsprintf" without checking return value (as is done elsewhere 515 out of 543 times).

/libvirt/src/qemu/qemu_process.c:2780:
unchecked_value: No check of the return value of "virAsprintf(&msg, "was paused (%s)", virDomainPausedReasonTypeToString(reason))".

/libvirt/tests/commandtest.c:809:
check_return: Calling function "setsid" without checking return value (as is done elsewhere 4 out of 5 times).

/libvirt/tests/commandtest.c:830:
unchecked_value: No check of the return value of "virTestGetDebug()".

/libvirt/tests/commandtest.c:831:
check_return: Calling function "virTestGetVerbose" without checking return value (as is done elsewhere 41 out of 42 times).

/libvirt/tests/commandtest.c:833:
check_return: Calling function "virInitialize" without checking return value (as is done elsewhere 18 out of 21 times).

One note about the error in commandtest line 809: setsid() seems to fail when running the test -- could be removed ?

(cherry picked from commit 59b935f5ae92e0833e71cc3b490cf1e24eee43fb)

13 years agolxc: Fix coverity findings
Stefan Berger [Fri, 27 Apr 2012 18:39:17 +0000 (14:39 -0400)] 
lxc: Fix coverity findings

Error: UNINIT:
/libvirt/src/lxc/lxc_driver.c:1412:
var_decl: Declaring variable "fd" without initializer.
/libvirt/src/lxc/lxc_driver.c:1460:
uninit_use_in_call: Using uninitialized value "fd" when calling "virFileClose".
/libvirt/src/util/virfile.c:50:
read_parm: Reading a parameter value.

Error: DEADCODE:
/libvirt/src/lxc/lxc_controller.c:960:
dead_error_condition: On this path, the condition "ret == 4" cannot be true.
/libvirt/src/lxc/lxc_controller.c:959:
at_most: After this line, the value of "ret" is at most -1.
/libvirt/src/lxc/lxc_controller.c:959:
new_values: Noticing condition "ret < 0".
/libvirt/src/lxc/lxc_controller.c:961:
dead_error_line: Execution cannot reach this statement "continue;".

Error: UNINIT:
/libvirt/src/lxc/lxc_controller.c:1104:
var_decl: Declaring variable "consoles" without initializer.
/libvirt/src/lxc/lxc_controller.c:1237:
uninit_use: Using uninitialized value "consoles".

(cherry picked from commit f74471de4fe03eb79d670dc5c6e1191ba15b0766)

13 years agobuild: fix stamp file name
Eric Blake [Fri, 11 May 2012 14:20:34 +0000 (08:20 -0600)] 
build: fix stamp file name

Ever since commit c964b6a, make was trying to find the timestamp
of '""./apibuild.py".stamp"', but only touching 'apibuild.py.stamp',
and thus always rebuilding.  Reported by Daniel P. Berrange.

* docs/Makefile.am (APIBUILD, APIBUILD_STAMP): Omit bogus quotes.
(cherry picked from commit c0057d9a49f6aead9a893c33069d2a11c03bc1e8)

13 years agoRevert "building: remove libvirt_dbus.syms from EXTRA_DIST"
Eric Blake [Wed, 16 May 2012 21:41:27 +0000 (15:41 -0600)] 
Revert "building: remove libvirt_dbus.syms from EXTRA_DIST"

This reverts commit 372a14c67365660cf03260bfcacd01e9ce600ebb.

We shoul not have cherry-picked 28ae4ff0 without also cherry-picking
2223ea98, but the latter is too complex for a stable branch.