From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id D797345C76; Mon, 4 Nov 2024 12:13:58 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B389040E64; Mon, 4 Nov 2024 12:11:18 +0100 (CET) Received: from szxga04-in.huawei.com (szxga04-in.huawei.com [45.249.212.190]) by mails.dpdk.org (Postfix) with ESMTP id A8FFA40E26 for ; Mon, 4 Nov 2024 12:10:43 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.163.44]) by szxga04-in.huawei.com (SkyGuard) with ESMTP id 4XhpdY66MDz20rRw; Mon, 4 Nov 2024 19:09:37 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id A241C14010D; Mon, 4 Nov 2024 19:10:42 +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_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:42 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 24/52] net/af_xdp: replace strerror with reentrant version Date: Mon, 4 Nov 2024 19:10:09 +0800 Message-ID: <20241104111037.3632161-25-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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. Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li --- drivers/net/af_xdp/rte_eth_af_xdp.c | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/drivers/net/af_xdp/rte_eth_af_xdp.c b/drivers/net/af_xdp/rte_eth_af_xdp.c index 814398ba4b..52ad450172 100644 --- a/drivers/net/af_xdp/rte_eth_af_xdp.c +++ b/drivers/net/af_xdp/rte_eth_af_xdp.c @@ -1141,6 +1141,7 @@ xsk_umem_info *xdp_umem_configure(struct pmd_internals *internals, void *aligned_addr; uint64_t umem_size; struct rte_mempool_mem_range_info range; + char errmsg[RTE_STRERR_BUFSIZE]; if (internals->shared_umem) { if (get_shared_umem(rxq, internals->if_name, &umem) < 0) @@ -1190,8 +1191,10 @@ xsk_umem_info *xdp_umem_configure(struct pmd_internals *internals, ret = xsk_umem__create(&umem->umem, aligned_addr, umem_size, &rxq->fq, &rxq->cq, &usr_config); if (ret) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); AF_XDP_LOG_LINE(ERR, "Failed to create umem [%d]: [%s]", - errno, strerror(errno)); + errno, errmsg); goto err; } umem->buffer = aligned_addr; @@ -1394,6 +1397,7 @@ configure_preferred_busy_poll(struct pkt_rx_queue *rxq) static int init_uds_sock(struct sockaddr_un *server, const char *dp_path) { + char errmsg[RTE_STRERR_BUFSIZE]; int sock; sock = socket(AF_UNIX, SOCK_SEQPACKET, 0); @@ -1407,8 +1411,10 @@ init_uds_sock(struct sockaddr_un *server, const char *dp_path) if (connect(sock, (struct sockaddr *)server, sizeof(struct sockaddr_un)) < 0) { close(sock); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); AF_XDP_LOG_LINE(ERR, "Error connecting stream socket errno = [%d]: [%s]", - errno, strerror(errno)); + errno, errmsg); return -1; } @@ -1472,6 +1478,7 @@ read_msg(int sock, char *response, struct sockaddr_un *s, int *fd) struct iovec iov; char control[CMSG_SPACE(sizeof(*fd))]; struct cmsghdr *cmsg; + char errmsg[RTE_STRERR_BUFSIZE]; /* Initialize message header structure */ memset(&msgh, 0, sizeof(msgh)); @@ -1492,7 +1499,9 @@ read_msg(int sock, char *response, struct sockaddr_un *s, int *fd) return 0; if (msglen < 0) { - AF_XDP_LOG_LINE(ERR, "recvmsg failed, %s", strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + AF_XDP_LOG_LINE(ERR, "recvmsg failed, %s", errmsg); return -1; } @@ -1514,6 +1523,7 @@ static int make_request_dp(int sock, struct sockaddr_un *server, char *request, int *req_fd, char *response, int *out_fd, const char *dp_path) { + char errmsg[RTE_STRERR_BUFSIZE]; int rval; AF_XDP_LOG_LINE(DEBUG, "Request: [%s]", request); @@ -1527,7 +1537,9 @@ make_request_dp(int sock, struct sockaddr_un *server, char *request, rval = send_msg(sock, request, req_fd, dp_path); if (rval < 0) { - AF_XDP_LOG_LINE(ERR, "Write error %s", strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + AF_XDP_LOG_LINE(ERR, "Write error %s", errmsg); return -1; } @@ -2013,6 +2025,7 @@ static int parse_prog_arg(const char *key __rte_unused, const char *value, void *extra_args) { + char errmsg[RTE_STRERR_BUFSIZE]; char *path = extra_args; if (strnlen(value, PATH_MAX) == PATH_MAX) { @@ -2022,8 +2035,10 @@ parse_prog_arg(const char *key __rte_unused, } if (access(value, F_OK) != 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); AF_XDP_LOG_LINE(ERR, "Error accessing %s: %s", - value, strerror(errno)); + value, errmsg); return -EINVAL; } -- 2.33.0