summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* ci/Makefile: get rid of 'make check' referencesDaniel Henrique Barboza2020-08-171-3/+3
| | | | | | | | Update the remaining 'make check' references after the switch to meson/ninja. Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com> Reviewed-by: Erik Skultety <eskultet@redhat.com>
* docs: get rid of 'make check' referencesDaniel Henrique Barboza2020-08-173-7/+7
| | | | | | | | | | | Update the remaining 'make check' references after the switch to meson/ninja. The reference in testsuites.html.in was kept with a note that it is the process for Libvirt 6.6.0 and older. Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com> Reviewed-by: Erik Skultety <eskultet@redhat.com>
* storage: avoid maybe-uninitialized warning by GCC 10Boris Fiuczynski2020-08-171-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | GCC 10 complains about variables may be used uninitialized. Even though it might be false positives, we can easily avoid them. Avoiding ../src/storage/storage_backend_iscsi_direct.c:634:11: error: ‘nb_block’ may be used uninitialized in this function [-Werror=maybe-uninitialized] 634 | while (lba < nb_block) { | ^ ../src/storage/storage_backend_iscsi_direct.c:619:14: note: ‘nb_block’ was declared here 619 | uint64_t nb_block; | ^~~~~~~~ ../src/storage/storage_backend_iscsi_direct.c:637:16: error: ‘block_size’ may be used uninitialized in this function [-Werror=maybe-uninitialized] 637 | task = iscsi_write16_sync(iscsi, lun, lba, data, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 638 | block_size * to_write, | ~~~~~~~~~~~~~~~~~~~~~~ 639 | block_size, 0, 0, 0, 0, 0); | ~~~~~~~~~~~~~~~~~~~~~~~~~~ ../src/storage/storage_backend_iscsi_direct.c:618:14: note: ‘block_size’ was declared here 618 | uint32_t block_size; | ^~~~~~~~~~ ../src/storage/storage_backend_iscsi_direct.c: In function ‘virStorageBackendISCSIDirectRefreshPool’: ../src/storage/storage_backend_iscsi_direct.c:320:39: error: ‘nb_block’ may be used uninitialized in this function [-Werror=maybe-uninitialized] 320 | vol->target.capacity = block_size * nb_block; | ~~~~~~~~~~~^~~~~~~~~~ ../src/storage/storage_backend_iscsi_direct.c:306:14: note: ‘nb_block’ was declared here 306 | uint64_t nb_block; | ^~~~~~~~ ../src/storage/storage_backend_iscsi_direct.c:320:39: error: ‘block_size’ may be used uninitialized in this function [-Werror=maybe-uninitialized] 320 | vol->target.capacity = block_size * nb_block; | ~~~~~~~~~~~^~~~~~~~~~ ../src/storage/storage_backend_iscsi_direct.c:305:14: note: ‘block_size’ was declared here 305 | uint32_t block_size; | ^~~~~~~~~~ Signed-off-by: Boris Fiuczynski <fiuczy@linux.ibm.com> Reviewed-by: Marc Hartmayer <mhartmay@linux.ibm.com> Reviewed-by: Erik Skultety <eskultet@redhat.com>
* tools: avoid potential null pointer dereference by GCC 10Boris Fiuczynski2020-08-171-1/+1
| | | | | | | | | | | | | | | GCC 10 complains about "arg" possibly being a NULL dereference. Even though it might be a false positive, we can easily avoid it. Avoiding ../tools/vsh.c: In function ‘vshCommandOptStringReq’: ../tools/vsh.c:1034:19: error: potential null pointer dereference [-Werror=null-dereference] 1034 | else if (!*arg->data && !(arg->def->flags & VSH_OFLAG_EMPTY_OK)) | ~~~^~~~~~ Signed-off-by: Boris Fiuczynski <fiuczy@linux.ibm.com> Reviewed-by: Marc Hartmayer <mhartmay@linux.ibm.com> Reviewed-by: Erik Skultety <eskultet@redhat.com>
* qemu: avoid maybe-uninitialized warning by GCC 10Boris Fiuczynski2020-08-171-1/+1
| | | | | | | | | | | | | | | GCC 10 complains about "well_formed_uri" may be used uninitialzed. Even though it is a false positive, we can easily avoid it. Avoiding ../src/qemu/qemu_migration.c: In function ‘qemuMigrationDstPrepareDirect’: ../src/qemu/qemu_migration.c:2920:16: error: ‘well_formed_uri’ may be used uninitialized in this function [-Werror=maybe-uninitialized] 2920 | if (well_formed_uri) { | ^ Signed-off-by: Boris Fiuczynski <fiuczy@linux.ibm.com> Reviewed-by: Marc Hartmayer <mhartmay@linux.ibm.com> Reviewed-by: Erik Skultety <eskultet@redhat.com>
* apparmor: fix code style error in reduced if statementChristian Ehrhardt2020-08-131-2/+1
| | | | | | | | | sc_spacing-check FAIL reporting a case of "Curly brackets around single-line body:" in a recent commit. Fixes: d9c21f4b "apparmor: allow adding permanent per guest rules" Signed-off-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
* apparmor: allow unmounting .dev entriesChristian Ehrhardt2020-08-131-0/+1
| | | | | | | | | | | | | | | | | With qemu 5.0 and libvirt 6.6 there are new apparmor denials: apparmor="DENIED" operation="umount" profile="libvirtd" name="/run/libvirt/qemu/1-kvmguest-groovy-norm.dev/" comm="rpc-worker" These are related to new issues around devmapper handling [1] and the error path triggered by these issues now causes this new denial. There are already related rules for mounting and it seems right to allow also the related umount. [1]: https://www.redhat.com/archives/libvir-list/2020-August/msg00236.html Signed-off-by: Christian Ehrhardt <christian.ehrhardt@canonical.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
* apparmor: allow adding permanent per guest rulesChristian Ehrhardt2020-08-131-2/+1
| | | | | | | | | | | | | | | | | | | | | | | | The design of apparmor in libvirt always had a way to define custom per-guest rules as described in docs/drvqemu.html and [1]. A fix meant to clean the profiles after guest shutdown was a bit overzealous and accidentially removed this important admin feature as well. Therefore reduce the --delete option of virt-aa-helper to only delete the .files that would be re-generated in any case. Users/Admins are always free to clean the profiles themselve if they prefer a clean directory - they will be regenerated as needed. But libvirt should never remove the base profile meant to allow per-guest overrides and thereby break a documented feature. [1]: https://gitlab.com/apparmor/apparmor/-/wikis/Libvirt#advanced-usage Fixes: eba2225b "apparmor: delete profile on VM shutdown" Signed-off-by: Christian Ehrhardt <christian.ehrhardt@canonical.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
* qemu: fix crash in qemuDomainSetBlkioParameters without cgroupsPavel Hrdina2020-08-121-1/+1
| | | | | | | | | | | | | | | | | If we don't have cgroups available and user tries to update blkio parameters for running VM it will crash. It should have been protected by the virCgroupHasController() check but it was never called if the API was executed without any flags. We call virDomainObjGetDefs() which sets `def` and `persistentDef` based on the flags and these two variables should be used to figure out if we need to update LIVE, CONFIG or both states. Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1808293 Signed-off-by: Pavel Hrdina <phrdina@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
* kbase: sev: Provide more details on virtio-net configurationErik Skultety2020-08-121-2/+26
| | | | | | | | | | With virtio-net we also need to disable the iPXE option ROM otherwise a SEV-enabled guest would not boot. While at it, fix the full machine XML examples accordingly. Reported-by: Dr. David Alan Gilbert <dgilbert@redhat.com> Signed-off-by: Erik Skultety <eskultet@redhat.com> Reviewed-by: Laszlo Ersek <lersek@redhat.com>
* docs: formatdomain: fix superscriptsJán Tomko2020-08-121-6/+6
| | | | | | There needs to be a space before the :sup: directive. Signed-off-by: Ján Tomko <jtomko@redhat.com>
* bhyve: fix NULL pointer check positionJán Tomko2020-08-111-4/+4
| | | | | | | | | | | | | src/bhyve/bhyve_parse_command.c:437:9: warning: Either the condition '!config' is redundant or there is possible null pointer dereference: config. [nullPointerRedundantCheck] src/bhyve/bhyve_parse_command.c:280:23: warning: Either the condition '!separator' is redundant or there is pointer arithmetic with NULL pointer. [nullPointerArithmeticRedundantCheck] Signed-off-by: Ján Tomko <jtomko@redhat.com> Reviewed-by: Roman Bogorodskiy <bogorodskiy@gmail.com>
* vircgroupv2devices: fix counting entries in BPF mapPavel Hrdina2020-08-111-1/+1
| | | | | | | | | | | | | | | | BPF syscall BPF_MAP_GET_NEXT_KEY returns -1 if something fails but it will also return -1 if trying to get next key using the last key in the map with errno set to ENOENT. If there are VMs running and libvirtd is restarted and user tries to call some cgroup devices operation on a VM we need to get the count of entries in BPF map and it fails which will result in error when trying to attach/detech devices. Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1833321 Signed-off-by: Pavel Hrdina <phrdina@redhat.com> Reviewed-by: Erik Skultety <eskultet@redhat.com>
* meson: define IFCONFIG_PATH for virnetdevipRoman Bogorodskiy2020-08-101-0/+1
| | | | | | | | When checking for ifconfig(8), set not only IFCONFIG value, but also IFCONFIG_PATH as it's used in util/virnetdevip.c. Signed-off-by: Roman Bogorodskiy <bogorodskiy@gmail.com> Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
* meson: fix BSD bridge management routines checkRoman Bogorodskiy2020-08-101-3/+6
| | | | | | | | Add missing prerequisite headers for checking BRDGSFD, BRDGADD, BRDGDEL in net/if_bridgevar.h. Signed-off-by: Roman Bogorodskiy <bogorodskiy@gmail.com> Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
* meson: fix link_addr(3) checkRoman Bogorodskiy2020-08-101-2/+2
| | | | | | | | Add missing prerequisite headers for checking link_addr(3) in net/if_dl.h. Signed-off-by: Roman Bogorodskiy <bogorodskiy@gmail.com> Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
* apparmor: let qemu load old shared objects after upgradesChristian Ehrhardt2020-08-101-0/+5
| | | | | | | | | | | | | | | | | Since [1] qemu can after upgrade fall back to pre-upgrade modules to still be able to dynamically load qemu-module based features. The paths for these modules are pre-defined by the code and should be allowed to be mapped and loaded from which will allow packagers avoiding the inability of late feature load [2] after package upgrades. [1]: https://github.com/qemu/qemu/commit/bd83c861 [2]: https://bugs.launchpad.net/ubuntu/+source/qemu/+bug/1847361 Signed-off-by: Christian Ehrhardt <christian.ehrhardt@canonical.com> Acked-by: Jamie Strandboge <jamie@canonical.com> Reviewed-by: Andrea Bolognani <abologna@redhat.com> Reviewed-by: Daniel P. Berrangé <berrange redhat com>
* apparmor: qemu access to @{PROC}/*/auxv for hw_capStefan Bader2020-08-101-0/+2
| | | | | | | | | | | | | On some architectures (ppc, s390x, sparc, arm) qemu will read auxv to detect hardware capabilities via qemu_getauxval. Allow that access read-only for the entry owned by the current qemu process. Signed-off-by: Christian Ehrhardt <christian.ehrhardt@canonical.com> Signed-off-by: Stefan Bader <stefan.bader@canonical.com> Reviewed-by: Andrea Bolognani <abologna@redhat.com> Acked-by: Jamie Strandboge <jamie@canonical.com>
* apparmor: read only access to overcommit_memoryJamie Strandboge2020-08-101-0/+1
| | | | | | | | | | | Allow qemu to read @{PROC}/sys/vm/overcommit_memory. This is read on guest start-up and (as read-only) not a critical secret that has to stay hidden. Signed-off-by: Christian Ehrhardt <christian.ehrhardt@canonical.com> Signed-off-by: Stefan Bader <stefan.bader@canonical.com> Signed-off-by: Jamie Strandboge <jamie@ubuntu.com> Reviewed-by: Andrea Bolognani <abologna@redhat.com>
* apparmor: allow libvirtd to call pygrubStefan Bader2020-08-101-0/+1
| | | | | | | | | | | | | | | | | | | | | | When using xen through libxl in Debian/Ubuntu it needs to be able to call pygrub. This is placed in a versioned path like /usr/lib/xen-4.11/bin. In theory the rule could be more strict by rendering the libexec_dir setting pkg-config can derive from libbxen-dev. But that would make particular libvirt/xen packages version-depend on each other. It seems more reasonable to avoid these versioned dependencies and use a wildcard rule instead as it is already in place for libxl-save-helper. Note: This change was in Debian [1] and Ubuntu [2] for quite some time already. [1]: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=931768 [2]: https://bugs.launchpad.net/ubuntu/+source/libvirt/+bug/1326003 Signed-off-by: Christian Ehrhardt <christian.ehrhardt@canonical.com> Reviewed-by: Andrea Bolognani <abologna@redhat.com> Acked-by: Jamie Strandboge <jamie@canonical.com>
* apparmor: allow default pki pathSam Hartman2020-08-101-0/+2
| | | | | | | | | | | | | | | | /etc/pki/qemu is a pki path recommended by qemu tls docs [1] and one that can cause issues with spice connections when missing. Add the path to the allowed list of pki paths to fix the issue. Note: this is active in Debian/Ubuntu [1] for quite a while already. [1]: https://www.qemu.org/docs/master/system/tls.html [2]: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=930100 Signed-off-by: Christian Ehrhardt <christian.ehrhardt@canonical.com> Reviewed-by: Andrea Bolognani <abologna@redhat.com> Acked-by: Jamie Strandboge <jamie@canonical.com>
* qemu: consider available CPUs in iothread info outputPavel Hrdina2020-08-081-6/+1
| | | | | | | | | Following the rationale from commit <2020c6af8a8e4bb04acb629d089142be984484c8> we should do the same thing for iothread info as well. Signed-off-by: Pavel Hrdina <phrdina@redhat.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
* test: fix emulator pin info in test driverPavel Hrdina2020-08-081-2/+2
| | | | | | | | | | | | | | | Commit <6328da04285d9f65cb323d399f731c20caf63f5a> introduced testDomainGetEmulatorPinInfo() into test driver but used virHostCPUGetCount() function to get the number of host CPUs. This would be correct for other drivers but in test driver we must not depend on the host, we have to use hard-coded host representation that we have in test driver. Follows the logic of testDomainGetVcpuPinInfo(). Signed-off-by: Pavel Hrdina <phrdina@redhat.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
* conf: fix detection of available host CPUs for vcpupinPavel Hrdina2020-08-085-19/+24
| | | | | | | | | | | | | | | | | | Commit <2020c6af8a8e4bb04acb629d089142be984484c8> fixed an issue with QEMU driver by reporting offline CPUs as well. However, doing so it introduced a regression into libxl and test drivers by completely ignoring the passed `hostcpus` variable. Move the virHostCPUGetAvailableCPUsBitmap() out of the helper into QEMU driver so it will not affect other drivers which gets the number of host CPUs differently. This was uncovered by running libvirt-dbus test suite which counts on the fact that test driver has hard-coded host definition and must not depend on the host at all. Signed-off-by: Pavel Hrdina <phrdina@redhat.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
* qemu: remove use of gettid() syscallDaniel P. Berrangé2020-08-071-2/+2
| | | | | | | This is not expose in most historical versions of glibc, nor non-glibc impls. We must use our wrapper API instead. Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
* qemu: fix race in signal interrupt during QEMU startupDaniel P. Berrangé2020-08-071-5/+72
| | | | | | | | | | | | | | | If a Ctrl-C arrives while we are in the middle of executing the virDomainCreateXML call, we will have no "virDomainPtr" object available, but QEMU may none the less be running. This means we'll never try to stop the QEMU process before we honour the Ctrl-C and exit. To deal with this race we need to postpone quit of the event loop if it is requested while in the middle of domain startup. Reviewed-by: Michal Privoznik <mprivozn@redhat.com> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
* util: avoid race in releasing the GSource in event threadDaniel P. Berrangé2020-08-071-1/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | There is a race between vir_event_thread_finalize and virEventThreadWorker in releasing the last reference on the GMainContext. If virEventThreadDataFree() runs after vir_event_thread_finalize releases its reference, then it will release the last reference on the GMainContext. As a result g_autoptr cleanup on the GSource will access free'd memory. The race can be seen in non-deterministic crashes of the virt-run-qemu program during its shutdown, but could also likely affect the main libvirtd QEMU driver: Thread 2 (Thread 0x7f508ffff700 (LWP 222813)): #0 0x00007f509c8e26b0 in malloc_consolidate (av=av@entry=0x7f5088000020) at malloc.c:4488 #1 0x00007f509c8e4b08 in _int_malloc (av=av@entry=0x7f5088000020, bytes=bytes@entry=2048) at malloc.c:3711 #2 0x00007f509c8e6412 in __GI___libc_malloc (bytes=2048) at malloc.c:3073 #3 0x00007f509d6e925e in g_realloc (mem=0x0, n_bytes=2048) at gmem.c:164 #4 0x00007f509d705a57 in g_string_maybe_expand (string=string@entry=0x7f5088001f20, len=len@entry=1024) at gstring.c:102 #5 0x00007f509d705ab6 in g_string_sized_new (dfl_size=dfl_size@entry=1024) at gstring.c:127 #6 0x00007f509d708c5e in g_test_log_dump (len=<synthetic pointer>, msg=<synthetic pointer>) at gtestutils.c:3330 #7 0x00007f509d708c5e in g_test_log (lbit=G_TEST_LOG_ERROR, string1=0x7f508800fcb0 "GLib:ERROR:ghash.c:377:g_hash_table_lookup_node: assertion failed: (hash_table->ref_count > 0)", string2=<optimized out>, n_args=0, largs=0x0) at gtestutils.c:975 #8 0x00007f509d70af2a in g_assertion_message (domain=<optimized out>, file=0x7f509d7324a2 "ghash.c", line=<optimized out>, func=0x7f509d732750 <__func__.11348> "g_hash_table_lookup_node", message=<optimized out>) at gtestutils.c:2504 #9 0x00007f509d70af8e in g_assertion_message_expr (domain=domain@entry=0x7f509d72d76e "GLib", file=file@entry=0x7f509d7324a2 "ghash.c", line=line@entry=377, func=func@entry=0x7f509d732750 <__func__.11348> "g_hash_table_lookup_node", expr=expr@entry=0x7f509d732488 "hash_table->ref_count > 0") at gtestutils.c:2555 #10 0x00007f509d6d197e in g_hash_table_lookup_node (hash_table=0x55b70ace1760, key=<optimized out>, hash_return=<synthetic pointer>) at ghash.c:377 #11 0x00007f509d6d197e in g_hash_table_lookup_node (hash_return=<synthetic pointer>, key=<optimized out>, hash_table=0x55b70ace1760) at ghash.c:361 #12 0x00007f509d6d197e in g_hash_table_remove_internal (hash_table=0x55b70ace1760, key=<optimized out>, notify=1) at ghash.c:1371 #13 0x00007f509d6e0664 in g_source_unref_internal (source=0x7f5088000b60, context=0x55b70ad87e00, have_lock=0) at gmain.c:2103 #14 0x00007f509d6e1f64 in g_source_unref (source=<optimized out>) at gmain.c:2176 #15 0x00007f50a08ff84c in glib_autoptr_cleanup_GSource (_ptr=<synthetic pointer>) at /usr/include/glib-2.0/glib/glib-autocleanups.h:58 #16 0x00007f50a08ff84c in virEventThreadWorker (opaque=0x55b70ad87f80) at ../../src/util/vireventthread.c:114 #17 0x00007f509d70bd4a in g_thread_proxy (data=0x55b70acf3850) at gthread.c:784 #18 0x00007f509d04714a in start_thread (arg=<optimized out>) at pthread_create.c:479 #19 0x00007f509c95cf23 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95 Thread 1 (Thread 0x7f50a1380c00 (LWP 222802)): #0 0x00007f509c8977ff in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50 #1 0x00007f509c881c35 in __GI_abort () at abort.c:79 #2 0x00007f509d72a823 in g_mutex_clear (mutex=0x55b70ad87e00) at gthread-posix.c:1307 #3 0x00007f509d72a823 in g_mutex_clear (mutex=mutex@entry=0x55b70ad87e00) at gthread-posix.c:1302 #4 0x00007f509d6e1a84 in g_main_context_unref (context=0x55b70ad87e00) at gmain.c:582 #5 0x00007f509d6e1a84 in g_main_context_unref (context=0x55b70ad87e00) at gmain.c:541 #6 0x00007f50a08ffabb in vir_event_thread_finalize (object=0x55b70ad83180 [virEventThread]) at ../../src/util/vireventthread.c:50 #7 0x00007f509d9c48a9 in g_object_unref (_object=<optimized out>) at gobject.c:3340 #8 0x00007f509d9c48a9 in g_object_unref (_object=0x55b70ad83180) at gobject.c:3232 #9 0x00007f509583d311 in qemuProcessQMPFree (proc=proc@entry=0x55b70ad87b90) at ../../src/qemu/qemu_process.c:8355 #10 0x00007f5095790f58 in virQEMUCapsInitQMPSingle (qemuCaps=qemuCaps@entry=0x55b70ad88010, libDir=libDir@entry=0x55b70ad049e0 "/tmp/virt-qemu-run-VZC9N0/lib/qemu", runUid=runUid@entry=107, runGid=runGid@entry=107, onlyTCG=onlyTCG@entry=false) at ../../src/qemu/qemu_capabilities.c:5409 #11 0x00007f509579108f in virQEMUCapsInitQMP (runGid=107, runUid=107, libDir=0x55b70ad049e0 "/tmp/virt-qemu-run-VZC9N0/lib/qemu", qemuCaps=0x55b70ad88010) at ../../src/qemu/qemu_capabilities.c:5420 #12 0x00007f509579108f in virQEMUCapsNewForBinaryInternal (hostArch=VIR_ARCH_X86_64, binary=binary@entry=0x55b70ad7dc40 "/usr/libexec/qemu-kvm", libDir=0x55b70ad049e0 "/tmp/virt-qemu-run-VZC9N0/lib/qemu", runUid=107, runGid=107, hostCPUSignature=0x55b70ad01320 "GenuineIntel, Intel(R) Xeon(R) Silver 4210 CPU @ 2.20GHz, family: 6, model: 85, stepping: 7", microcodeVersion=83898113, kernelVersion=0x55b70ad00d60 "4.18.0-211.el8.x86_64 #1 SMP Thu Jun 4 08:08:16 UTC 2020") at ../../src/qemu/qemu_capabilities.c:5472 #13 0x00007f5095791373 in virQEMUCapsNewData (binary=0x55b70ad7dc40 "/usr/libexec/qemu-kvm", privData=0x55b70ad5b8f0) at ../../src/qemu/qemu_capabilities.c:5505 #14 0x00007f50a09a32b1 in virFileCacheNewData (name=0x55b70ad7dc40 "/usr/libexec/qemu-kvm", cache=<optimized out>) at ../../src/util/virfilecache.c:208 #15 0x00007f50a09a32b1 in virFileCacheValidate (cache=cache@entry=0x55b70ad5c030, name=name@entry=0x55b70ad7dc40 "/usr/libexec/qemu-kvm", data=data@entry=0x7ffca39ffd90) at ../../src/util/virfilecache.c:277 #16 0x00007f50a09a37ea in virFileCacheLookup (cache=cache@entry=0x55b70ad5c030, name=name@entry=0x55b70ad7dc40 "/usr/libexec/qemu-kvm") at ../../src/util/virfilecache.c:310 #17 0x00007f5095791627 in virQEMUCapsCacheLookup (cache=0x55b70ad5c030, binary=0x55b70ad7dc40 "/usr/libexec/qemu-kvm") at ../../src/qemu/qemu_capabilities.c:5647 #18 0x00007f50957c34c3 in qemuDomainPostParseDataAlloc (def=<optimized out>, parseFlags=<optimized out>, opaque=<optimized out>, parseOpaque=0x7ffca39ffe18) at ../../src/qemu/qemu_domain.c:5470 #19 0x00007f50a0a34051 in virDomainDefPostParse (def=def@entry=0x55b70ad7d200, parseFlags=parseFlags@entry=258, xmlopt=xmlopt@entry=0x55b70ad5d010, parseOpaque=parseOpaque@entry=0x0) at ../../src/conf/domain_conf.c:5970 #20 0x00007f50a0a464bb in virDomainDefParseNode (xml=xml@entry=0x55b70aced140, root=root@entry=0x55b70ad5f020, xmlopt=xmlopt@entry=0x55b70ad5d010, parseOpaque=parseOpaque@entry=0x0, flags=flags@entry=258) at ../../src/conf/domain_conf.c:22520 #21 0x00007f50a0a4669b in virDomainDefParse (xmlStr=xmlStr@entry=0x55b70ad5f9e0 "<domain type='kvm'>\n <name>83</name>\n <uuid>9350639d-1c8a-4f51-a4a6-4eaf8eabe83e</uuid>\n <metadata>\n <libosinfo:libosinfo xmlns:libosinfo=\"http://libosinfo.org/xmlns/libvirt/domain/1.0\">\n <"..., filename=filename@entry=0x0, xmlopt=0x55b70ad5d010, parseOpaque=parseOpaque@entry=0x0, flags=flags@entry=258) at ../../src/conf/domain_conf.c:22474 #22 0x00007f50a0a467ae in virDomainDefParseString (xmlStr=xmlStr@entry=0x55b70ad5f9e0 "<domain type='kvm'>\n <name>83</name>\n <uuid>9350639d-1c8a-4f51-a4a6-4eaf8eabe83e</uuid>\n <metadata>\n <libosinfo:libosinfo xmlns:libosinfo=\"http://libosinfo.org/xmlns/libvirt/domain/1.0\">\n <"..., xmlopt=<optimized out>, parseOpaque=parseOpaque@entry=0x0, flags=flags@entry=258) at ../../src/conf/domain_conf.c:22488 #23 0x00007f50958ce112 in qemuDomainCreateXML (conn=0x55b70acf9090, xml=0x55b70ad5f9e0 "<domain type='kvm'>\n <name>83</name>\n <uuid>9350639d-1c8a-4f51-a4a6-4eaf8eabe83e</uuid>\n <metadata>\n <libosinfo:libosinfo xmlns:libosinfo=\"http://libosinfo.org/xmlns/libvirt/domain/1.0\">\n <"..., flags=0) at ../../src/qemu/qemu_driver.c:1744 #24 0x00007f50a0c268ac in virDomainCreateXML (conn=0x55b70acf9090, xmlDesc=0x55b70ad5f9e0 "<domain type='kvm'>\n <name>83</name>\n <uuid>9350639d-1c8a-4f51-a4a6-4eaf8eabe83e</uuid>\n <metadata>\n <libosinfo:libosinfo xmlns:libosinfo=\"http://libosinfo.org/xmlns/libvirt/domain/1.0\">\n <"..., flags=0) at ../../src/libvirt-domain.c:176 #25 0x000055b709547e7b in main (argc=<optimized out>, argv=<optimized out>) at ../../src/qemu/qemu_shim.c:289 The solution is to explicitly unref the GSource at a safe time instead of letting g_autoptr unref it when leaving scope. Reviewed-by: Michal Privoznik <mprivozn@redhat.com> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
* util: avoid crash due to race in glib event loop codeDaniel P. Berrangé2020-08-071-6/+24
| | | | | | | | | | | | | | | | | | | | | There is a fairly long standing race condition bug in glib which can hit if you call g_source_destroy or g_source_unref from a non-main thread: https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1358 Unfortunately it is really common for libvirt to call g_source_destroy from a non-main thread. This glib bug is the cause of non-determinstic crashes in eventtest, and probably in libvirtd too. To work around the problem we need to ensure that we never release the last reference on a GSource from a non-main thread. The previous patch replaced our use of g_source_destroy with a pair of g_source_remove and g_source_unref. We can now delay the g_source_unref call by using a idle callback to invoke it from the main thread which avoids the race condition. Reviewed-by: Michal Privoznik <mprivozn@redhat.com> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
* util: keep track of full GSource object not source ID numberDaniel P. Berrangé2020-08-074-53/+79
| | | | | | | | | | | | | The source ID number is an alternative way to identify a source that has been added to a GMainContext. Internally when a source ID is given, glib will lookup the corresponding GSource and use that. The use of a source ID is racy in some cases though, because it is invalid to continue to use an ID number after the GSource has been removed. It is thus safer to use the GSource object directly and have full control over the ref counting and thus cleanup. Reviewed-by: Michal Privoznik <mprivozn@redhat.com> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
* meson: fix readline detection if there is no pkg-config filePavel Hrdina2020-08-051-7/+9
| | | | | | | | | | | | | | | | | | | Commit <74416b1d4849ef77ef31de5344dd75f03094434b> added check for rl_completion_quote_character to make sure we have correct readline library. Commit <a9443bc9a9ef451b46306e66ed3b706756fc1414> added inaccurate comment that it's a function. We need to check for generic symbol instead of checking for function. In addition the readline/readline.h file requires stdio.h to by included beforehand which was done in autotools but I dropped it in meson. And lastly the final condition to print error or disable readline was broken as well by replacing the readline_dep every time if readline was not explicitly enabled. Reported-by: Erik Skultety <eskultet@redhat.com> Signed-off-by: Pavel Hrdina <phrdina@redhat.com> Reviewed-by: Andrea Bolognani <abologna@redhat.com>
* docs/manpages/meson: fix sanlock detectionPavel Hrdina2020-08-051-1/+1
| | | | | | | | | | | In meson.build we define sanlock_dep only if it is available but in addition we add 'WITH_SANLOCK' into conf. Use the presence of 'WITH_SANLOCK' in conf to figure out if we need to install virt-sanlock-cleanup man page. Reported-by: Michal Privoznik <mprivozn@redhat.com> Signed-off-by: Pavel Hrdina <phrdina@redhat.com> Reviewed-by: Erik Skultety <eskultet@redhat.com>
* scripts: Fix meson-install-symlink.py overwriting existing linksErik Skultety2020-08-051-0/+4
| | | | | | | | | | | | | | | | | | By default, symlink re-creation fails if the link already exists, more specifically in case of meson-install-symlink.py: Traceback (most recent call last): File "/<path_to_libvirt_repo>/scripts/meson-install-symlink.py", line 15, in <module> os.symlink(target, link) FileExistsError: File exists: '../default.xml' -> 'default.xml' Unfortunately, Python can't mimic "ln -sf", so we have to fix this differently - remove the existing link first and then try re-creating it. Signed-off-by: Erik Skultety <eskultet@redhat.com> Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
* util: Fix logic in virFileSetCOWJiri Denemark2020-08-051-1/+1
| | | | | | | | | | | | When COW is not explicitly requested to be disabled or enabled, the function is supposed to do nothing on non-BTRFS file systems. Fixes commit 7230bc95aa78379c9ee20cf59394c5fc4305b75b. https://bugzilla.redhat.com/show_bug.cgi?id=1866157 Signed-off-by: Jiri Denemark <jdenemar@redhat.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
* treat all NULL returns from virXMLNodeContentString() as an errorLaine Stump2020-08-053-31/+48
| | | | | | | | | | and stop erroneously equating NULL with "". The latter means that the element has empty content, while the former means there was an error during parsing (either internal with the parser, or the content of the XML was bad). Signed-off-by: Laine Stump <laine@redhat.com> Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
* util: log an error if virXMLNodeContentString will return NULLLaine Stump2020-08-051-1/+17
| | | | | | | | | | | | Many of our calls to xmlNodeGetContent() (which are now all via virXMLNodeContentString() are failing to check for a NULL return. We need to remedy that, but in order to make the remedy simpler, let's log an error in virXMLNodeContentString(), so that the callers don't all individually need to (since it would be the same error message for all of them anyway). Signed-off-by: Laine Stump <laine@redhat.com> Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
* util: replace all calls to xmlNodeGetContent with virXMLNodeContentStringLaine Stump2020-08-053-13/+13
| | | | | | | No functional change Signed-off-by: Laine Stump <laine@redhat.com> Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
* conf: refactor virDomainBlkioDeviceParseXML to reduce calls to xmlNodeGetContentLaine Stump2020-08-051-58/+70
| | | | | | | | | | | | | | | | | | | virDomainBlkioDeviceParseXML() calls xmlNodeGetContent() multiple times in a loop, but can easily be refactored to call it once for all element nodes, and then use the result of that one call in each of the (mutually exclusive) blocks that previously each had their own call to xmlNodeGetContent. This is being done in order to reduce the number of changes needed in an upcoming patch that will eliminate the lack of checking for NULL on return from xmlNodeGetContent(). As part of the simplification, the while() loop has been changed into a for() so that we can use "continue" without bypassing the "node = node->next". Signed-off-by: Laine Stump <laine@redhat.com> Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
* docs: formatdomain: fyx a tipoJán Tomko2020-08-041-1/+1
| | | | | | s/hystorical/historical/ Signed-off-by: Ján Tomko <jtomko@redhat.com>
* src: add G_GNUC_NO_INLINE annotations for mocked symbolsDaniel P. Berrangé2020-08-048-10/+10
| | | | | | | | | | | We should prevent inlining of symbols from the driver .so files that are mocked, as well as those in the main libvirt.so This isn't fixing any currently known problem, just trying to prevent future issues. Reviewed-by: Ján Tomko <jtomko@redhat.com> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
* tests: qemublocktest: fix crashing with SIGBUSRoman Bogorodskiy2020-08-041-1/+0
| | | | | | | | | Commit bcbb026993 converted qemublocktest to use g_autoptr for virQEMUCaps. To prevent it from crashing, don't explicitly call virObjectUnref() on this object. Signed-off-by: Roman Bogorodskiy <bogorodskiy@gmail.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
* docs: fix libvirt go-import metadata in pages and links in 404 pageDaniel P. Berrangé2020-08-045-13/+4
| | | | | | | | | | | | | The meson conversion lost the <meta> tags providing the go-import, because the "$pagename" variable lost the .html suffix. Rather than fix that, just change to using "$pagesrc" instead, as it is a better fit. The 404 page also needs to use absolute links to work correctly for pages in sub-folders. Reviewed-by: Pavel Hrdina <phrdina@redhat.com> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
* build-aux: remove some syntax-check cruftDaniel P. Berrangé2020-08-041-54/+0
| | | | | | | | | | | | | | | | sc_proper_name_utf8_requires_ICONV looks for Makefile.am files, so is not going to work correctly with meson, nor did we ever use the GNULIB "proper_name_utf8" function. The 'today' variable is not referenced anywhere. The 'writable-files' target is not used anywhere sc_prohibit_reversed_compare_failure only checks 'init.sh' which does not exist in libvirt. Reviewed-by: Ján Tomko <jtomko@redhat.com> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
* conf: Add support for initiator IQN setting for iSCSI hostdevsPeter Krempa2020-08-047-1/+24
| | | | | | | | We already allow controlling the initiator IQN for iSCSI based disks. Add the same for host devices. Signed-off-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
* docs: formatdomain: Convert to rstPeter Krempa2020-08-043-9861/+7454
| | | | | | | | | | | | | | | For now just plain conversion to rst. Anchors which existed until now are preserved, but the table of contents now uses the docutils-generated ones. Additionally <code> which was nested in a link (<a>) was removed as rst doesn't support nesting of inline markup. The only anchor which wasn't restored is 'elementsDiskBackingStoreIndex' and its only reference was removed. Signed-off-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
* network: Use single quotes in default network configurationAndrea Bolognani2020-08-041-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Whenever libvirt is upgraded on a Debian system, the user will be prompted along the lines of Configuration file '/etc/libvirt/qemu/networks/default.xml' ==> Modified (by you or by a script) since installation. ==> Package distributor has shipped an updated version. What would you like to do about it ? Your options are: Y or I : install the package maintainer's version N or O : keep your currently-installed version D : show the differences between the versions Z : start a shell to examine the situation The default action is to keep your current version. *** default.xml (Y/I/N/O/D/Z) [default=N] ? d --- /etc/libvirt/qemu/networks/default.xml 2020-08-04 12:57:25.450911143 +0200 +++ /etc/libvirt/qemu/networks/default.xml.dpkg-new 2020-08-03 22:47:15.000000000 +0200 @@ -1,19 +1,11 @@ -<!-- -WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE -OVERWRITTEN AND LOST. Changes to this xml configuration should be made using: - virsh net-edit default -or other application using the libvirt API. ---> - <network> <name>default</name> - <uuid>612a2cab-72fb-416d-92bc-4d9e597bfb63</uuid> - <forward mode='nat'/> - <bridge name='virbr0' stp='on' delay='0'/> - <mac address='52:54:00:1f:03:79'/> - <ip address='192.168.122.1' netmask='255.255.255.0'> + <uuid>d020b839-4379-492c-aa74-eab7365076e6</uuid> + <bridge name="virbr0"/> + <forward/> + <ip address="192.168.122.1" netmask="255.255.255.0"> <dhcp> - <range start='192.168.122.2' end='192.168.122.254'/> + <range start="192.168.122.2" end="192.168.122.254"/> </dhcp> </ip> </network> The UUID situation should probably be handled the same way it is in the spec file by stripping it, and in general we could behave much better towards users, but one part of the diff that immediately stands out is that some lines are highlighted not because they are semantically different, but simply because they use different types of quotes around attributes. Since the canonical version of all libvirt XML documents (as returned by the various vir*GetXMLDesc() APIs) as well as the on-disk representations use single quotes, let's use the same for configuration files we install as well. Signed-off-by: Andrea Bolognani <abologna@redhat.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
* mdev: Fix daemon crash when reattaching mdevs on assignment conflictBinfeng Wu2020-08-041-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | If there's a list of mdevs to be assigned to a domain, but one of them (NOT the first) is already assigned to a different domain we're going to crash in the qemuProcessStop phase in virMediatedDeviceListFindIndex, because some of the pointers in mgr->activeMediatedHostdevs are dangling. This is due to virMediatedDeviceListMarkDevices using cleanup instead of rollback when we find out that a device is already taken. Reproducer steps: 1. start vm1 with mdev1 2. start vm2 with mdev2, mdev1 (the order is important!) Backtrace: #0 0x0000ffffb8c36250 in strcmp #1 0x0000ffffb9b80754 in virMediatedDeviceListFindIndex #2 0x0000ffffb9b80870 in virMediatedDeviceListFind #3 0x0000ffffb9c9e168 in virHostdevReAttachMediatedDevices #4 0x0000ffff9949f724 in qemuHostdevReAttachMediatedDevices #5 0x0000ffff9949f7f8 in qemuHostdevReAttachDomainDevices #6 0x0000ffff994bcd70 in qemuProcessStop #7 0x0000ffff994bf4e0 in qemuProcessStart Signed-off-by: Binfeng Wu <wubinfeng@huawei.com> Reviewed-by: Erik Skultety <eskultet@redhat.com>
* ci: Temporarily enable verbose mode for cirrus-runAndrea Bolognani2020-08-041-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | We've hit issues with GitLab CI jobs reporting a failure despite the corresponding Cirrus CI job finishing successfully: this is apparently caused by the underlying VM being rescheduled. A workaround for this issue has been implemented as of https://github.com/sio/cirrus-run/commit/5299874bbb71a84bec7476d9d0ca4ba49bb7ed97 which will be included in the upcoming 0.3.0 release; however, in order to validate that this workaround is effective it would be useful to have more data. Based on the conversation in https://github.com/sio/cirrus-run/issues/4 enabling verbose mode allows to collect this data while not having any impact on performance, so let's enable it temporarily and then disable it again once cirrus-run 0.3.0 is out. Signed-off-by: Andrea Bolognani <abologna@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
* ci: Show build log for Cirrus CI jobsAndrea Bolognani2020-08-041-1/+1
| | | | | | | | | | | This feature has been implemented as of https://github.com/sio/cirrus-run/commit/b9b2278f1d6c45b22d5f84fca0621e77622a6da4 and will be included in the upcoming 0.3.0 release. Signed-off-by: Andrea Bolognani <abologna@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
* src/logging: no need to include log_protocol.h in log_manager.hPavel Hrdina2020-08-042-2/+1
| | | | | | | | | | | | | | | | | | | | | | The header log_manager.h doesn't use anything from log_protocol.h and the only other place than logging using log_protocol.h is qemu_command.c where we can include log_protocol.h directly to have enum value VIR_LOG_MANAGER_PROTOCOL_DOMAIN_OPEN_LOG_FILE_TRUNCATE available. Fixes race-condition compilation error with meson: In file included from ../tests/qemuhotplugmock.c:21: In file included from ../src/qemu/qemu_hotplug.h:25: In file included from ../src/qemu/qemu_domain.h:42: ../src/logging/log_manager.h:25:10: fatal error: 'logging/log_protocol.h' file not found ^~~~~~~~~~~~~~~~~~~~~~~~ 1 error generated. Reported-by: Ján Tomko <jtomko@redhat.com> Signed-off-by: Pavel Hrdina <phrdina@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
* remote: remove duplicated headerPavel Hrdina2020-08-041-1/+0
| | | | | | | We already include viraccessapicheck.h few lines above. Signed-off-by: Pavel Hrdina <phrdina@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>