From patchwork Tue May 12 15:28:58 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Power, Ciara" X-Patchwork-Id: 70125 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id AE713A034F; Tue, 12 May 2020 17:31:12 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 735361BFB3; Tue, 12 May 2020 17:31:04 +0200 (CEST) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id D509C1BF98 for ; Tue, 12 May 2020 17:31:01 +0200 (CEST) IronPort-SDR: M20w6EyT/pVXv7X70tpIOEPmz8TiaodVNWCVdbYNAhwFoGxhgHdO4QP7Te75XL3Mk2EBizwFTR EC1rlQYRLRuQ== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 May 2020 08:31:01 -0700 IronPort-SDR: PJ5tRL5Jp3h3NRdiBVKv9mvuq7E3SYbBgD8+AaeMNXQASbU6ZFnIt9VDoXsCtA9pr/7HrlT3ot Upe934yy4XNQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.73,384,1583222400"; d="scan'208";a="409336924" Received: from silpixa00399953.ir.intel.com (HELO silpixa00399953.ger.corp.intel.com) ([10.237.222.53]) by orsmga004.jf.intel.com with ESMTP; 12 May 2020 08:30:59 -0700 From: Ciara Power To: bruce.richardson@intel.com Cc: dev@dpdk.org, Ciara Power Date: Tue, 12 May 2020 16:28:58 +0100 Message-Id: <20200512152902.70211-2-ciara.power@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200512152902.70211-1-ciara.power@intel.com> References: <20200512152902.70211-1-ciara.power@intel.com> Subject: [dpdk-dev] [PATCH 1/5] telemetry: keep telemetry threads separate from data plane X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" The threads for listening on the telemetry sockets are control threads and should be separated from those on the data plane. Since telemetry cannot use the rte_ctrl_thread_create() API, as it does not depend on EAL, we pass the ctrl thread cpu_set to telemetry init and use it directly to ensure that telemetry cannot interfere with the data plane threads. Signed-off-by: Ciara Power Acked-by: Kevin Laatz --- lib/librte_eal/freebsd/eal.c | 3 ++- lib/librte_eal/linux/eal.c | 3 ++- lib/librte_telemetry/rte_telemetry.h | 3 ++- lib/librte_telemetry/telemetry.c | 13 ++++++++----- 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/lib/librte_eal/freebsd/eal.c b/lib/librte_eal/freebsd/eal.c index f681bc7a22..14b52168e2 100644 --- a/lib/librte_eal/freebsd/eal.c +++ b/lib/librte_eal/freebsd/eal.c @@ -958,7 +958,8 @@ rte_eal_init(int argc, char **argv) if (!internal_config.no_telemetry) { const char *error_str; if (rte_telemetry_init(rte_eal_get_runtime_dir(), - &error_str) != 0) { + &internal_config.ctrl_cpuset, &error_str) + != 0) { rte_eal_init_alert(error_str); return -1; } diff --git a/lib/librte_eal/linux/eal.c b/lib/librte_eal/linux/eal.c index 6123bb7c46..9620d25444 100644 --- a/lib/librte_eal/linux/eal.c +++ b/lib/librte_eal/linux/eal.c @@ -1296,7 +1296,8 @@ rte_eal_init(int argc, char **argv) if (!internal_config.no_telemetry) { const char *error_str; if (rte_telemetry_init(rte_eal_get_runtime_dir(), - &error_str) != 0) { + &internal_config.ctrl_cpuset, &error_str) + != 0) { rte_eal_init_alert(error_str); return -1; } diff --git a/lib/librte_telemetry/rte_telemetry.h b/lib/librte_telemetry/rte_telemetry.h index 1965affba3..2c3c96cf73 100644 --- a/lib/librte_telemetry/rte_telemetry.h +++ b/lib/librte_telemetry/rte_telemetry.h @@ -250,6 +250,7 @@ rte_telemetry_register_cmd(const char *cmd, telemetry_cb fn, const char *help); */ __rte_experimental int -rte_telemetry_init(const char *runtime_dir, const char **err_str); +rte_telemetry_init(const char *runtime_dir, rte_cpuset_t *cpuset, + const char **err_str); #endif diff --git a/lib/librte_telemetry/telemetry.c b/lib/librte_telemetry/telemetry.c index 56a2fed3f5..7b6f8a79e4 100644 --- a/lib/librte_telemetry/telemetry.c +++ b/lib/librte_telemetry/telemetry.c @@ -341,7 +341,7 @@ create_socket(char *path) } static int -telemetry_legacy_init(const char *runtime_dir) +telemetry_legacy_init(const char *runtime_dir, rte_cpuset_t *cpuset) { pthread_t t_old; @@ -363,12 +363,13 @@ telemetry_legacy_init(const char *runtime_dir) if (v1_socket.sock < 0) return -1; pthread_create(&t_old, NULL, socket_listener, &v1_socket); + pthread_setaffinity_np(t_old, sizeof(*cpuset), cpuset); return 0; } static int -telemetry_v2_init(const char *runtime_dir) +telemetry_v2_init(const char *runtime_dir, rte_cpuset_t *cpuset) { pthread_t t_new; @@ -390,20 +391,22 @@ telemetry_v2_init(const char *runtime_dir) if (v2_socket.sock < 0) return -1; pthread_create(&t_new, NULL, socket_listener, &v2_socket); + pthread_setaffinity_np(t_new, sizeof(*cpuset), cpuset); atexit(unlink_sockets); return 0; } int32_t -rte_telemetry_init(const char *runtime_dir, const char **err_str) +rte_telemetry_init(const char *runtime_dir, rte_cpuset_t *cpuset, + const char **err_str) { - if (telemetry_v2_init(runtime_dir) != 0) { + if (telemetry_v2_init(runtime_dir, cpuset) != 0) { *err_str = telemetry_log_error; printf("Error initialising telemetry - %s\n", *err_str); return -1; } - if (telemetry_legacy_init(runtime_dir) != 0) { + if (telemetry_legacy_init(runtime_dir, cpuset) != 0) { *err_str = telemetry_log_error; printf("No telemetry legacy support - %s\n", *err_str); } From patchwork Tue May 12 15:28:59 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Power, Ciara" X-Patchwork-Id: 70126 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 7AFF8A034F; Tue, 12 May 2020 17:31:22 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 0CB651BFE6; Tue, 12 May 2020 17:31:06 +0200 (CEST) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id BF7C21BF98 for ; Tue, 12 May 2020 17:31:02 +0200 (CEST) IronPort-SDR: VMebB5CNhYsFWjU3FYVlSj8buoaZ701Ul73iW2Fuc4Zn+i0l4WrCGKTioYuBYk53HWQ9rmjOj5 3BJFkyzCK6OQ== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 May 2020 08:31:02 -0700 IronPort-SDR: Tj5Nw04ORgJtlJWBB3ksZ6q5o80YwAGeni6tXRh7Ly2zQDvXuAHgN91AAAI1xFtyUB3HbEbtHz Sn2cMahfhlRg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.73,384,1583222400"; d="scan'208";a="409336943" Received: from silpixa00399953.ir.intel.com (HELO silpixa00399953.ger.corp.intel.com) ([10.237.222.53]) by orsmga004.jf.intel.com with ESMTP; 12 May 2020 08:31:01 -0700 From: Ciara Power To: bruce.richardson@intel.com Cc: dev@dpdk.org, Ciara Power Date: Tue, 12 May 2020 16:28:59 +0100 Message-Id: <20200512152902.70211-3-ciara.power@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200512152902.70211-1-ciara.power@intel.com> References: <20200512152902.70211-1-ciara.power@intel.com> Subject: [dpdk-dev] [PATCH 2/5] telemetry: fix error checking for strchr function X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" The strchr function return was not being checked which could lead to NULL deferencing later in the function. Coverity issue: 358438 Coverity issue: 358445 Fixes: b80fe1805eee ("telemetry: introduce backward compatibility") Cc: ciara.power@intel.com Signed-off-by: Ciara Power Acked-by: Kevin Laatz --- lib/librte_telemetry/telemetry_legacy.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/lib/librte_telemetry/telemetry_legacy.c b/lib/librte_telemetry/telemetry_legacy.c index 8e24eb4cb9..10b575adfd 100644 --- a/lib/librte_telemetry/telemetry_legacy.c +++ b/lib/librte_telemetry/telemetry_legacy.c @@ -82,8 +82,16 @@ register_client(const char *cmd __rte_unused, const char *params, int fd; struct sockaddr_un addrs; + if (!strchr(params, ':')) { + fprintf(stderr, "Invalid data\n"); + return -1; + } strlcpy(data, strchr(params, ':'), sizeof(data)); memcpy(data, &data[strlen(":\"")], strlen(data)); + if (!strchr(data, '\"')) { + fprintf(stderr, "Invalid client data\n"); + return -1; + } *strchr(data, '\"') = 0; fd = socket(AF_UNIX, SOCK_SEQPACKET, 0); @@ -178,6 +186,8 @@ parse_client_request(char *buffer, int buf_len, int s) if (!strchr(data_ptr, '{')) data_sep = data_ptr[strlen(callbacks[i].data)]; else { + if (!strchr(data_ptr, '}')) + return -EINVAL; char *data_end = strchr(data_ptr, '}'); data = data_ptr + strlen(DATA_REQ_LABEL); data_sep = data_end[1]; From patchwork Tue May 12 15:29:00 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Power, Ciara" X-Patchwork-Id: 70127 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 7A796A034F; Tue, 12 May 2020 17:31:31 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 5D7A11C00D; Tue, 12 May 2020 17:31:07 +0200 (CEST) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id C394A1BFB3 for ; Tue, 12 May 2020 17:31:03 +0200 (CEST) IronPort-SDR: ingr+almvBHhGwWvlg3A3y7cOJsWsFFdb1H/7l6TD24bdt8cs88hj3vegTgSj1dV0clAbGV2f6 L9oPzz0QUMWA== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 May 2020 08:31:03 -0700 IronPort-SDR: LYfrlGfr6/us69LwfgFvFovrH0H7eGkcRRFLNFOmVQAY+ugFHVV184DOA+fYlBQC+T9dwBN0s0 wj7+rwIfuCEw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.73,384,1583222400"; d="scan'208";a="409336949" Received: from silpixa00399953.ir.intel.com (HELO silpixa00399953.ger.corp.intel.com) ([10.237.222.53]) by orsmga004.jf.intel.com with ESMTP; 12 May 2020 08:31:02 -0700 From: Ciara Power To: bruce.richardson@intel.com Cc: dev@dpdk.org, Ciara Power Date: Tue, 12 May 2020 16:29:00 +0100 Message-Id: <20200512152902.70211-4-ciara.power@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200512152902.70211-1-ciara.power@intel.com> References: <20200512152902.70211-1-ciara.power@intel.com> Subject: [dpdk-dev] [PATCH 3/5] telemetry: fix closing socket fd on error X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" The socket fd is now being closed when the connection fails. Coverity issue: 358444 Fixes: b80fe1805eee ("telemetry: introduce backward compatibility") Cc: ciara.power@intel.com Signed-off-by: Ciara Power Acked-by: Kevin Laatz --- lib/librte_telemetry/telemetry_legacy.c | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/librte_telemetry/telemetry_legacy.c b/lib/librte_telemetry/telemetry_legacy.c index 10b575adfd..72471cbfbe 100644 --- a/lib/librte_telemetry/telemetry_legacy.c +++ b/lib/librte_telemetry/telemetry_legacy.c @@ -100,6 +100,7 @@ register_client(const char *cmd __rte_unused, const char *params, if (connect(fd, (struct sockaddr *)&addrs, sizeof(addrs)) == -1) { perror("\nClient connection error\n"); + close(fd); return -1; } pthread_create(&th, NULL, &legacy_client_handler, From patchwork Tue May 12 15:29:01 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Power, Ciara" X-Patchwork-Id: 70128 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id E86C6A034F; Tue, 12 May 2020 17:31:39 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 97CCE1C031; Tue, 12 May 2020 17:31:08 +0200 (CEST) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id 0FF891BFD9 for ; Tue, 12 May 2020 17:31:04 +0200 (CEST) IronPort-SDR: Vow4V5+MlvtZa2mdVXElGDJTdISry60yzSJ9IzlDjQZYeZCKQVkGxG7Kvq93rzQd/sVBEdh1aJ iMBVI0Jq8Xdg== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 May 2020 08:31:04 -0700 IronPort-SDR: Dlj/Ei6LBpOq7YQp9y4PrlDxuXpiE5hKKjbNAtfy4c0Z7tDvypFgicHiySqSp7Soq/r6+miDSc XOWSfdoFHjlQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.73,384,1583222400"; d="scan'208";a="409336956" Received: from silpixa00399953.ir.intel.com (HELO silpixa00399953.ger.corp.intel.com) ([10.237.222.53]) by orsmga004.jf.intel.com with ESMTP; 12 May 2020 08:31:03 -0700 From: Ciara Power To: bruce.richardson@intel.com Cc: dev@dpdk.org, Ciara Power Date: Tue, 12 May 2020 16:29:01 +0100 Message-Id: <20200512152902.70211-5-ciara.power@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200512152902.70211-1-ciara.power@intel.com> References: <20200512152902.70211-1-ciara.power@intel.com> Subject: [dpdk-dev] [PATCH 4/5] telemetry: fix checking error return for socket creation X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" The return value from the socket function is now checked, as it can return a negative value on error. Coverity issue: 358443 Fixes: b80fe1805eee ("telemetry: introduce backward compatibility") Cc: ciara.power@intel.com Signed-off-by: Ciara Power Acked-by: Kevin Laatz --- lib/librte_telemetry/telemetry_legacy.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/librte_telemetry/telemetry_legacy.c b/lib/librte_telemetry/telemetry_legacy.c index 72471cbfbe..2de9021349 100644 --- a/lib/librte_telemetry/telemetry_legacy.c +++ b/lib/librte_telemetry/telemetry_legacy.c @@ -95,6 +95,10 @@ register_client(const char *cmd __rte_unused, const char *params, *strchr(data, '\"') = 0; fd = socket(AF_UNIX, SOCK_SEQPACKET, 0); + if (fd < 0) { + perror("Failed to open socket"); + return -1; + } addrs.sun_family = AF_UNIX; strlcpy(addrs.sun_path, data, sizeof(addrs.sun_path)); From patchwork Tue May 12 15:29:02 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Power, Ciara" X-Patchwork-Id: 70129 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 52A21A034F; Tue, 12 May 2020 17:31:49 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id DECAE1C138; Tue, 12 May 2020 17:31:09 +0200 (CEST) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id 3FC971BFEF for ; Tue, 12 May 2020 17:31:06 +0200 (CEST) IronPort-SDR: i1/xsOcYbsiC6Has9yjA40jitsreLGRIan/uEuMUqJ5TVjIKr43XjfDxdpEvqmemoO9+1c63rn zYe0Qza2x+tw== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 May 2020 08:31:05 -0700 IronPort-SDR: gQ2UK8r382eCGIlWMBHLIRzMWMqPpvzjJfy++JwWmc/LdRp07nxKVFyOd4r1qpVv2c/ZjkYWhR kNMlVcTipoAw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.73,384,1583222400"; d="scan'208";a="409336961" Received: from silpixa00399953.ir.intel.com (HELO silpixa00399953.ger.corp.intel.com) ([10.237.222.53]) by orsmga004.jf.intel.com with ESMTP; 12 May 2020 08:31:04 -0700 From: Ciara Power To: bruce.richardson@intel.com Cc: dev@dpdk.org, Ciara Power Date: Tue, 12 May 2020 16:29:02 +0100 Message-Id: <20200512152902.70211-6-ciara.power@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200512152902.70211-1-ciara.power@intel.com> References: <20200512152902.70211-1-ciara.power@intel.com> Subject: [dpdk-dev] [PATCH 5/5] telemetry: fix buffer overrun if max bytes read X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" If 1024 bytes were received over the socket, this caused buffer_recvf[bytes] to overrun the array. The size of the buffer - 1 is now passed to the read function. Coverity issue: 358442 Fixes: b80fe1805eee ("telemetry: introduce backward compatibility") Cc: ciara.power@intel.com Signed-off-by: Ciara Power Acked-by: Kevin Laatz --- lib/librte_telemetry/telemetry_legacy.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/librte_telemetry/telemetry_legacy.c b/lib/librte_telemetry/telemetry_legacy.c index 2de9021349..a341fe4ebd 100644 --- a/lib/librte_telemetry/telemetry_legacy.c +++ b/lib/librte_telemetry/telemetry_legacy.c @@ -217,7 +217,7 @@ legacy_client_handler(void *sock_id) int ret; char buffer_recv[BUF_SIZE]; /* receive data is not null terminated */ - int bytes = read(s, buffer_recv, sizeof(buffer_recv)); + int bytes = read(s, buffer_recv, sizeof(buffer_recv) - 1); while (bytes > 0) { buffer_recv[bytes] = 0; @@ -234,7 +234,7 @@ legacy_client_handler(void *sock_id) if (ret < 0) printf("\nCould not send error response\n"); } - bytes = read(s, buffer_recv, sizeof(buffer_recv)); + bytes = read(s, buffer_recv, sizeof(buffer_recv) - 1); } close(s); return NULL;