[lttng-dev] [RFC PATCH LTTNG-UST] Fix: Decrement sem_count when disabling local apps
Jérémie Galarneau
jeremie.galarneau at efficios.com
Tue Jul 7 12:49:17 EDT 2015
On Tue, Jul 7, 2015 at 12:48 PM, Jérémie Galarneau <
jeremie.galarneau at efficios.com> wrote:
> LTTng-UST will deadlock 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 and clearing the HOME environment variable, which will cause
> setup_local_apps() to fail to determine the local_apps sock_path, thus
> leaving local_apps.allowed == 0.
>
> Given that local_apps are not allowed at this point, the local_apps
> listener thread will not be launched. Therefore, the constructor_wait
> will not be waited on.
>
This should say "will not be posted".
Jérémie
>
> The fix proposed here consists in decrementing "sem_count" if an error
> precluding the launch the the local_apps listener thread occurs.
>
> Signed-off-by: Jérémie Galarneau <jeremie.galarneau at efficios.com>
> ---
> liblttng-ust/lttng-ust-comm.c | 18 +++++++++++++++---
> 1 file changed, 15 insertions(+), 3 deletions(-)
>
> diff --git a/liblttng-ust/lttng-ust-comm.c b/liblttng-ust/lttng-ust-comm.c
> index b290204..c91627f 100644
> --- a/liblttng-ust/lttng-ust-comm.c
> +++ b/liblttng-ust/lttng-ust-comm.c
> @@ -373,6 +373,7 @@ void print_cmd(int cmd, int handle)
> static
> int setup_local_apps(void)
> {
> + int ret = 0;
> const char *home_dir;
> uid_t uid;
>
> @@ -382,13 +383,16 @@ int setup_local_apps(void)
> */
> if (uid != geteuid()) {
> assert(local_apps.allowed == 0);
> - return 0;
> + goto end;
> }
> home_dir = get_lttng_home_dir();
> if (!home_dir) {
> WARN("HOME environment variable not set. Disabling
> LTTng-UST per-user tracing.");
> assert(local_apps.allowed == 0);
> - return -ENOENT;
> + ret = -ENOENT;
> + goto end;
> + } else {
> + DBG("home_dir: %s", home_dir);
> }
> local_apps.allowed = 1;
> snprintf(local_apps.sock_path, PATH_MAX, "%s/%s/%s",
> @@ -398,7 +402,15 @@ int setup_local_apps(void)
> snprintf(local_apps.wait_shm_path, PATH_MAX, "/%s-%u",
> LTTNG_UST_WAIT_FILENAME,
> uid);
> - return 0;
> +end:
> + if (!local_apps.allowed) {
> + /*
> + * Don't wait on the "local" listener thread since we
> won't be
> + * communicating with the local session daemon.
> + */
> + uatomic_add(&sem_count, -1);
> + }
> + return ret;
> }
>
> /*
> --
> 2.4.4
>
>
--
Jérémie Galarneau
EfficiOS Inc.
http://www.efficios.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.lttng.org/pipermail/lttng-dev/attachments/20150707/87020ed9/attachment.html>
More information about the lttng-dev
mailing list