Fix: Cleanup local_apps sock_info in lttng_ust_cleanup
authorJérémie Galarneau <jeremie.galarneau@efficios.com>
Tue, 7 Jul 2015 18:35:54 +0000 (14:35 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Tue, 7 Jul 2015 19:04:26 +0000 (15:04 -0400)
commit1e5c497c04f73827abd6cfdc8a0e8d1ffc859d3e
tree2166bd2d51bb5204aad94321f41c87b2665c17f7
parentfaccc28ac2aa16092117eae5181fce79fff98396
Fix: Cleanup local_apps sock_info in lttng_ust_cleanup

LTTng-UST will deadlock after a fork while waiting on the
"constructor_wait" semaphore if local apps, handled the session daemon
running under the current UID, are disabled or "not_allowed".

This deadlock can be triggered by setting an infinite registration
timeout, clearing the HOME environment variable and launching an app
which calls FORK(3). This will cause setup_local_apps() to fail to
determine the local_apps sock_path, thus leaving
local_apps.allowed == 0.

This, in turn, would cause lttng_ust_cleanup to skip the cleanup
of the local_apps sock_info after a fork,
leaving local_apps.constructor_sem_posted == 1. This would cause
handle_register_done() in the child to skip over the decrementation
of sem_count and post of the constructor_wait semaphore.

Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
liblttng-ust/lttng-ust-comm.c
This page took 0.024609 seconds and 4 git commands to generate.