]> xenbits.xensource.com Git - libvirt.git/log
libvirt.git
13 years agoxenapi: Improve error message on session failure
Matthew Booth [Fri, 10 Jun 2011 09:18:01 +0000 (17:18 +0800)]
xenapi: Improve error message on session failure

XenAPI session login can fail for a number of reasons, but currently no
specific
reason is displayed to the user, e.g.:

virsh -c XenAPI://citrix-xen.example.com/
Enter username for citrix-xen.example.com: root
Enter root's password for citrix-xen.example.com:
error: authentication failed: (null)
error: failed to connect to the hypervisor

This patch displays the session error description on failure.

13 years agoqemu: Fix one type in the error prompt string
Osier Yang [Fri, 10 Jun 2011 03:29:06 +0000 (11:29 +0800)]
qemu: Fix one type in the error prompt string

s/hostdevwork/hostdev/

13 years agoMove VMware Workstation/Player driver to correct spec file section
Matthias Bolte [Thu, 9 Jun 2011 18:28:18 +0000 (20:28 +0200)]
Move VMware Workstation/Player driver to correct spec file section

The VMware driver works like the OpenVZ driver by using a commandline
tool for management. It dosen't use it's own remote protocol.

13 years agovirt-aa-helper: add missing include
Eric Blake [Wed, 8 Jun 2011 13:17:17 +0000 (07:17 -0600)]
virt-aa-helper: add missing include

Regression introduced in commit 02e8691.

* src/security/virt-aa-helper.c (includes): Reflect move of virRun.

13 years agodaemon: plug memory leak
Eric Blake [Mon, 6 Jun 2011 21:03:26 +0000 (15:03 -0600)]
daemon: plug memory leak

Detected by Coverity.  Commit ef21beda was incomplete; it solved
a leak one one path, but not on the other.

* daemon/libvirtd.c (qemudSetLogging): Avoid leak on success.

13 years agobuild: break some long lines
Eric Blake [Mon, 6 Jun 2011 19:35:41 +0000 (13:35 -0600)]
build: break some long lines

As long as I was already touching the function...

* src/qemu/qemu_hotplug.c (qemuDomainChangeGraphics): Line wrap.

13 years agoqemu: add missing break statement
Eric Blake [Mon, 6 Jun 2011 19:30:52 +0000 (13:30 -0600)]
qemu: add missing break statement

Detected by Coverity.  Bug introduced in commit 9d73efd (v0.8.8).

* src/qemu/qemu_hotplug.c (qemuDomainChangeGraphics): Don't report
error on success.

13 years agobuild: silence coverity false positives
Eric Blake [Mon, 6 Jun 2011 19:23:24 +0000 (13:23 -0600)]
build: silence coverity false positives

Coverity complained about these intentional fallthrough cases, but
not about other cases that were explicitly marked with nice comments.

For some reason, Coverity doesn't seem smart enough to parse the
up-front English comment in virsh about intentional fallthrough :)

* tools/virsh.c (cmdVolSize): Mark fallthrough in a more typical
fashion.
* src/conf/nwfilter_conf.c (virNWFilterRuleDefDetailsFormat)
(virNWFilterRuleDetailsParse): Mark explicit fallthrough.

13 years agoesx: avoid dead code
Eric Blake [Mon, 6 Jun 2011 19:19:38 +0000 (13:19 -0600)]
esx: avoid dead code

Detected by Coverity.  The beginning of the function already filtered
out NULL objectContentList as invalid.  Further investigation shows:

esxVI_RetrieveProperties is generated and returns a list of objects
that match the given propertyFilterSpec.
esxVI_LookupObjectContentByType then tests whether the result
corresponds to the expected occurrence and reports an error otherwise.
This simplifies the callers of  esxVI_LookupObjectContentByType, but
due to the missing dereference the check was never performed because
the code thought that at least one item was obtained. NULL represents
an empty list. This is a potential segfault fix because callers of
esxVI_LookupObjectContentByType that specified "required" occurrence
assume *objectContentList to be non-NULL when
esxVI_LookupObjectContentByType succeeds.

* src/esx/esx_vi.c (esxVI_LookupObjectContentByType): Check
correct pointer.

13 years agosecret: drop dead code
Eric Blake [Mon, 6 Jun 2011 19:14:48 +0000 (13:14 -0600)]
secret: drop dead code

Detected by Coverity.  The only ways to get to the cleanup label
were by an early abort (list still unassigned) or after successfully
transferring list to dest, so there is no list to clean up.

* src/secret/secret_driver.c (loadSecrets): Kill dead code.

13 years agoqemu: reorder checks for safety
Eric Blake [Mon, 6 Jun 2011 19:07:11 +0000 (13:07 -0600)]
qemu: reorder checks for safety

Detected by Coverity.  All existing callers happen to be in
range, so this isn't too serious.

* src/qemu/qemu_cgroup.c (qemuCgroupControllerActive): Check
bounds before dereference.

13 years agouuid: annotate non-null requirements
Eric Blake [Mon, 6 Jun 2011 19:03:15 +0000 (13:03 -0600)]
uuid: annotate non-null requirements

Coverity already saw through a NULL dereference without these
annotations, and gcc is still too puny to do good NULL analysis.
But clang still benefits (and is easier to run than coverity),
not to mention that adding this bit of documentation to the code
may help future developers remember the constraints.

* src/util/uuid.h (virGetHostUUID, virUUIDFormat): Document
restrictions, for improved static analysis.

13 years agodebug: avoid null dereference on uuid lookup api
Eric Blake [Mon, 6 Jun 2011 17:55:43 +0000 (11:55 -0600)]
debug: avoid null dereference on uuid lookup api

Detected by Coverity.  Commit a98d8f0d tried to make uuid debugging
more robust, but missed some APIs.  And on the APIs that it visited,
the mere act of preparing the debug message ends up dereferencing
uuid prior to the null check.  Which means the APIs which are supposed
to gracefully reject NULL arguments now end up with SIGSEGV.

