From mboxrd@z Thu Jan 1 00:00:00 1970 From: jeremie.galarneau@efficios.com (=?UTF-8?Q?J=C3=A9r=C3=A9mie_Galarneau?=) Date: Thu, 30 Jul 2015 12:53:07 -0400 Subject: [lttng-dev] [LTTNG-TOOLS PATCH] Fix: only cleanup the agent_apps_ht_by_sock as root In-Reply-To: References: <1438269157-1473-1-git-send-email-jdesfossez@efficios.com> Message-ID: Here is my proposed fix. Can you test it on your end? https://github.com/jgalar/lttng-tools/commits/sessiond-agent-crash commit 5e249e09a2bd68f96e546bf83b4710596518f675 Author: J?r?mie Galarneau Date: Thu Jul 30 12:48:52 2015 -0400 Clean-up: Move agent_apps_ht_by_sock definition to main.c Signed-off-by: J?r?mie Galarneau commit 1af8b99faa625033f9e0c2a6eaa9b3006cfadadd Author: J?r?mie Galarneau Date: Thu Jul 30 12:46:56 2015 -0400 Fix: Initialize global agent_apps_ht_by_sock on session daemon launch Signed-off-by: J?r?mie Galarneau J?r?mie On Thu, Jul 30, 2015 at 12:02 PM, J?r?mie Galarneau < jeremie.galarneau at efficios.com> wrote: > > > On Thu, Jul 30, 2015 at 11:12 AM, Julien Desfossez < > jdesfossez at efficios.com> wrote: > >> Commit 6a4e403927ffef4cae8726064dcf53c463eb128c introduced a bug where >> we could end up iterating over the agent_apps_ht_by_sock regardless if >> it was allocated or not (only when the sessiond is launched as root). >> >> Steps to reproduce: >> $ sudo lttng-sessiond -d >> $ lttng-sessiond >> Error: Already running daemon. >> Segmentation fault (core dumped) >> >> Signed-off-by: Julien Desfossez >> --- >> src/bin/lttng-sessiond/main.c | 4 +++- >> 1 file changed, 3 insertions(+), 1 deletion(-) >> >> diff --git a/src/bin/lttng-sessiond/main.c b/src/bin/lttng-sessiond/main.c >> index 91dd047..5840165 100644 >> --- a/src/bin/lttng-sessiond/main.c >> +++ b/src/bin/lttng-sessiond/main.c >> @@ -677,7 +677,9 @@ static void sessiond_cleanup(void) >> } >> >> DBG("Cleaning up all agent apps"); >> - agent_app_ht_clean(); >> + if (is_root) { >> + agent_app_ht_clean(); >> + } >> >> > This will leak the hash table if the session daemon was launched as an > unprivileged user. However, the problem can also be reproduced by launching > two session daemons under the same unprivileged user. > > The real issue here seems to be that the session daemon will enter the > "exit_init_data" code path before creating the hash table if it can't > acquire the lock file and that there are no NULL checks performed during > the sessiond_cleanup(). > > Thanks, > J?r?mie > > >> DBG("Closing all UST sockets"); >> ust_app_clean_list(); >> -- >> 1.9.1 >> >> > > > -- > J?r?mie Galarneau > EfficiOS Inc. > http://www.efficios.com > -- J?r?mie Galarneau EfficiOS Inc. http://www.efficios.com -------------- next part -------------- An HTML attachment was scrubbed... URL: