From patchwork Tue Mar 24 14:17:02 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: William Tu X-Patchwork-Id: 1260705 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=140.211.166.136; helo=silver.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=MfAJsMyK; dkim-atps=neutral Received: from silver.osuosl.org (smtp3.osuosl.org [140.211.166.136]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 48mtcn37d5z9sTG for ; Wed, 25 Mar 2020 01:17:43 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by silver.osuosl.org (Postfix) with ESMTP id 87D4F203CF; Tue, 24 Mar 2020 14:17:41 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from silver.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id WW2vHege5MXa; Tue, 24 Mar 2020 14:17:40 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by silver.osuosl.org (Postfix) with ESMTP id 4E6451FEDF; Tue, 24 Mar 2020 14:17:40 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 3F9E5C1D7C; Tue, 24 Mar 2020 14:17:40 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from whitealder.osuosl.org (smtp1.osuosl.org [140.211.166.138]) by lists.linuxfoundation.org (Postfix) with ESMTP id 28D7DC0177 for ; Tue, 24 Mar 2020 14:17:39 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by whitealder.osuosl.org (Postfix) with ESMTP id 22A5787CB4 for ; Tue, 24 Mar 2020 14:17:39 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from whitealder.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id AtJ+Cm-w0CKE for ; Tue, 24 Mar 2020 14:17:38 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mail-pg1-f196.google.com (mail-pg1-f196.google.com [209.85.215.196]) by whitealder.osuosl.org (Postfix) with ESMTPS id 8425286759 for ; Tue, 24 Mar 2020 14:17:38 +0000 (UTC) Received: by mail-pg1-f196.google.com with SMTP id t3so9091950pgn.1 for ; Tue, 24 Mar 2020 07:17:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=LePtYm0dx2Mq5WAUe+JVxy9BbcmZCgQmHxnsNih+1DY=; b=MfAJsMyK8GPR6vWJ4qy9kcrrJVtL7aMOm+WDSsuAPQk4moVRcbXr/eCJqoJvJqn370 t0zmgePm/w4lV/6xXKHdhhYfZ1AP+GUCR8YYm/i73nPcLcG05c7tfsVCqm35WoTBBz4z 6uSF4D2j00I63jJ7pVn/rkgyLJ9O6jOiNd2CbWvp7DhCawH5leKbWSCjMnc+9w7ntNqW szuu3jcr5HFihgWyRFPL6BTaEnib5FKNB6WNbjG7iOzztc8t2tc0Jr2h4CNUiUS669Sk xQiZQ/Afja71F36MzomepL5jm/WuiNhDMZ7UiVOmhESlTdinA8fhtiah2N2e+FJ2IZql SyVQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=LePtYm0dx2Mq5WAUe+JVxy9BbcmZCgQmHxnsNih+1DY=; b=Ks+wK10R08NqWpkAKSrjTSUCHYB+BaWiuvTJ3280xcuCt2JRM7t6t47EuMijF2O2L8 jfB2Ak7OivwDx/9Yr4UH3Dj6ppChrEBV0/3UV2yB8DWEHLG2vy5y9GEGfRq9Nhy8AW3Z c0fs8ORNdqFbOiI7Kyh/dvYUqyRbhZjy+zRLVFa8sjhHV69fwNaCA/Y4J0twKe6zKpfG Tn5C50nTHONfcL2P7rYPmR1cUiV1iFNFyy9E1b8PzpNLraVBiv5bCI61qkCe2/LieXyD RBbTc/Oc1esdvaoIqShwWnmvl2nVHqGcoIL3wnlTTRkghZ0S2r2W8sf35wcEHcy9bU3V meig== X-Gm-Message-State: ANhLgQ2IpOzQIRfTUgvT8bmGdmDNzvEIwEl63zz6GCik1i3+ig7zpLYs p0+VYYqLib+XU0w0upLbRYb+zPap X-Google-Smtp-Source: ADFU+vs5JEf26HeVtjjcNzvwQD47YbL7TBx9qvQnod/YUZ96rN3OO4CLDvSW4kVaqHaS+j6bVEE2kA== X-Received: by 2002:a62:7cc9:: with SMTP id x192mr31393932pfc.176.1585059457533; Tue, 24 Mar 2020 07:17:37 -0700 (PDT) Received: from sc9-mailhost2.vmware.com (c-76-21-95-192.hsd1.ca.comcast.net. [76.21.95.192]) by smtp.gmail.com with ESMTPSA id z6sm16044661pfn.212.2020.03.24.07.17.36 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 24 Mar 2020 07:17:36 -0700 (PDT) From: William Tu To: dev@openvswitch.org Date: Tue, 24 Mar 2020 07:17:02 -0700 Message-Id: <1585059422-84529-1-git-send-email-u9012063@gmail.com> X-Mailer: git-send-email 2.7.4 Cc: i.maximets@ovn.org Subject: [ovs-dev] [PATCHv2] fatal-signal: Fix clang error due to lock. X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" Due to not acquiring lock, clang reports: lib/vlog.c:618:12: error: reading variable 'log_fd' requires holding mutex 'log_file_mutex' [-Werror,-Wthread-safety-analysis] return log_fd; The patch fixes it by creating a function in vlog.c to write directly to log file unsafely. Tested-at: https://travis-ci.org/github/williamtu/ovs-travis/builds/666165883 Fixes: ecd4a8fcdff2 ("fatal-signal: Log backtrace when no monitor daemon.") Suggested-by: Ilya Maximets Signed-off-by: William Tu Acked-by: Ilya Maximets --- include/openvswitch/vlog.h | 4 ++-- lib/fatal-signal.c | 8 ++------ lib/vlog.c | 15 ++++++++++++--- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/include/openvswitch/vlog.h b/include/openvswitch/vlog.h index 476bf3d6d5b4..886fce5e0fd5 100644 --- a/include/openvswitch/vlog.h +++ b/include/openvswitch/vlog.h @@ -143,8 +143,8 @@ void vlog_set_syslog_method(const char *method); /* Configure syslog target. */ void vlog_set_syslog_target(const char *target); -/* Return the log_fd. */ -int vlog_get_fd(void); +/* Write directly to log file. */ +void vlog_direct_write_to_log_file_unsafe(const char *s); /* Initialization. */ void vlog_init(void); diff --git a/lib/fatal-signal.c b/lib/fatal-signal.c index 4965c1ae82c0..51cf628d994e 100644 --- a/lib/fatal-signal.c +++ b/lib/fatal-signal.c @@ -197,11 +197,7 @@ send_backtrace_to_monitor(void) { */ char str[] = "SIGSEGV detected, backtrace:\n"; - if (vlog_get_fd() < 0) { - return; - } - - ignore(write(vlog_get_fd(), str, strlen(str))); + vlog_direct_write_to_log_file_unsafe(str); for (int i = 0; i < dep; i++) { char line[64]; @@ -210,7 +206,7 @@ send_backtrace_to_monitor(void) { unw_bt[i].ip, unw_bt[i].func, unw_bt[i].offset); - ignore(write(vlog_get_fd(), line, strlen(line))); + vlog_direct_write_to_log_file_unsafe(line); } } } diff --git a/lib/vlog.c b/lib/vlog.c index 502b33fc831e..6d17d4837e9c 100644 --- a/lib/vlog.c +++ b/lib/vlog.c @@ -612,10 +612,19 @@ vlog_set_syslog_target(const char *target) ovs_rwlock_unlock(&pattern_rwlock); } -int -vlog_get_fd(void) +/* + * This function writes directly to log file without using async writer or + * taking a lock. Caller must hold 'log_file_mutex' or be sure that it's + * not necessary. Could be used in exceptional cases like dumping of backtrace + * on fatal signals. + */ +void +vlog_direct_write_to_log_file_unsafe(const char *s) + OVS_NO_THREAD_SAFETY_ANALYSIS { - return log_fd; + if (log_fd >= 0) { + ignore(write(log_fd, s, strlen(s))); + } } /* Returns 'false' if 'facility' is not a valid string. If 'facility'