* src/libvirt.c (VIR_UUID_DEBUG): New macro.
(virDomainLookupByUUID, virDomainLookupByUUIDString)
(virNetworkLookupByUUID, virNetworkLookupByUUIDString)
(virStoragePoolLookupByUUID, virStoragePoolLookupByUUIDString)
(virSecretLookupByUUID, virSecretLookupByUUIDString)
(virNWFilterLookupByUUID, virNWFilterLookupByUUIDString): Avoid
null dereference.

13 years agopython: avoid unlikely sign extension bug
Eric Blake [Fri, 3 Jun 2011 19:53:26 +0000 (13:53 -0600)]
python: avoid unlikely sign extension bug

Detected by Coverity.  cpumap was allocated with a value of
(unsigned short)*(int), which is an int computation, and then
promotes to size_t.  On a 64-bit platform, this fails if bit
32 of the product is set (because of sign extension giving
a HUGE value to malloc), even though a naive programmer would
assume that since the first value is unsigned, the product
is also unsigned and at most 4GB would be allocated.

Won't bite in practice (the product should never be that large),
but worth using the right types to begin with, so that we are
now computing (unsigned short)*(size_t).

* python/libvirt-override.c (libvirt_virDomainGetVcpus): Use
correct type.

13 years agobuild: silence coverity false positive
Eric Blake [Wed, 8 Jun 2011 11:23:00 +0000 (05:23 -0600)]
build: silence coverity false positive

Similar in nature to commit fd21ecfd, which shut up valgrind.

sigaction is apparently a nasty interface for analyzer tools,
at least for how many false positives it generates.

* src/util/command.c (virExecWithHook): Initialize entire var, since
coverity gripes about the (unused and non-standard) sa_restorer.

13 years agostorage: avoid mishandling backing store > 2GB
Eric Blake [Thu, 2 Jun 2011 23:52:16 +0000 (17:52 -0600)]
storage: avoid mishandling backing store > 2GB

Detected by Coverity.  The code was doing math on shifted unsigned
char (which promotes to int), then promoting that to unsigned long
during assignment to size.  On 64-bit platforms, this risks sign
extending values of size > 2GiB.  Bug present since commit
489fd3 (v0.6.0).

I'm not sure if a specially-crafted bogus qcow2 image could
exploit this, although it's probably not possible, since we
were already checking for the computed results being within
range of our fixed-size buffer.

* src/util/storage_file.c (qcowXGetBackingStore): Avoid sign
extension.

13 years agobuild: detect Coverity 5.3.0
Eric Blake [Fri, 3 Jun 2011 19:43:15 +0000 (13:43 -0600)]
build: detect Coverity 5.3.0

Coverity 5.3.0 still outputs lots of COVERITY_* variables, but no
longer modifies COVERITY_BUILD_COMMAND in the environment.  Pick
one that seems likely to stay around.

* configure.ac (STATIC_ANALYSIS): Detect newer Coverity.

13 years agobuild: Fix typos in configure.ac
Osier Yang [Wed, 8 Jun 2011 07:07:24 +0000 (15:07 +0800)]
build: Fix typos in configure.ac

13 years agovirsh: Expose virDomainMigrateSetMaxSpeed API to virsh
Osier Yang [Wed, 8 Jun 2011 02:40:57 +0000 (10:40 +0800)]
virsh: Expose virDomainMigrateSetMaxSpeed API to virsh

API virDomainMigrateSetMaxSpeed was introduced since 0.9.0, but
no command in virsh yet.

13 years agolxc: Ensure container <init> actually exists
Cole Robinson [Thu, 2 Jun 2011 19:25:21 +0000 (15:25 -0400)]
lxc: Ensure container <init> actually exists

Since we can't really get useful error reporting from virCommandExec since
it needs to be the last thing we do.

13 years agolxc: Verify root fs exists before mounting
Cole Robinson [Thu, 2 Jun 2011 18:25:25 +0000 (14:25 -0400)]
lxc: Verify root fs exists before mounting

Otherwise the following virFileMakePath will create the directory for
us and fail further ahead, which probably isn't intended.

13 years agolxc: controller: Improve container error reporting
Cole Robinson [Thu, 2 Jun 2011 15:52:32 +0000 (11:52 -0400)]
lxc: controller: Improve container error reporting

Add a handshake with the cloned container process to try and detect
if it fails to start.

13 years agolxc: Improve guest startup error reporting
Cole Robinson [Wed, 1 Jun 2011 22:17:00 +0000 (18:17 -0400)]
lxc: Improve guest startup error reporting

Add a simple handshake with the lxc_controller process so we can detect
process startup failures. We do this by adding a new --handshake cli arg
to lxc_controller for passing a file descriptor. If the process fails to
launch, we scrape all output from the logfile and report it to the user.

13 years agolxc: Refactor controller command building
Cole Robinson [Wed, 1 Jun 2011 20:38:09 +0000 (16:38 -0400)]
lxc: Refactor controller command building

Arranges things similar to the qemu driver. Will allow us to more easily
report command error output.

13 years agolxc: Don't report error in Wait/SendContinue
Cole Robinson [Thu, 2 Jun 2011 15:18:14 +0000 (11:18 -0400)]
lxc: Don't report error in Wait/SendContinue

We will reuse these shortly, and each use should have a different error
message.

13 years agolxc: Drop container stdio as late as possible
Cole Robinson [Thu, 2 Jun 2011 15:01:36 +0000 (11:01 -0400)]
lxc: Drop container stdio as late as possible

Makes it more likely we get useful error output in the logs

13 years agoMove virRun, virExec*, virFork to util/command
Cole Robinson [Tue, 10 May 2011 18:42:59 +0000 (14:42 -0400)]
Move virRun, virExec*, virFork to util/command

Seems reasonable to have all command wrappers in the same place

v2:
    Dont move SetInherit

v3:
    Comment spelling fix
    Adjust WARN0 comment
    Remove spurious #include movement
    Don't include sys/types.h
    Combine virExec enums

