forked from pool/libvirt
a026aabb02
- qemu: avoid denial of service reading from QEMU guest agent CVE-2018-1064 fbf31e1a-CVE-2018-1064.patch bsc#1083625 - virtlockd: fix loosing lock on re-exec 464889ff-rpc-aquire-ref-dispatch.patch, c6f1d519-rpc-simplify-dispatch.patch, 06e7ebb6-rpc-invoke-dispatch-unlocked.patch, 86cae503-rpc-fix-pre-exec.patch, eefabb38-rpc-virtlockd-virtlogd-single-thread.patch bsc#1076861 - libvirtd: fix potential deadlock when reloading 33c6eb96-fix-libvirtd-reload-deadlock.patch bsc#1079150 OBS-URL: https://build.opensuse.org/request/show/586966 OBS-URL: https://build.opensuse.org/package/show/Virtualization/libvirt?expand=0&rev=676
67 lines
3.1 KiB
Diff
67 lines
3.1 KiB
Diff
commit eefabb38c34cb61edcb4a233ebc7c764547e515e
|
|
Author: Daniel P. Berrangé <berrange@redhat.com>
|
|
Date: Tue Mar 6 17:12:20 2018 +0000
|
|
|
|
rpc: switch virtlockd and virtlogd to use single-threaded dispatch
|
|
|
|
Currently both virtlogd and virtlockd use a single worker thread for
|
|
dispatching RPC messages. Even this is overkill and their RPC message
|
|
handling callbacks all run in short, finite time and so blocking the
|
|
main loop is not an issue like you'd see in libvirtd with long running
|
|
QEMU commands.
|
|
|
|
By setting max_workers==0, we can turn off the worker thread and run
|
|
these daemons single threaded. This in turn fixes a serious problem in
|
|
the virtlockd daemon whereby it loses all fcntl() locks at re-exec due
|
|
to multiple threads existing. fcntl() locks only get preserved if the
|
|
process is single threaded at time of exec().
|
|
|
|
Reviewed-by: John Ferlan <jferlan@redhat.com>
|
|
Reviewed-by: Jim Fehlig <jfehlig@suse.com>
|
|
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
|
|
|
|
Index: libvirt-4.1.0/src/locking/lock_daemon.c
|
|
===================================================================
|
|
--- libvirt-4.1.0.orig/src/locking/lock_daemon.c
|
|
+++ libvirt-4.1.0/src/locking/lock_daemon.c
|
|
@@ -165,7 +165,7 @@ virLockDaemonNew(virLockDaemonConfigPtr
|
|
goto error;
|
|
|
|
if (!(srv = virNetServerNew("virtlockd", 1,
|
|
- 1, 1, 0, config->max_clients,
|
|
+ 0, 0, 0, config->max_clients,
|
|
config->max_clients, -1, 0,
|
|
NULL,
|
|
virLockDaemonClientNew,
|
|
@@ -180,7 +180,7 @@ virLockDaemonNew(virLockDaemonConfigPtr
|
|
srv = NULL;
|
|
|
|
if (!(srv = virNetServerNew("admin", 1,
|
|
- 1, 1, 0, config->admin_max_clients,
|
|
+ 0, 0, 0, config->admin_max_clients,
|
|
config->admin_max_clients, -1, 0,
|
|
NULL,
|
|
remoteAdmClientNew,
|
|
Index: libvirt-4.1.0/src/logging/log_daemon.c
|
|
===================================================================
|
|
--- libvirt-4.1.0.orig/src/logging/log_daemon.c
|
|
+++ libvirt-4.1.0/src/logging/log_daemon.c
|
|
@@ -154,7 +154,7 @@ virLogDaemonNew(virLogDaemonConfigPtr co
|
|
goto error;
|
|
|
|
if (!(srv = virNetServerNew("virtlogd", 1,
|
|
- 1, 1, 0, config->max_clients,
|
|
+ 0, 0, 0, config->max_clients,
|
|
config->max_clients, -1, 0,
|
|
NULL,
|
|
virLogDaemonClientNew,
|
|
@@ -169,7 +169,7 @@ virLogDaemonNew(virLogDaemonConfigPtr co
|
|
srv = NULL;
|
|
|
|
if (!(srv = virNetServerNew("admin", 1,
|
|
- 1, 1, 0, config->admin_max_clients,
|
|
+ 0, 0, 0, config->admin_max_clients,
|
|
config->admin_max_clients, -1, 0,
|
|
NULL,
|
|
remoteAdmClientNew,
|