libvirt/daemon
Eric Blake a7483a5631 event: fix event-handling allocation crash
Regression introduced in commit e6b68d7 (Nov 2010).

Prior to that point, handlesAlloc was always a multiple of
EVENT_ALLOC_EXTENT (10), and was an int (so even if the subtraction
had been able to wrap, a negative value would be less than the count
not try to free the handles array).  But after that point,
VIR_RESIZE_N made handlesAlloc grow geometrically (with a pattern of
10, 20, 30, 45 for the handles array) but still freed in multiples of
EVENT_ALLOC_EXTENT; and the count changed to size_t.  Which means that
after 31 handles have been created, then 30 handles destroyed,
handlesAlloc is 5 while handlesCount is 1, and since (size_t)(1 - 5)
is indeed greater than 1, this then tried to free 10 elements, which
had the awful effect of nuking the handles array while there were
still live handles.

Nuking live handles puts libvirtd in an inconsistent state, and was
easily reproducible by starting and then stopping 60 faqemu guests.

* daemon/event.c (virEventCleanupTimeouts, virEventCleanupHandles):
Avoid integer wrap-around causing us to delete the entire array
while entries are still active.
* tests/eventtest.c (mymain): Expose the bug.
2011-01-27 09:12:36 -07:00
..
.gitignore Add dtrace static probes in libvirtd 2010-10-22 12:00:39 +01:00
dispatch.c daemon: Include stdlib.h in dispatch.c 2010-11-14 22:21:21 +01:00
dispatch.h Remote driver & daemon impl of new event API 2010-03-26 13:52:29 +00:00
event.c event: fix event-handling allocation crash 2011-01-27 09:12:36 -07:00
event.h build: consistently indent preprocessor directives 2010-03-09 19:22:28 +01:00
libvirtd.aug Basic framework for auditing integration 2010-10-19 17:31:31 +01:00
libvirtd.c Filter out certain expected error messages from libvirtd 2011-01-26 14:54:23 +00:00
libvirtd.conf Basic framework for auditing integration 2010-10-19 17:31:31 +01:00
libvirtd.h daemon: use safer memory growth macros 2010-11-18 12:21:57 -07:00
libvirtd.init.in daemon: Export SDL audio environment variables 2010-05-21 12:48:34 -04:00
libvirtd.lxc.logrotate.in Change logrotate to be per-hypervisor logs 2010-03-10 11:27:02 +01:00
libvirtd.pod.in docs: removed outdated reference to virt-mem 2010-11-23 01:11:10 +11:00
libvirtd.policy-0 Rename qemud/ directory to daemon/ 2009-09-21 14:41:42 +01:00
libvirtd.policy-1 Rename qemud/ directory to daemon/ 2009-09-21 14:41:42 +01:00
libvirtd.qemu.logrotate.in Change logrotate to be per-hypervisor logs 2010-03-10 11:27:02 +01:00
libvirtd.sasl Rename qemud/ directory to daemon/ 2009-09-21 14:41:42 +01:00
libvirtd.stp Include socket address in client probe data 2010-10-22 12:00:45 +01:00
libvirtd.sysconf daemon: sysconf: Update comment about VNC audio 2010-05-26 10:51:36 -04:00
libvirtd.uml.logrotate.in Change logrotate to be per-hypervisor logs 2010-03-10 11:27:02 +01:00
Makefile.am maint: avoid space-tab 2010-12-21 13:21:25 -07:00
mdns.c Rename daemon main code 2009-09-21 14:41:45 +01:00
mdns.h build: consistently indent preprocessor directives 2010-03-09 19:22:28 +01:00
probes.d Include socket address in client probe data 2010-10-22 12:00:45 +01:00
qemu_dispatch_args.h Qemu remote protocol. 2010-07-23 17:30:33 -04:00
qemu_dispatch_prototypes.h Qemu remote protocol. 2010-07-23 17:30:33 -04:00
qemu_dispatch_ret.h Qemu remote protocol. 2010-07-23 17:30:33 -04:00
qemu_dispatch_table.h Qemu remote protocol. 2010-07-23 17:30:33 -04:00
remote_dispatch_args.h implement the remote protocol 2010-11-23 15:04:42 -07:00
remote_dispatch_prototypes.h implement the remote protocol 2010-11-23 15:04:42 -07:00
remote_dispatch_ret.h implement the remote protocol 2010-11-23 15:04:42 -07:00
remote_dispatch_table.h implement the remote protocol 2010-11-23 15:04:42 -07:00
remote_generate_stubs.pl Qemu remote protocol. 2010-07-23 17:30:33 -04:00
remote.c implement the remote protocol 2010-11-23 15:04:42 -07:00
remote.h Ensure remote daemon unions are always non-zero length 2010-09-10 11:14:51 +01:00
stream.c Fix busy-wait loop on closed file descriptor 2010-11-11 16:03:26 +00:00
stream.h build: consistently indent preprocessor directives 2010-03-09 19:22:28 +01:00
test_libvirtd.aug Push unapplied fixups for previous patch 2011-01-21 16:18:54 -05:00
THREADING.txt Move libvirtd event loop into background thread 2009-11-03 14:45:43 -05:00