Signed-off-by: Cole Robinson <crobinso@redhat.com>
13 years agoutil: Implement virRun as a wrapper around virCommand
Cole Robinson [Fri, 6 May 2011 20:41:03 +0000 (16:41 -0400)]
util: Implement virRun as a wrapper around virCommand

v2:
    Simplify command building
    Handle command building failure

v3:
    Remove unneeded NULL check

Signed-off-by: Cole Robinson <crobinso@redhat.com>
13 years agoutil: Remove unused virExec wrapper
Cole Robinson [Fri, 6 May 2011 20:36:16 +0000 (16:36 -0400)]
util: Remove unused virExec wrapper

v3:
    Remove obsolete comment

Signed-off-by: Cole Robinson <crobinso@redhat.com>
13 years agoqemu: Convert virExec usage to virCommand
Cole Robinson [Fri, 6 May 2011 20:10:40 +0000 (16:10 -0400)]
qemu: Convert virExec usage to virCommand

v2:
    Have virCommand cleanup intermediate process for us

v3:
    Preserve original FD closing behavior

Signed-off-by: Cole Robinson <crobinso@redhat.com>
13 years agoesx: Remove duplicated invalid-argument checks
Matthias Bolte [Tue, 7 Jun 2011 07:35:03 +0000 (09:35 +0200)]
esx: Remove duplicated invalid-argument checks

Those checks are already performed at the public API level.

13 years agodocs: Add doc for video element
Osier Yang [Tue, 7 Jun 2011 08:56:06 +0000 (16:56 +0800)]
docs: Add doc for video element

For backwards compatibility, if no <video> is set but there is a
<graphics> tag, then we add a default <video> according to the
guest type. Add docs to tell the user about this to not make
them confused. Especially if they remove the video (such as via
"virsh edit"), it will be surprised for them to see the video
element is still in domain XML.

13 years agoUse VIR_USE_CPU instead of new wheel
Osier Yang [Tue, 7 Jun 2011 08:51:51 +0000 (16:51 +0800)]
Use VIR_USE_CPU instead of new wheel

13 years agoAvoid virGetVersion failure on specific driver support configurations
Matthias Bolte [Wed, 1 Jun 2011 08:29:13 +0000 (10:29 +0200)]
Avoid virGetVersion failure on specific driver support configurations

virGetVersion itself doesn't take a virConnectPtr, but in order to obtain
the hypervisor version against which libvirt was compiled it is used in
combination with virConnectGetType like this:

hvType = virConnectGetType(conn)
virGetVersion(&libVer, hvType, &typeVer)

When virConnectGetType is called on a remote connection then the remote
driver returns the type of the underlying driver on the server side, for
example QEMU. Then virGetVersion compares hvType to a set of strings that
depend on configure options and returns LIBVIR_VERSION_NUMBER in most
cases. Now this fails in case libvirt on the client side is just compiled
with the remote driver enabled only and the server side has the actual
driver such as the QEMU driver. It just happens to work when the actual
driver is enabled on client and server side. But that's not always true.
I noticed this on FreeBSD:

freebsd# virsh -c qemu+tcp://192.168.178.22/system version
Compiled against library: libvir 0.9.2
error: failed to get the library version
error: this function is not supported by the connection driver: virGetVersion

This is not FreeBSD specific, happens on Windows as well due to the
similar driver support configuration. The problem is that virConnectGetType
returns QEMU, but virGetVersion on the client side only accepts Remote
as hvType due to all other drivers being disabled on the client side.

Daniel P. Berrange suggested to get rid of all the conditional code in
virGetVersion, ignoring the hvType and always setting typeVer to
LIBVIR_VERSION_NUMBER. virConnectGetVersion is supposed to be used to
obtain the hypervisor version.

13 years agodocs: Make hvsupport.pl pick up the host device drivers
Matthias Bolte [Sat, 4 Jun 2011 21:24:54 +0000 (23:24 +0200)]
docs: Make hvsupport.pl pick up the host device drivers

Annotate the ESX device driver dummy.

Refactor the udev and hal device driver strcuts to match the
common annotation pattern.

13 years agoRelease of libvirt-0.9.2
Daniel Veillard [Mon, 6 Jun 2011 03:46:37 +0000 (11:46 +0800)]
Release of libvirt-0.9.2

