From patchwork Wed Mar 31 23:06:11 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Rostedt X-Patchwork-Id: 12176559 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8F4ACC4360C for ; Wed, 31 Mar 2021 23:08:15 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 5CAF461077 for ; Wed, 31 Mar 2021 23:08:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232292AbhCaXHn (ORCPT ); Wed, 31 Mar 2021 19:07:43 -0400 Received: from mail.kernel.org ([198.145.29.99]:51094 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232109AbhCaXH3 (ORCPT ); Wed, 31 Mar 2021 19:07:29 -0400 Received: from gandalf.local.home (cpe-66-24-58-225.stny.res.rr.com [66.24.58.225]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 3028E61056 for ; Wed, 31 Mar 2021 23:07:29 +0000 (UTC) Received: from rostedt by gandalf.local.home with local (Exim 4.94) (envelope-from ) id 1lRjvs-003g5d-64 for linux-trace-devel@vger.kernel.org; Wed, 31 Mar 2021 19:07:28 -0400 Message-ID: <20210331230728.042865031@goodmis.org> User-Agent: quilt/0.66 Date: Wed, 31 Mar 2021 19:06:11 -0400 From: Steven Rostedt To: linux-trace-devel@vger.kernel.org Subject: [PATCH 1/3] trace-cmd agent: Clean up tsync_agent_thread() and tsync_host_thread() References: <20210331230610.035418770@goodmis.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-trace-devel@vger.kernel.org From: "Steven Rostedt (VMware)" There's no reason to assign tsync to NULL nor add a typecast to data, as void pointers naturally can be converted to any type. Signed-off-by: Steven Rostedt (VMware) --- lib/trace-cmd/trace-timesync.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/lib/trace-cmd/trace-timesync.c b/lib/trace-cmd/trace-timesync.c index ad73f08f7070..4ed283eb1fb8 100644 --- a/lib/trace-cmd/trace-timesync.c +++ b/lib/trace-cmd/trace-timesync.c @@ -697,9 +697,8 @@ static int tsync_with_guest(struct tracecmd_time_sync *tsync) static void *tsync_host_thread(void *data) { - struct tracecmd_time_sync *tsync = NULL; + struct tracecmd_time_sync *tsync = data; - tsync = (struct tracecmd_time_sync *)data; tsync_with_guest(tsync); tracecmd_msg_handle_close(tsync->msg_handle); tsync->msg_handle = NULL; @@ -865,11 +864,9 @@ int tracecmd_tsync_with_guest_stop(struct tracecmd_time_sync *tsync) static void *tsync_agent_thread(void *data) { - struct tracecmd_time_sync *tsync = NULL; + struct tracecmd_time_sync *tsync = data; int sd; - tsync = (struct tracecmd_time_sync *)data; - while (true) { sd = accept(tsync->msg_handle->fd, NULL, NULL); if (sd < 0) { From patchwork Wed Mar 31 23:06:12 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Rostedt X-Patchwork-Id: 12176555 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6AA89C43462 for ; Wed, 31 Mar 2021 23:08:15 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 3B18161078 for ; Wed, 31 Mar 2021 23:08:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232429AbhCaXHm (ORCPT ); Wed, 31 Mar 2021 19:07:42 -0400 Received: from mail.kernel.org ([198.145.29.99]:51106 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232207AbhCaXH3 (ORCPT ); Wed, 31 Mar 2021 19:07:29 -0400 Received: from gandalf.local.home (cpe-66-24-58-225.stny.res.rr.com [66.24.58.225]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 49B4F61076 for ; Wed, 31 Mar 2021 23:07:29 +0000 (UTC) Received: from rostedt by gandalf.local.home with local (Exim 4.94) (envelope-from ) id 1lRjvs-003g68-AW for linux-trace-devel@vger.kernel.org; Wed, 31 Mar 2021 19:07:28 -0400 Message-ID: <20210331230728.211232789@goodmis.org> User-Agent: quilt/0.66 Date: Wed, 31 Mar 2021 19:06:12 -0400 From: Steven Rostedt To: linux-trace-devel@vger.kernel.org Subject: [PATCH 2/3] trace-cmd: Have tracecmd_tsync_free() free even with no context References: <20210331230610.035418770@goodmis.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-trace-devel@vger.kernel.org From: "Steven Rostedt (VMware)" tracecmd_tsync_free() incorrectly exits the function if the tsync has no context. But it may still need to free up the resources in that case. Do not leak memory if the context failed to be created. Signed-off-by: Steven Rostedt (VMware) --- lib/trace-cmd/trace-timesync.c | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/lib/trace-cmd/trace-timesync.c b/lib/trace-cmd/trace-timesync.c index 4ed283eb1fb8..24984fb17dab 100644 --- a/lib/trace-cmd/trace-timesync.c +++ b/lib/trace-cmd/trace-timesync.c @@ -513,25 +513,28 @@ void tracecmd_tsync_free(struct tracecmd_time_sync *tsync) struct clock_sync_context *tsync_context; struct tsync_proto *proto; - if (!tsync || !tsync->context) + if (!tsync) return; + tsync_context = (struct clock_sync_context *)tsync->context; proto = tsync_proto_find(tsync->proto_name); if (proto && proto->clock_sync_free) proto->clock_sync_free(tsync); - clock_synch_delete_instance(tsync_context->instance); - tsync_context->instance = NULL; - - free(tsync_context->sync_ts); - free(tsync_context->sync_offsets); - free(tsync_context->sync_scalings); - tsync_context->sync_ts = NULL; - tsync_context->sync_offsets = NULL; - tsync_context->sync_scalings = NULL; - tsync_context->sync_count = 0; - tsync_context->sync_size = 0; + if (tsync_context) { + clock_synch_delete_instance(tsync_context->instance); + tsync_context->instance = NULL; + + free(tsync_context->sync_ts); + free(tsync_context->sync_offsets); + free(tsync_context->sync_scalings); + tsync_context->sync_ts = NULL; + tsync_context->sync_offsets = NULL; + tsync_context->sync_scalings = NULL; + tsync_context->sync_count = 0; + tsync_context->sync_size = 0; + } pthread_mutex_destroy(&tsync->lock); pthread_cond_destroy(&tsync->cond); pthread_barrier_destroy(&tsync->first_sync); From patchwork Wed Mar 31 23:06:13 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Rostedt X-Patchwork-Id: 12176553 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3987BC433B4 for ; Wed, 31 Mar 2021 23:08:15 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 0580A61057 for ; Wed, 31 Mar 2021 23:08:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232310AbhCaXHm (ORCPT ); Wed, 31 Mar 2021 19:07:42 -0400 Received: from mail.kernel.org ([198.145.29.99]:51118 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232271AbhCaXH3 (ORCPT ); Wed, 31 Mar 2021 19:07:29 -0400 Received: from gandalf.local.home (cpe-66-24-58-225.stny.res.rr.com [66.24.58.225]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 6B32361075 for ; Wed, 31 Mar 2021 23:07:29 +0000 (UTC) Received: from rostedt by gandalf.local.home with local (Exim 4.94) (envelope-from ) id 1lRjvs-003g6c-FG for linux-trace-devel@vger.kernel.org; Wed, 31 Mar 2021 19:07:28 -0400 Message-ID: <20210331230728.350421194@goodmis.org> User-Agent: quilt/0.66 Date: Wed, 31 Mar 2021 19:06:13 -0400 From: Steven Rostedt To: linux-trace-devel@vger.kernel.org Subject: [PATCH 3/3] trace-cmd: Do not free tsync from thread References: <20210331230610.035418770@goodmis.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-trace-devel@vger.kernel.org From: "Steven Rostedt (VMware)" The freeing of an object should happen in the same context as where it is created. The tsync object is created in the main thread and passed to the guest and host handling threads. It should be closed and freed by the thread that created it, especially since that thread accesses the tsync object after creating the thread. Having the created thread free it would cause all sorts of dangerous race conditions. Signed-off-by: Steven Rostedt (VMware) --- lib/trace-cmd/trace-timesync.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/lib/trace-cmd/trace-timesync.c b/lib/trace-cmd/trace-timesync.c index 24984fb17dab..ba877f701c85 100644 --- a/lib/trace-cmd/trace-timesync.c +++ b/lib/trace-cmd/trace-timesync.c @@ -535,6 +535,10 @@ void tracecmd_tsync_free(struct tracecmd_time_sync *tsync) tsync_context->sync_count = 0; tsync_context->sync_size = 0; } + + if (tsync->msg_handle) + tracecmd_msg_handle_close(tsync->msg_handle); + pthread_mutex_destroy(&tsync->lock); pthread_cond_destroy(&tsync->cond); pthread_barrier_destroy(&tsync->first_sync); @@ -703,9 +707,6 @@ static void *tsync_host_thread(void *data) struct tracecmd_time_sync *tsync = data; tsync_with_guest(tsync); - tracecmd_msg_handle_close(tsync->msg_handle); - tsync->msg_handle = NULL; - pthread_exit(0); } @@ -868,6 +869,7 @@ int tracecmd_tsync_with_guest_stop(struct tracecmd_time_sync *tsync) static void *tsync_agent_thread(void *data) { struct tracecmd_time_sync *tsync = data; + long ret = 0; int sd; while (true) { @@ -875,6 +877,7 @@ static void *tsync_agent_thread(void *data) if (sd < 0) { if (errno == EINTR) continue; + ret = -1; goto out; } break; @@ -885,11 +888,7 @@ static void *tsync_agent_thread(void *data) tsync_with_host(tsync); out: - tracecmd_msg_handle_close(tsync->msg_handle); - tracecmd_tsync_free(tsync); - close(sd); - - pthread_exit(0); + pthread_exit((void *)ret); } /**