~ubuntu-virt/libvirt/+git/libvirt-lp-import:v1.2.17-maint

Last commit made on 2016-06-30
Get this branch:
git clone -b v1.2.17-maint https://git.launchpad.net/~ubuntu-virt/libvirt/+git/libvirt-lp-import

Branch merges

Branch information

Name:
v1.2.17-maint
Repository:
lp:~ubuntu-virt/libvirt/+git/libvirt-lp-import

Recent commits

49fa383... by Jiri Denemark <email address hidden>

qemu: Let empty default VNC password work as documented

CVE-2016-5008

Setting an empty graphics password is documented as a way to disable
VNC/SPICE access, but QEMU does not always behaves like that. VNC would
happily accept the empty password. Let's enforce the behavior by setting
password expiration to "now".

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

Signed-off-by: Jiri Denemark <email address hidden>
(cherry picked from commit bb848feec0f3f10e92dd8e5231ae7aa89b5598f3)

08acad5... by Eric Blake

CVE-2015-5313: storage: don't allow '/' in filesystem volume names

The libvirt file system storage driver determines what file to
act on by concatenating the pool location with the volume name.
If a user is able to pick names like "../../../etc/passwd", then
they can escape the bounds of the pool. For that matter,
virStoragePoolListVolumes() doesn't descend into subdirectories,
so a user really shouldn't use a name with a slash.

Normally, only privileged users can coerce libvirt into creating
or opening existing files using the virStorageVol APIs; and such
users already have full privilege to create any domain XML (so it
is not an escalation of privilege). But in the case of
fine-grained ACLs, it is feasible that a user can be granted
storage_vol:create but not domain:write, and it violates
assumptions if such a user can abuse libvirt to access files
outside of the storage pool.

Therefore, prevent all use of volume names that contain "/",
whether or not such a name is actually attempting to escape the
pool.

This changes things from:

$ virsh vol-create-as default ../../../../../../etc/haha --capacity 128
Vol ../../../../../../etc/haha created
$ rm /etc/haha

to:

$ virsh vol-create-as default ../../../../../../etc/haha --capacity 128
error: Failed to create vol ../../../../../../etc/haha
error: Requested operation is not valid: volume name '../../../../../../etc/haha' cannot contain '/'

Signed-off-by: Eric Blake <email address hidden>
(cherry picked from commit 034e47c338b13a95cf02106a3af912c1c5f818d7)

4268b1f... by Michal Privoznik <email address hidden>

remoteClientCloseFunc: Don't mangle connection object refcount