* configure.ac docs/news.html.in libvirt.spec.in: update for release
* po/*.po*: updated translations and regenerated

13 years agoesx: Fix driver method version annotations
Matthias Bolte [Mon, 6 Jun 2011 03:08:06 +0000 (11:08 +0800)]
esx: Fix driver method version annotations

Change the driver comments for proper extraction and values by
the scripts used for documentation

13 years agoFix QEMU p2p v2 migration when run from a v3 client
Daniel P. Berrange [Mon, 6 Jun 2011 03:05:34 +0000 (11:05 +0800)]
Fix QEMU p2p v2 migration when run from a v3 client

When peer-2-peer migration was invoked by a client supporting
v3, but where the target server only supported v2, we'd not
correctly shutdown the guest.

* src/qemu/qemu_migration.c: Ensure guest is shutdown in
  v2 peer 2 peer migration

13 years agovbox: Fix typo in error message
Matthias Bolte [Sat, 4 Jun 2011 20:40:57 +0000 (22:40 +0200)]
vbox: Fix typo in error message

13 years agoDon't raise an error if the migration cookie is NULL
Daniel P. Berrange [Sat, 4 Jun 2011 10:14:05 +0000 (06:14 -0400)]
Don't raise an error if the migration cookie is NULL

The v2 migration protocol doesn't use cookies, so we should not
be raising an error if the cookie parameters are NULL.

* src/qemu/qemu_migration.c: Don't raise error if cookie is NULL

13 years agoFix check of virKillProcess return status
Daniel P. Berrange [Sat, 4 Jun 2011 10:05:28 +0000 (06:05 -0400)]
Fix check of virKillProcess return status

The error code for virKillProcess is returned in the errno variable
not the return value. THis mistake caused the logs to be filled with
errors when shutting down QEMU processes

* src/qemu/qemu_process.c: Fix process kill check.

13 years agovbox: Fix version extraction on Windows for newer VirtualBox versions
Matthias Bolte [Sat, 4 Jun 2011 08:50:36 +0000 (10:50 +0200)]
vbox: Fix version extraction on Windows for newer VirtualBox versions

VirtualBox 4.0.8 changed the registry key layout. Before the version
number was in a Version key. Now the Version key contains %VER% and
the actual version number is in VersionExt now.

Move value lookup code into its own function: vboxLookupRegistryValue.

13 years agoAPI: consolidate common unreleased enums
Eric Blake [Fri, 3 Jun 2011 16:10:58 +0000 (10:10 -0600)]
API: consolidate common unreleased enums

This commit is safe precisely because there has been no release
for any of the enum values being deleted (they were added post-0.9.1).

After the 0.9.2 release, we can then take advantage of
virDomainModificationImpact in more places.

* include/libvirt/libvirt.h.in (virDomainModificationImpact): New
enum.
(virDomainSchedParameterFlags, virMemoryParamFlags): Delete, since
these were never released, and the new enum works fine here.
* src/libvirt.c (virDomainGetMemoryParameters)
(virDomainSetMemoryParameters)
(virDomainGetSchedulerParametersFlags)
(virDomainSetSchedulerParametersFlags): Update documentation.
* src/qemu/qemu_driver.c (qemuDomainSetMemoryParameters)
(qemuDomainGetMemoryParameters, qemuSetSchedulerParametersFlags)
(qemuSetSchedulerParameters, qemuGetSchedulerParametersFlags)
(qemuGetSchedulerParameters): Adjust clients.
* tools/virsh.c (cmdSchedinfo, cmdMemtune): Likewise.
Based on ideas by Daniel Veillard and Hu Tao.

13 years agoqemu: Avoid use after free in qemuCaps parsing
Jiri Denemark [Fri, 3 Jun 2011 14:33:25 +0000 (16:33 +0200)]
qemu: Avoid use after free in qemuCaps parsing

13 years agovirsh: Document nodeinfo output
Jiri Denemark [Thu, 2 Jun 2011 08:56:43 +0000 (10:56 +0200)]
virsh: Document nodeinfo output

13 years agosecurity driver: ignore EINVAL when chowning an image file
Laine Stump [Fri, 3 Jun 2011 15:59:09 +0000 (11:59 -0400)]
security driver: ignore EINVAL when chowning an image file

This fixes:

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

Both of these complain of a failure to use an image file that resides
on a read-only NFS volume. The function in the DAC security driver
that chowns image files to the qemu user:group before using them
already has special cases to ignore failure of chown on read-only file
systems, and in a few other cases, but it hadn't been checking for
EINVAL, which is what is returned if the qemu user doesn't even exist
on the NFS server.

Since the explanation of EINVAL in the chown man page almost exactly
matches the log message already present for the case of EOPNOTSUPP,
I've just added EINVAL to that same conditional.

13 years agoMake dlopen usage in lock manager conditional
Matthias Bolte [Fri, 3 Jun 2011 08:20:49 +0000 (10:20 +0200)]
Make dlopen usage in lock manager conditional

This fixes a build failure on MinGW, due to MinGW not supporting dlopen.

13 years agoCorrect 'cputune' documentation example.
Neil Wilson [Fri, 3 Jun 2011 13:43:30 +0000 (14:43 +0100)]
Correct 'cputune' documentation example.

Signed-off-by: Neil Wilson <neil@aldur.co.uk>
13 years agobuild: silence coverity false positive
Eric Blake [Thu, 2 Jun 2011 21:45:31 +0000 (15:45 -0600)]
build: silence coverity false positive

Coverity couldn't see that priv is NULL on failure.  But on failure,
we might as well guarantee that callers don't try to free uninitialized
memory.

* src/remote/remote_driver.c (remoteGenericOpen): Even on failure,
pass priv back to caller.

13 years agobuild: silence coverity false positive
Eric Blake [Thu, 2 Jun 2011 21:31:48 +0000 (15:31 -0600)]
build: silence coverity false positive

Coverity complained that infd could be -1 at the point where it is
passed to write, when in reality, this code can only be reached if
infd is non-negative.

* src/util/command.c (virCommandProcessIO): Help out coverity.

13 years agomigrate: detect xml incompatibility
Eric Blake [Thu, 2 Jun 2011 23:40:39 +0000 (17:40 -0600)]
migrate: detect xml incompatibility

Detected by Coverity.  Bug introduced in 08106e2044 (unreleased).

* src/conf/domain_conf.c (virDomainChannelDefCheckABIStability):
Use correct sizeof operand.

13 years agoevent: avoid memory leak on cleanup
Eric Blake [Thu, 2 Jun 2011 22:54:09 +0000 (16:54 -0600)]
event: avoid memory leak on cleanup

Detected by Coverity.  Introduced in commit aaf2b70, and turned into
a regression in the next few commits through 4e6e6672 (unreleased).

* src/conf/domain_event.c (virDomainEventStateFree): Free object,
per documentation.

13 years agoqemu: avoid memory leak on vcpupin
Eric Blake [Thu, 2 Jun 2011 22:47:53 +0000 (16:47 -0600)]
qemu: avoid memory leak on vcpupin

Detected by Coverity.  This leaked a cpumap on every iteration
of the loop.  Leak introduced in commit 1cc4d02 (v0.9.0).

* src/qemu/qemu_process.c (qemuProcessSetVcpuAffinites): Plug
leak, and hoist allocation outside loop.

13 years agoremote: avoid leak on failure
Eric Blake [Thu, 2 Jun 2011 22:42:45 +0000 (16:42 -0600)]
remote: avoid leak on failure

Detected by Coverity.  Only possible in OOM situations.

* daemon/remote.c (remoteDispatchDomainScreenshot): Plug leak.

13 years agolock: avoid leak on failure
Eric Blake [Thu, 2 Jun 2011 22:38:38 +0000 (16:38 -0600)]
lock: avoid leak on failure

Detected by Coverity.  Only possible on OOM situations.

* src/locking/lock_manager.c (virLockManagerPluginNew): Plug leak.

13 years agostorage: avoid memory leak on stat failure
Eric Blake [Thu, 2 Jun 2011 22:27:48 +0000 (16:27 -0600)]
storage: avoid memory leak on stat failure

Spotted by coverity.  Triggers on failed stat, although I'm not sure
how easy that condition is, so I'm not sure if this is a runtime
memory hog.  Regression introduced in commit 8077d64 (unreleased).

* src/util/storage_file.c (virStorageFileGetMetadataFromFD):
Reduce need for malloc, avoiding a leak.

13 years agostorage: avoid memory leak
Eric Blake [Thu, 2 Jun 2011 22:08:28 +0000 (16:08 -0600)]
storage: avoid memory leak

Coverity detected that options was being set by strdup but never
freed.  But why even bother with an options variable?  The options
parameter never changes!  Leak present since commit 44948f5b (0.7.0).

This function could probably be rewritten to take better advantage
of virCommand, but that is more invasive.

* src/storage/storage_backend_fs.c
(virStorageBackendFileSystemMount): Avoid wasted strdup, and
guarantee proper cleanup on all paths.

13 years agolibvirtd: avoid leak on failure
Eric Blake [Thu, 2 Jun 2011 21:56:32 +0000 (15:56 -0600)]
libvirtd: avoid leak on failure

Spotted by Coverity.  Only possible on an OOM condition, so
unlikely to bite in the wild.

* daemon/libvirtd.c (qemudSetLogging): Don't leak memory.

13 years agocommand: avoid leak on failure
Eric Blake [Thu, 2 Jun 2011 21:50:11 +0000 (15:50 -0600)]
command: avoid leak on failure

Detected by Coverity.  While it is possible on OOM condition, as
well as with bad code that passes binary == NULL, it is unlikely
to be encountered in the wild.

* src/util/command.c (virCommandNewArgList): Don't leak memory.

13 years agoExplicitly set VM state to paused after migration completes
Daniel P. Berrange [Thu, 2 Jun 2011 15:40:33 +0000 (11:40 -0400)]
Explicitly set VM state to paused after migration completes

In v3 migration, once migration is completed, the VM needs
to be left in a paused state until after Finish3 has been
executed on the target. Only then will the VM be killed
off. When using non-JSON QEMU monitor though, we don't
receive any 'STOP' event from QEMU, so we need to manually
set our state offline & thus release lock manager leases.
It doesn't hurt to run this on the JSON case too, just in
case the event gets lost somehow

* src/qemu/qemu_migration.c: Explicitly set VM state to
  paused when migration completes

13 years agoFix regressions BlockStats/Info APIs in QEMU driver
Daniel P. Berrange [Thu, 2 Jun 2011 13:55:56 +0000 (14:55 +0100)]
Fix regressions BlockStats/Info APIs in QEMU driver

The change 18c2a592064d69499f70428e498f4a3cb5161cda caused
some regressions in behaviour of virDomainBlockStats
and virDomainBlockInfo in the QEMU driver.

The virDomainBlockInfo API stopped working for inactive
guests if querying a block device.

The virDomainBlockStats API did not promptly report
an error if the guest was not running in some cases.

* src/qemu/qemu_driver.c: Fix inactive guest handling
  in BlockStats/Info APIs

13 years agoFix minor issues in libxenlight managed save
Jim Fehlig [Thu, 2 Jun 2011 21:41:13 +0000 (15:41 -0600)]
Fix minor issues in libxenlight managed save

There were a few minor issues in commit 5b6c961e
- leak managed save path
- leak managed save fd
- functions that open an fd should also close it

13 years agouml: correct command line networking parameters
Heath Petersen [Thu, 2 Jun 2011 16:23:43 +0000 (11:23 -0500)]
uml: correct command line networking parameters

I have been finding that some UML command line networking parameters are
being generated incorrectly.

For more information, see
https://bugzilla.redhat.com/show_bug.cgi?id=706295 .

13 years agodocs: document iface-* commands
Eric Blake [Tue, 31 May 2011 19:45:50 +0000 (13:45 -0600)]
docs: document iface-* commands

I intentionally set things up so 'virsh help interface' lists
commands in alphabetical order, but 'man virsh' lists them in
topical order; this matches our practice on some other commands.

* tools/virsh.pod: Document all iface commands.
* tools/virsh.c (ifaceCmds): Sort.

13 years agoFix auditing of disk hotunplug operations
Daniel P. Berrange [Thu, 2 Jun 2011 13:52:24 +0000 (14:52 +0100)]
Fix auditing of disk hotunplug operations

The qemuAuditDisk calls in disk hotunplug operations were being
passed 'ret >= 0', but the code which sets ret to 0 was not yet
executed, and the error path had already jumped to the 'cleanup'
label. This meant hotunplug failures were never audited, and
hotunplug success was audited as a failure

* src/qemu/qemu_hotplug.c: Fix auditing of hotunplug

13 years agoAvoid crash on NULL pointer in lock driver impls during hotplug
Daniel P. Berrange [Thu, 2 Jun 2011 13:44:10 +0000 (14:44 +0100)]
Avoid crash on NULL pointer in lock driver impls during hotplug

When virLockDriverAcquire is invoked during hotplug the state
parameter will be left as NULL.

* src/locking/lock_driver_nop.c,
  src/locking/lock_driver_sanlock.c: Don't reference NULL state
  parameter

13 years agoFix return value in lock manager hotplug methods
Daniel P. Berrange [Thu, 2 Jun 2011 13:43:20 +0000 (14:43 +0100)]
Fix return value in lock manager hotplug methods

Refactoring of the lock manager hotplug methods lost the
ret = 0 assignment for successful return path

* src/locking/domain_lock.c: Add missing ret = 0 assignments

13 years agoMake sure virDomainSave/virDomainManagedSave reset id to -1
Daniel P. Berrange [Thu, 2 Jun 2011 13:42:21 +0000 (14:42 +0100)]
Make sure virDomainSave/virDomainManagedSave reset id to -1

After successfull virDomainSave/virDomainManagedSave calls
the guest will no longer be active, so the domain ID must
be reset to -1

* daemon/remote_generator.pl: Special case virDomainSave &
  virDomainManagedSave for same reason as virDomainDestroy

13 years agoFix handling of VIR_EVENT_HANDLE_ERROR in QEMU monitor
Daniel P. Berrange [Thu, 2 Jun 2011 10:50:03 +0000 (11:50 +0100)]
Fix handling of VIR_EVENT_HANDLE_ERROR in QEMU monitor

Commit 4454a9efc728b91e791b1f14c26ea23a19d57f48 introduced bad
behaviour on the VIR_EVENT_HANDLE_ERROR condition. This condition
is only hit when an invalid FD is used in poll() (typically due
to a double-close bug). The QEMU monitor code was treating this
condition as non-fatal, and thus libvirt would poll() in a fast
loop forever burning 100% CPU. VIR_EVENT_HANDLE_ERROR must be
handled in the same way as VIR_EVENT_HANDLE_HANGUP, killing the
QEMU instance.

* src/qemu/qemu_monitor.c: Treat VIR_EVENT_HANDLE_ERROR as EOF

13 years agoAdd call to sanlock_restrict() in QEMU lock driver
Daniel P. Berrange [Thu, 2 Jun 2011 10:46:56 +0000 (11:46 +0100)]
Add call to sanlock_restrict() in QEMU lock driver

In between fork and exec, a connection to sanlock is acquired
and the socket file descriptor is intionally leaked to the
child process. sanlock watches this FD for POLL_HANGUP to
detect when QEMU has exited. We don't want a rogus/compromised
QEMU from issuing sanlock RPC calls on the leaked FD though,
since that could be used to DOS other guests. By calling
sanlock_restrict() on the socket before exec() we can lock
it down.

* configure.ac: Check for sanlock_restrict API
* src/locking/domain_lock.c: Restrict lock acquired in
  process startup phase
* src/locking/lock_driver.h: Add VIR_LOCK_MANAGER_ACQUIRE_RESTRICT
* src/locking/lock_driver_sanlock.c: Add call to sanlock_restrict
  when requested by VIR_LOCK_MANAGER_ACQUIRE_RESTRICT flag

13 years agobuild: fix VPATH build break from previous patch
Eric Blake [Thu, 2 Jun 2011 14:17:25 +0000 (08:17 -0600)]
build: fix VPATH build break from previous patch

Partial revert of commit c3c30d4de9d.

* docs/Makefile.am (internals/%.html.tmp): Restore MKDIR_P; it is
needed for intermediate file after all.
Reported by Daniel P. Berrange.

13 years agoscreenshot: Expose the new API in virsh
Michal Privoznik [Thu, 12 May 2011 16:29:12 +0000 (18:29 +0200)]
screenshot: Expose the new API in virsh

* tools/virsh.c: Add screenshot command
* tools/virsh.pod: Document new command
* src/libvirt.c: Fix off-be-one error

13 years agolibxl : fix the version for the managed save APIs
Daniel Veillard [Thu, 2 Jun 2011 12:39:40 +0000 (20:39 +0800)]
libxl : fix the version for the managed save APIs

13 years agolibxl: adds managed save and restore support
Markus Groß [Thu, 2 Jun 2011 12:24:30 +0000 (20:24 +0800)]
libxl: adds managed save and restore support

Based on the equivalent qemu driver code

* src/libxl/libxl_driver.c: refactor the Start save and restore
  routines of the driver and adds the new entry points for
  managed saves handling

13 years agolibxl: get maximum memory of running domain
Markus Groß [Thu, 2 Jun 2011 12:16:32 +0000 (20:16 +0800)]
libxl: get maximum memory of running domain

* src/libxl/libxl_driver.c: fix the libxlDomainGetInfo to return the
  maximum memory for running domain

13 years agoAdd a plugin for the 'sanlock' project
Daniel P. Berrange [Tue, 18 Jan 2011 18:37:45 +0000 (18:37 +0000)]
Add a plugin for the 'sanlock' project

Sanlock is a project that implements a disk-paxos locking
algorithm. This is suitable for cluster deployments with
shared storage.

* src/Makefile.am: Add dlopen plugin for sanlock
* src/locking/lock_driver_sanlock.c: Sanlock driver
* configure.ac: Check for sanlock
* libvirt.spec.in: Add a libvirt-lock-sanlock RPM

13 years agoAllow leases to be hotpluged with QEMU guests
Daniel P. Berrange [Wed, 18 May 2011 16:20:53 +0000 (12:20 -0400)]
Allow leases to be hotpluged with QEMU guests

* src/conf/domain_conf.c, src/conf/domain_conf.h: APIs for
  inserting/finding/removing virDomainLeaseDefPtr instances
* src/qemu/qemu_driver.c: Wire up hotplug/unplug for leases
* src/qemu/qemu_hotplug.h, src/qemu/qemu_hotplug.c: Support
  for hotplug and unplug of leases

13 years agoSupport passing QEMU lock state to dest during migration
Daniel P. Berrange [Wed, 18 May 2011 16:34:21 +0000 (12:34 -0400)]
Support passing QEMU lock state to dest during migration

Some lock managers associate state with leases, allowing a process
to temporarily release its leases, and re-acquire them later, safe
in the knowledge that no other process has acquired + released the
leases in between.

This is already used between suspend/resume operations, and must
also be used across migration. This passes the lockstate in the
migration cookie. If the lock manager uses lockstate, then it
becomes compulsory to use the migration v3 protocol to get the
cookie support.

* src/qemu/qemu_driver.c: Validate that migration v2 protocol is
  not used if lock manager needs state transfer
* src/qemu/qemu_migration.c: Transfer lock state in migration
  cookie XML

13 years agoIntegrate the QEMU driver with the lock manager infrastructure
Daniel P. Berrange [Tue, 26 Oct 2010 14:04:46 +0000 (15:04 +0100)]
Integrate the QEMU driver with the lock manager infrastructure

The QEMU integrates with the lock manager instructure in a number
of key places

 * During startup, a lock is acquired in between the fork & exec
 * During startup, the libvirtd process acquires a lock before
   setting file labelling
 * During shutdown, the libvirtd process acquires a lock
   before restoring file labelling
 * During hotplug, unplug & media change the libvirtd process
   holds a lock while setting/restoring labels

The main content lock is only ever held by the QEMU child process,
or libvirtd during VM shutdown. The rest of the operations only
require libvirtd to hold the metadata locks, relying on the active
QEMU still holding the content lock.

* src/qemu/qemu_conf.c, src/qemu/qemu_conf.h,
  src/qemu/libvirtd_qemu.aug, src/qemu/test_libvirtd_qemu.aug:
  Add config parameter for configuring lock managers
* src/qemu/qemu_driver.c: Add calls to the lock manager

13 years agoAdd initial docs about the lock managers
Daniel P. Berrange [Mon, 22 Nov 2010 16:44:13 +0000 (16:44 +0000)]
Add initial docs about the lock managers

13 years agoAdd higher level lock API for domain objects
Daniel P. Berrange [Mon, 24 Jan 2011 12:16:30 +0000 (12:16 +0000)]
Add higher level lock API for domain objects

To facilitate use of the locking plugins from hypervisor drivers,
introduce a higher level API for locking virDomainObjPtr instances.
In includes APIs targetted to VM startup, and hotplug/unplug

* src/Makefile.am: Add domain lock API
* src/locking/domain_lock.c, src/locking/domain_lock.h: High
  level API for domain locking

13 years agoAdd a 'nop' lock driver implementation.
Daniel P. Berrange [Mon, 24 Jan 2011 12:14:52 +0000 (12:14 +0000)]
Add a 'nop' lock driver implementation.

To allow hypervisor drivers to assume that a lock driver impl
will be guaranteed to exist, provide a 'nop' impl that is
compiled into the library

* src/Makefile.am: Add nop driver
* src/locking/lock_driver_nop.c, src/locking/lock_driver_nop.h:
  Nop lock driver implementation
* src/locking/lock_manager.c: Enable direct access of 'nop'
  driver, instead of dlopen()ing it.

13 years agoBasic framework for lock manager plugins
Daniel P. Berrange [Mon, 13 Sep 2010 13:02:58 +0000 (14:02 +0100)]
Basic framework for lock manager plugins

Define the basic framework lock manager plugins. The
basic plugin API for 3rd parties to implemented is
defined in

  src/locking/lock_driver.h

This allows dlopen()able modules for alternative locking
schemes, however, we do not install the header. This
requires lock plugins to be in-tree allowing changing of
the lock manager plugin API in future.

The libvirt code for loading & calling into plugins
is in

  src/locking/lock_manager.{c,h}

* include/libvirt/virterror.h, src/util/virterror.c: Add
  VIR_FROM_LOCKING
* src/locking/lock_driver.h: API for lock driver plugins
  to implement
* src/locking/lock_manager.c, src/locking/lock_manager.h:
  Internal API for managing locking
* src/Makefile.am: Add locking code

13 years agoSupport leases in guest XML and lock manager
Daniel P. Berrange [Thu, 9 Dec 2010 18:25:11 +0000 (18:25 +0000)]
Support leases in guest XML and lock manager

A lock manager may operate in various modes. The direct mode of
operation is to obtain locks based on the resources associated
with devices in the XML. The indirect mode is where the app
creating the domain provides explicit leases for each resource
that needs to be locked. This XML extension allows for listing
resources in the XML

  <devices>
     ...
     <lease>
       <lockspace>somearea</lockspace>
       <key>thequickbrownfoxjumpsoverthelazydog</key>
       <target path='/some/lease/path' offset='23432'/>
     </lease>
     ...
  </devices>

The 'lockspace' is a unique identifier for the lockspace which
the lease is associated

The 'key' is a unique identifier for the resource associated
with the lease.

The 'target' is the file on disk where the leases are held.

* docs/schemas/domain.rng: Add lease schema
* src/conf/domain_conf.c, src/conf/domain_conf.h: parsing and
  formatting for leases
* tests/qemuxml2argvdata/qemuxml2argv-lease.args,
  tests/qemuxml2argvdata/qemuxml2argv-lease.xml,
  tests/qemuxml2xmltest.c: Test XML handling for leases

13 years agoAllow handshake with child process during startup
Daniel P. Berrange [Mon, 22 Nov 2010 13:31:35 +0000 (13:31 +0000)]
Allow handshake with child process during startup

Allow the parent process to perform a bi-directional handshake
with the child process during fork/exec. The child process
will fork and do its initial setup. Immediately prior to the
exec(), it will stop & wait for a handshake from the parent
process. The parent process will spawn the child and wait
until the child reaches the handshake point. It will do
whatever extra setup work is required, before signalling the
child to continue.

The implementation of this is done using two pairs of blocking
pipes. The first pair is used to block the parent, until the
child writes a single byte. Then the second pair pair is used
to block the child, until the parent confirms with another
single byte.

* src/util/command.c, src/util/command.h,
  src/libvirt_private.syms: Add APIs to perform a handshake

13 years agosecurity: plug regression introduced in disk probe logic
Eric Blake [Thu, 26 May 2011 14:18:46 +0000 (08:18 -0600)]
security: plug regression introduced in disk probe logic

Regression introduced in commit d6623003 (v0.8.8) - using the
wrong sizeof operand meant that security manager private data
was overlaying the allowDiskFormatProbing member of struct
_virSecurityManager.  This reopens disk probing, which was
supposed to be prevented by the solution to CVE-2010-2238.

* src/security/security_manager.c
(virSecurityManagerGetPrivateData): Use correct offset.

13 years agotests: really fix QEMU XML-2-ARGV graphics-spice-timeout test
Eric Blake [Wed, 1 Jun 2011 21:02:06 +0000 (15:02 -0600)]
tests: really fix QEMU XML-2-ARGV graphics-spice-timeout test

Alas, /usr/bin/kvm is also not directly supported by testutilsqemu.c.

In fact, _any_ test that uses <cpu match=...> has to use our faked
qemu.sh in order to properly answer the 'qemu -cpu ?' probe done
during qemu command line building.

* tests/qemuxml2argvdata/*graphics-spice-timeout*: Switch emulator, again.

13 years agobuild: avoid corrupting / in RHEL 5
Eric Blake [Wed, 1 Jun 2011 17:42:43 +0000 (11:42 -0600)]
build: avoid corrupting / in RHEL 5

I noticed this while building from libvirt.git on RHEL 5.6:

Generating internals/command.html.tmp
mkdir: cannot create directory `/internals': Permission denied

If I had been building as root instead, this pollutes /.

Older autoconf lacks $(builddir), but it is rigorously equal to '.'
in newer autoconf, so we could use '$(MKDIR_P) internals' instead.

However, since internals/command.html is part of the tarball, we
_already_ build it in $(srcdir), not $(builddir) during VPATH
builds, so the mkdir is wasted effort!

* docs/Makefile.am (internals/%.html.tmp): Drop unused mkdir.

13 years agotests: Add a test for correct disk device ordering
Jiri Denemark [Tue, 24 May 2011 16:01:11 +0000 (19:01 +0300)]
tests: Add a test for correct disk device ordering

13 years agoFix order of disks and controllers
Jiri Denemark [Tue, 24 May 2011 15:53:18 +0000 (18:53 +0300)]
Fix order of disks and controllers

Commit 2d6adabd53c8f1858191d521dc9b4948d1205955 replaced qsorting disk
and controller devices with inserting them at the right position. That
was to fix unnecessary reordering of devices. However, when parsing
domain XML devices are just taken in the order in which they appear in
the XML since. Use the correct insertion algorithm to honor device
target.

13 years agoFix QEMU XML-2-ARGV graphics-spice-timeout test
Matthias Bolte [Wed, 1 Jun 2011 16:11:14 +0000 (18:11 +0200)]
Fix QEMU XML-2-ARGV graphics-spice-timeout test

The test used an emulator that is not supported in testutilsqemu.c.
Switch from qemu-kvm to kvm to fix this.

13 years agoremote generator: Handle some virTypedParameterPtr using functions
Matthias Bolte [Mon, 30 May 2011 18:27:37 +0000 (20:27 +0200)]
remote generator: Handle some virTypedParameterPtr using functions

This doesn't cover the getters that allow to query nparams yet.

13 years agoapibuild: Restrict long usage to existing functions and structs
Matthias Bolte [Mon, 30 May 2011 12:36:41 +0000 (14:36 +0200)]
apibuild: Restrict long usage to existing functions and structs

New APIs have to use long long instead of long.

Also make apibuild errors fatal.

13 years agoremote generator: Legacy support for hyper to long mappings
Matthias Bolte [Mon, 30 May 2011 10:58:57 +0000 (12:58 +0200)]
remote generator: Legacy support for hyper to long mappings

Remove some special case code that took care of mapping hyper to the
correct C types.

As the list of procedures that is allowed to map hyper to long is fixed
put it in the generator instead annotations in the .x files. This
results in simpler .x file parsing code.

Use macros for hyper to long assignments that perform overflow checks
when long is smaller than hyper. Map hyper to long long by default.

Suggested by Eric Blake.

13 years agoRemove call to deprecated gnutls_certificate_type_set_priority
Daniel P. Berrange [Wed, 1 Jun 2011 12:20:58 +0000 (13:20 +0100)]
Remove call to deprecated gnutls_certificate_type_set_priority

The gnutls_certificate_type_set_priority method is deprecated.
Since we already set the default gnutls priority, and do not
support OpenGPG credentials in any case, it was not serving
any useful purpose and can be removed

* src/remote/remote_driver.c: Remove src/remote/remote_driver.c
  call

13 years agoUse common parameter order for remote(De)SerializeTypedParameters
Matthias Bolte [Mon, 30 May 2011 18:12:18 +0000 (20:12 +0200)]
Use common parameter order for remote(De)SerializeTypedParameters

We commonly use "value, length" order, let's stick to this.

13 years agoopenvz: Add simple test for openvzReadNetworkConf
Matthias Bolte [Tue, 31 May 2011 12:58:58 +0000 (14:58 +0200)]
openvz: Add simple test for openvzReadNetworkConf

Convert openvzLocateConfFile to a replaceable function pointer to
allow testing the config file parsing without rewriting the whole
OpenVZ config parsing to a more testable structure.

13 years agoopenvz: Set virtType to openvz in openvzLoadDomains
Matthias Bolte [Wed, 1 Jun 2011 08:36:39 +0000 (10:36 +0200)]
openvz: Set virtType to openvz in openvzLoadDomains

Otherwise virsh dumpxml will report <domain type='qemu'> instead
of the expected <domain type='openvz'>.

13 years agoutil: Fix incorrect error in PCI functions
Osier Yang [Wed, 1 Jun 2011 02:32:41 +0000 (10:32 +0800)]
util: Fix incorrect error in PCI functions

Substitute VIR_ERR_NO_SUPPORT with VIR_ERR_INTERNAL_ERROR. Error
like following is not what user want to see.

error : pciDeviceIsAssignable:1487 : this function is not supported
by the connection driver: Device 0000:07:10.0 is behind a switch
lacking ACS and cannot be assigned

13 years agomaint: use consistent file name for threading notes
Eric Blake [Tue, 31 May 2011 19:13:24 +0000 (13:13 -0600)]
maint: use consistent file name for threading notes

* daemon/THREADING.txt: Rename...
* daemon/THREADS.txt: ...to match qemu thread notes.
* daemon/Makefile.am (EXTRA_DIST): Reflect rename.