From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <dev-bounces@dpdk.org>
Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124])
	by inbox.dpdk.org (Postfix) with ESMTP id 556F443325;
	Tue, 14 Nov 2023 09:26:18 +0100 (CET)
Received: from mails.dpdk.org (localhost [127.0.0.1])
	by mails.dpdk.org (Postfix) with ESMTP id C0444406B6;
	Tue, 14 Nov 2023 09:25:50 +0100 (CET)
Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188])
 by mails.dpdk.org (Postfix) with ESMTP id 95483402E4
 for <dev@dpdk.org>; Tue, 14 Nov 2023 09:25:42 +0100 (CET)
Received: from dggpeml500011.china.huawei.com (unknown [172.30.72.56])
 by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4STzls4110zPpC5;
 Tue, 14 Nov 2023 16:21:29 +0800 (CST)
Received: from localhost.huawei.com (10.50.165.33) by
 dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server
 (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id
 15.1.2507.31; Tue, 14 Nov 2023 16:25:41 +0800
From: Dengdui Huang <huangdengdui@huawei.com>
To: <dev@dpdk.org>
CC: <ferruh.yigit@amd.com>, <stephen@networkplumber.org>,
 <lihuisong@huawei.com>, <fengchengwen@huawei.com>, <liuyonglong@huawei.com>
Subject: [PATCH 08/43] telemetry: replace strerror
Date: Tue, 14 Nov 2023 16:25:04 +0800
Message-ID: <20231114082539.1858594-9-huangdengdui@huawei.com>
X-Mailer: git-send-email 2.33.0
In-Reply-To: <20231114082539.1858594-1-huangdengdui@huawei.com>
References: <20231114082539.1858594-1-huangdengdui@huawei.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
X-Originating-IP: [10.50.165.33]
X-ClientProxiedBy: dggems703-chm.china.huawei.com (10.3.19.180) To
 dggpeml500011.china.huawei.com (7.185.36.84)
X-CFilter-Loop: Reflected
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: DPDK patches and discussions <dev.dpdk.org>
List-Unsubscribe: <https://mails.dpdk.org/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://mails.dpdk.org/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <https://mails.dpdk.org/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
Errors-To: dev-bounces@dpdk.org

The function strerror() is insecure in a multi-thread environment.
This patch uses strerror_r() to replace it.

Cc: stable@dpdk.org

Signed-off-by: Dengdui Huang <huangdengdui@huawei.com>
Acked-by: Chengwen Feng <fengchengwen@huawei.com>
---
 lib/telemetry/telemetry.c        | 28 ++++++++++++++++++++++------
 lib/telemetry/telemetry_legacy.c |  5 ++++-
 2 files changed, 26 insertions(+), 7 deletions(-)

diff --git a/lib/telemetry/telemetry.c b/lib/telemetry/telemetry.c
index 92982842a8..03be0d342a 100644
--- a/lib/telemetry/telemetry.c
+++ b/lib/telemetry/telemetry.c
@@ -411,6 +411,9 @@ client_handler(void *sock_id)
 static void *
 socket_listener(void *socket)
 {
+#define ERR_BUFF_SZ 256
+	char err_buf[ERR_BUFF_SZ] = {0};
+
 	while (1) {
 		pthread_t th;
 		int rc;
@@ -433,8 +436,9 @@ socket_listener(void *socket)
 		rc = pthread_create(&th, NULL, s->fn,
 				    (void *)(uintptr_t)s_accepted);
 		if (rc != 0) {
+			strerror_r(rc, err_buf, sizeof(err_buf));
 			TMTY_LOG(ERR, "Error with create client thread: %s\n",
-				 strerror(rc));
+				 err_buf);
 			close(s_accepted);
 			if (s->num_clients != NULL)
 				rte_atomic_fetch_sub_explicit(s->num_clients, 1,
@@ -467,9 +471,13 @@ unlink_sockets(void)
 static int
 create_socket(char *path)
 {
+#define ERR_BUFF_SZ 256
+	char err_buf[ERR_BUFF_SZ] = {0};
+
 	int sock = socket(AF_UNIX, SOCK_SEQPACKET, 0);
 	if (sock < 0) {
-		TMTY_LOG(ERR, "Error with socket creation, %s\n", strerror(errno));
+		strerror_r(errno, err_buf, sizeof(err_buf));
+		TMTY_LOG(ERR, "Error with socket creation, %s\n", err_buf);
 		return -1;
 	}
 
@@ -499,14 +507,16 @@ create_socket(char *path)
 		TMTY_LOG(DEBUG, "Attempting unlink and retrying bind\n");
 		unlink(sun.sun_path);
 		if (bind(sock, (void *) &sun, sizeof(sun)) < 0) {
-			TMTY_LOG(ERR, "Error binding socket: %s\n", strerror(errno));
+			strerror_r(errno, err_buf, sizeof(err_buf));
+			TMTY_LOG(ERR, "Error binding socket: %s\n", err_buf);
 			close(sock);
 			return -errno; /* if unlink failed, this will be -EADDRINUSE as above */
 		}
 	}
 
 	if (listen(sock, 1) < 0) {
-		TMTY_LOG(ERR, "Error calling listen for socket: %s\n", strerror(errno));
+		strerror_r(errno, err_buf, sizeof(err_buf));
+		TMTY_LOG(ERR, "Error calling listen for socket: %s\n", err_buf);
 		unlink(sun.sun_path);
 		close(sock);
 		return -errno;
@@ -531,6 +541,8 @@ set_thread_name(pthread_t id __rte_unused, const char *name __rte_unused)
 static int
 telemetry_legacy_init(void)
 {
+#define ERR_BUFF_SZ 256
+	char err_buf[ERR_BUFF_SZ] = {0};
 	pthread_t t_old;
 	int rc;
 
@@ -552,8 +564,9 @@ telemetry_legacy_init(void)
 	}
 	rc = pthread_create(&t_old, NULL, socket_listener, &v1_socket);
 	if (rc != 0) {
+		strerror_r(rc, err_buf, sizeof(err_buf));
 		TMTY_LOG(ERR, "Error with create legacy socket thread: %s\n",
-			 strerror(rc));
+			 err_buf);
 		close(v1_socket.sock);
 		v1_socket.sock = -1;
 		unlink(v1_socket.path);
@@ -570,7 +583,9 @@ telemetry_legacy_init(void)
 static int
 telemetry_v2_init(void)
 {
+#define ERR_BUFF_SZ 256
 	char spath[sizeof(v2_socket.path)];
+	char err_buf[ERR_BUFF_SZ] = {0};
 	pthread_t t_new;
 	short suffix = 0;
 	int rc;
@@ -606,8 +621,9 @@ telemetry_v2_init(void)
 	}
 	rc = pthread_create(&t_new, NULL, socket_listener, &v2_socket);
 	if (rc != 0) {
+		strerror_r(rc, err_buf, sizeof(err_buf));
 		TMTY_LOG(ERR, "Error with create socket thread: %s\n",
-			 strerror(rc));
+			 err_buf);
 		close(v2_socket.sock);
 		v2_socket.sock = -1;
 		unlink(v2_socket.path);
diff --git a/lib/telemetry/telemetry_legacy.c b/lib/telemetry/telemetry_legacy.c
index 4c1d1c353a..3253dd9c1f 100644
--- a/lib/telemetry/telemetry_legacy.c
+++ b/lib/telemetry/telemetry_legacy.c
@@ -81,6 +81,8 @@ register_client(const char *cmd __rte_unused, const char *params,
 		char *buffer __rte_unused, int buf_len __rte_unused)
 {
 #ifndef RTE_EXEC_ENV_WINDOWS
+#define ERR_BUFF_SZ 256
+	char err_buf[ERR_BUFF_SZ] = {0};
 	pthread_t th;
 	char data[BUF_SIZE];
 	int fd;
@@ -117,8 +119,9 @@ register_client(const char *cmd __rte_unused, const char *params,
 	rc = pthread_create(&th, NULL, &legacy_client_handler,
 				(void *)(uintptr_t)fd);
 	if (rc != 0) {
+		strerror_r(rc, err_buf, sizeof(err_buf));
 		fprintf(stderr, "Failed to create legacy client thread: %s\n",
-			strerror(rc));
+			err_buf);
 		close(fd);
 		return -1;
 	}
-- 
2.33.0