Well, in 8ad126e6 we tried to fix a memory corruption problem.
However, the fix was not as good as it could be. I mean, the
commit has one line more than it should. I've noticed this output
just recently:

  # ./run valgrind --leak-check=full --show-reachable=yes ./tools/virsh domblklist gentoo
  ==17019== Memcheck, a memory error detector
  ==17019== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
  ==17019== Using Valgrind-3.10.1 and LibVEX; rerun with -h for copyright info
  ==17019== Command: /home/zippy/work/libvirt/libvirt.git/tools/.libs/virsh domblklist gentoo
  ==17019==
  Target Source
  ------------------------------------------------
  fda /var/lib/libvirt/images/fd.img
  vda /var/lib/libvirt/images/gentoo.qcow2
  hdc /home/zippy/tmp/install-amd64-minimal-20150402.iso

  ==17019== Thread 2:
  ==17019== Invalid read of size 4
  ==17019== at 0x4EFF5B4: virObjectUnref (virobject.c:258)
  ==17019== by 0x5038CFF: remoteClientCloseFunc (remote_driver.c:552)
  ==17019== by 0x5069D57: virNetClientCloseLocked (virnetclient.c:685)
  ==17019== by 0x506C848: virNetClientIncomingEvent (virnetclient.c:1852)
  ==17019== by 0x5082136: virNetSocketEventHandle (virnetsocket.c:1913)
  ==17019== by 0x4ECD64E: virEventPollDispatchHandles (vireventpoll.c:509)
  ==17019== by 0x4ECDE02: virEventPollRunOnce (vireventpoll.c:658)
  ==17019== by 0x4ECBF00: virEventRunDefaultImpl (virevent.c:308)
  ==17019== by 0x130386: vshEventLoop (vsh.c:1864)
  ==17019== by 0x4F1EB07: virThreadHelper (virthread.c:206)
  ==17019== by 0xA8462D3: start_thread (in /lib64/libpthread-2.20.so)
  ==17019== by 0xAB441FC: clone (in /lib64/libc-2.20.so)
  ==17019== Address 0x139023f4 is 4 bytes inside a block of size 240 free'd
  ==17019== at 0x4C2B1F0: free (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
  ==17019== by 0x4EA8949: virFree (viralloc.c:582)
  ==17019== by 0x4EFF6D0: virObjectUnref (virobject.c:273)
  ==17019== by 0x4FE74D6: virConnectClose (libvirt.c:1390)
  ==17019== by 0x13342A: virshDeinit (virsh.c:406)
  ==17019== by 0x134A37: main (virsh.c:950)

The problem is, when registering remoteClientCloseFunc(), it's
conn->closeCallback which is ref'd. But in the function itself
it's conn->closeCallback->conn what is unref'd. This is causing
imbalance in reference counting. Moreover, there's no need for
the remote driver to increase/decrease conn refcount since it's
not used anywhere. It's just merely passed to client registered
callback. And for that purpose it's correctly ref'd in
virConnectRegisterCloseCallback() and then unref'd in
virConnectUnregisterCloseCallback().

Signed-off-by: Michal Privoznik <email address hidden>
(cherry picked from commit e68930077034f786e219bdb015f8880dbc5a246f)
Signed-off-by: Michal Privoznik <email address hidden>

d055989... by John Ferlan <email address hidden>

storage: Correct the 'mode' check

Commit id '7c2d65dde2' changed the default value of mode to be -1 if not
supplied in the XML, which should cause creation of the volume using the
default mode of VIR_STORAGE_DEFAULT_VOL_PERM_MODE; however, the check
made was whether mode was '0' or not to use default or provided value.

This patch fixes the issue to check if the 'mode' was provided in the XML
and use that value.

(cherry picked from commit 691dd388aee99f8b06177540303b690586d5f5b3)

98242f9... by John Ferlan <email address hidden>

storage: Handle failure from refreshVol

Commit id '155ca616' added the 'refreshVol' API. In an NFS root-squash
environment it was possible that if the just created volume from XML wasn't
properly created with the right uid/gid and/or mode, then the followup
refreshVol will fail to open the volume in order to get the allocation/
capacity values. This would leave the volume still on the server and
cause a libvirtd crash because 'voldef' would be in the pool list, but
the cleanup code would free it.

(cherry picked from commit db9277a39bc364806e8d3e08a08fc128d59b7094)

a3ee688... by John Ferlan <email address hidden>

virfile: Introduce virFileUnlink

In an NFS root-squashed environment the 'vol-delete' command will fail to
'unlink' the target volume since it was created under a different uid:gid.

This code continues the concepts introduced in virFileOpenForked and
virDirCreate[NoFork] with respect to running the unlink command under
the uid/gid of the child. Unlike the other two, don't retry on EACCES
(that's why we're here doing this now).

(cherry picked from commit 35847860f65f92e444db9730e00cdaef45198e0c)

a0080cb... by Jim Fehlig

Revert "LXC: show used memory as 0 when domain is not active"

This reverts commit 1ce7c1d20cfd5afb26d2dbc88201085d52415d0e,
which introduced a significant semantic change to the
virDomainGetInfo() API. Additionally, the change was only
made to 2 of the 15 virt drivers.

Conflicts:
 src/qemu/qemu_driver.c

Signed-off-by: Jim Fehlig <email address hidden>
(cherry picked from commit 60acb38abbee1636a9cddf8d296f700d115c8f77)

45e32f2... by Christophe Fergeau <email address hidden>

storage: fs: Fix pool building when directory already exists

Currently, when trying to virsh pool-define/virsh pool-build a new
'dir' pool, if the target directory already exists, virsh
pool-build/virStoragePoolBuild will error out. This is a change of
behaviour compared to eg libvirt 1.2.13

This is caused by the wrong type being used for the dir_create_flags
variable in virStorageBackendFileSystemBuild , it's defined as a bool
but is used as a flag bit field so should be unsigned int (this matches
the type virDirCreate expects for this variable).

This should fix https://bugzilla.gnome.org/show_bug.cgi?id=752417 (GNOME
Boxes) and https://bugzilla.redhat.com/show_bug.cgi?id=1244080
(downstream virt-manager).

02b9226... by Martin Kletzander

rpc: Rework timerActive logic in daemon

Daemon used false logic for determining whether there were any clients.
When the timer was inactive, it was activated if at least one of the
servers did not have clients. So the bool was being flipped there and
back all the time in case there was one client, for example.

Initially introduced by fa1420736882.

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

Signed-off-by: Martin Kletzander <email address hidden>
(cherry picked from commit b7ea58c262194037042284a14fb1608c9cf31884)
Signed-off-by: Michal Privoznik <email address hidden>

ea16e3e... by Martin Kletzander

rpc: Add virNetDaemonHasClients

So callers don't have to iterate over each server.

Signed-off-by: Martin Kletzander <email address hidden>
(cherry picked from commit 699faeacb10459fed748d425eb044ef69697e804)
Signed-off-by: Michal Privoznik <email address hidden>