libvirt/src/rpc
Jiri Denemark 173c291473 Don't crash if a connection closes early
https://bugzilla.redhat.com/show_bug.cgi?id=1047577

When a client closes its connection to libvirtd early during
virConnectOpen, more specifically just after making
REMOTE_PROC_CONNECT_SUPPORTS_FEATURE call to check if
VIR_DRV_FEATURE_PROGRAM_KEEPALIVE is supported without even waiting for
the result, libvirtd may crash due to a race in keep-alive
initialization. Once receiving the REMOTE_PROC_CONNECT_SUPPORTS_FEATURE
call, the daemon's event loop delegates it to a worker thread. In case
the event loop detects EOF on the connection and calls
virNetServerClientClose before the worker thread starts to handle
REMOTE_PROC_CONNECT_SUPPORTS_FEATURE call, client->keepalive will be
disposed by the time virNetServerClientStartKeepAlive gets called from
remoteDispatchConnectSupportsFeature. Because the flow is common for
both authenticated and read-only connections, even unprivileged clients
may cause the daemon to crash.

To avoid the crash, virNetServerClientStartKeepAlive needs to check if
the connection is still open before starting keep-alive protocol.

Every libvirt release since 0.9.8 is affected by this bug.
2014-01-13 11:09:59 +01:00
..
gendispatch.pl Record the where the auto-generated data comes from 2013-08-09 17:13:02 +01:00
genprotocol.pl genprotocol.pl: Fix code on FreeBSD too 2013-09-27 18:32:42 +02:00
gensystemtap.pl Fix generation of systemtap probes for RPC protocols 2013-03-14 12:42:22 +00:00
virkeepalive.c virutil: Move string related functions to virstring.c 2013-05-02 16:56:55 +02:00
virkeepalive.h maint: fix up copyright notice inconsistencies 2012-09-20 16:30:55 -06:00
virkeepaliveprotocol.x Define keepalive protocol 2011-11-24 11:44:08 +01:00
virnetclient.c remote: Improve libssh2 password authentication 2013-07-12 09:22:38 +02:00
virnetclient.h remote: Improve libssh2 password authentication 2013-07-12 09:22:38 +02:00
virnetclientprogram.c Convert 'int i' to 'size_t i' in src/rpc/ files 2013-07-10 17:40:14 +01:00
virnetclientprogram.h maint: fix up copyright notice inconsistencies 2012-09-20 16:30:55 -06:00
virnetclientstream.c Adapt to VIR_ALLOC and virAsprintf in src/rpc/* 2013-07-10 11:07:32 +02:00
virnetclientstream.h maint: fix up copyright notice inconsistencies 2012-09-20 16:30:55 -06:00
virnetmessage.c MacOS: Handle changes to xdrproc_t definition 2013-11-03 09:34:10 -06:00
virnetmessage.h rpc: message related sizes enlarged 2013-05-07 13:29:58 +02:00
virnetprotocol.x Adjust legacy max payload size to account for header information 2013-10-07 13:28:44 +02:00
virnetsaslcontext.c Fix invalid read in virNetSASLSessionClientStep debug log 2013-11-26 11:52:58 +01:00
virnetsaslcontext.h Tie SASL callbacks lifecycle to virNetSessionSASLContext 2013-11-26 11:52:58 +01:00
virnetserver.c Get rid of shadowed booleans 2013-10-22 15:50:47 +01:00
virnetserver.h Rename HAVE_GNUTLS to WITH_GNUTLS 2013-01-14 13:26:47 +00:00
virnetserverclient.c Don't crash if a connection closes early 2014-01-13 11:09:59 +01:00
virnetserverclient.h Include process start time when doing polkit checks 2013-05-08 10:47:45 +01:00
virnetservermdns.c Adapt to VIR_ALLOC and virAsprintf in src/rpc/* 2013-07-10 11:07:32 +02:00
virnetservermdns.h maint: fix up copyright notice inconsistencies 2012-09-20 16:30:55 -06:00
virnetserverprogram.c Adapt to VIR_ALLOC and virAsprintf in src/rpc/* 2013-07-10 11:07:32 +02:00
virnetserverprogram.h maint: fix up copyright notice inconsistencies 2012-09-20 16:30:55 -06:00
virnetserverservice.c Introduce max_queued_clients 2013-08-05 11:03:01 +02:00
virnetserverservice.h Introduce max_queued_clients 2013-08-05 11:03:01 +02:00
virnetsocket.c virnetsocket: fix getsockopt on FreeBSD 2013-11-03 17:08:55 -06:00
virnetsocket.h Add a virNetSocketNewConnectSockFD method 2013-09-24 09:37:26 +01:00
virnetsshsession.c Stop free'ing 'const char *' strings 2013-09-05 11:28:01 +01:00
virnetsshsession.h remote: Improve libssh2 password authentication 2013-07-12 09:22:38 +02:00
virnettlscontext.c Remove all direct use of getenv 2013-10-21 14:03:52 +01:00
virnettlscontext.h Add APIs to get at more client security data 2013-03-19 13:11:46 +00:00