From: Dengdui Huang <huangdengdui@huawei.com>
To: <dev@dpdk.org>
Cc: <ajit.khaparde@broadcom.com>, <thomas@monjalon.net>,
<ferruh.yigit@amd.com>, <stephen@networkplumber.org>,
<mb@smartsharesystems.com>, <david.marchand@redhat.com>,
<iboukris@gmail.com>, <lihuisong@huawei.com>,
<fengchengwen@huawei.com>, <haijie1@huawei.com>,
<liuyonglong@huawei.com>
Subject: [PATCH v5 45/52] net/tap: replace strerror with reentrant version
Date: Mon, 4 Nov 2024 19:10:30 +0800 [thread overview]
Message-ID: <20241104111037.3632161-46-huangdengdui@huawei.com> (raw)
In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com>
The function strerror() is insecure in a multi-thread environment.
This patch uses strerror_r() to replace it.
Signed-off-by: Dengdui Huang <huangdengdui@huawei.com>
Acked-by: Chengwen Feng <fengchengwen@huawei.com>
Acked-by: Morten Brørup <mb@smartsharesystems.com>
Acked-by: Huisong Li <lihuisong@huawei.com>
---
drivers/net/tap/rte_eth_tap.c | 51 ++++++++++++++++++++++++++---------
drivers/net/tap/tap_flow.c | 33 ++++++++++++++++++-----
drivers/net/tap/tap_netlink.c | 12 +++++++--
drivers/net/tap/tap_tcmsgs.c | 12 +++++++--
4 files changed, 85 insertions(+), 23 deletions(-)
diff --git a/drivers/net/tap/rte_eth_tap.c b/drivers/net/tap/rte_eth_tap.c
index 650ddbd706..159d2e9c75 100644
--- a/drivers/net/tap/rte_eth_tap.c
+++ b/drivers/net/tap/rte_eth_tap.c
@@ -153,6 +153,7 @@ static int tap_intr_handle_set(struct rte_eth_dev *dev, int set);
static int
tun_alloc(struct pmd_internals *pmd, int is_keepalive, int persistent)
{
+ char errmsg[RTE_STRERR_BUFSIZE];
struct ifreq ifr;
#ifdef IFF_MULTI_QUEUE
unsigned int features;
@@ -196,16 +197,20 @@ tun_alloc(struct pmd_internals *pmd, int is_keepalive, int persistent)
/* Set the TUN/TAP configuration and set the name if needed */
if (ioctl(fd, TUNSETIFF, (void *)&ifr) < 0) {
+ if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0)
+ snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno);
TAP_LOG(WARNING, "Unable to set TUNSETIFF for %s: %s",
- ifr.ifr_name, strerror(errno));
+ ifr.ifr_name, errmsg);
goto error;
}
/* Keep the device after application exit */
if (persistent && ioctl(fd, TUNSETPERSIST, 1) < 0) {
+ if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0)
+ snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno);
TAP_LOG(WARNING,
"Unable to set persist %s: %s",
- ifr.ifr_name, strerror(errno));
+ ifr.ifr_name, errmsg);
goto error;
}
@@ -223,26 +228,32 @@ tun_alloc(struct pmd_internals *pmd, int is_keepalive, int persistent)
*/
ifr.ifr_flags = IFF_DETACH_QUEUE;
if (ioctl(fd, TUNSETQUEUE, (void *)&ifr) < 0) {
+ if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0)
+ snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno);
TAP_LOG(WARNING,
"Unable to detach keep-alive queue for %s: %s",
- ifr.ifr_name, strerror(errno));
+ ifr.ifr_name, errmsg);
goto error;
}
}
flags = fcntl(fd, F_GETFL);
if (flags == -1) {
+ if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0)
+ snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno);
TAP_LOG(WARNING, "Unable to get %s current flags: %s",
- ifr.ifr_name, strerror(errno));
+ ifr.ifr_name, errmsg);
goto error;
}
/* Always set the file descriptor to non-blocking */
flags |= O_NONBLOCK;
if (fcntl(fd, F_SETFL, flags) < 0) {
+ if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0)
+ snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno);
TAP_LOG(WARNING,
"Unable to set %s to nonblocking: %s",
- ifr.ifr_name, strerror(errno));
+ ifr.ifr_name, errmsg);
goto error;
}
@@ -294,19 +305,25 @@ tun_alloc(struct pmd_internals *pmd, int is_keepalive, int persistent)
} else {
/* Enable signal on file descriptor */
if (fcntl(fd, F_SETSIG, signo) < 0) {
+ if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0)
+ snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno);
TAP_LOG(WARNING, "Unable to set signo %d for fd %d: %s",
- signo, fd, strerror(errno));
+ signo, fd, errmsg);
goto error;
}
if (fcntl(fd, F_SETFL, flags | O_ASYNC) < 0) {
+ if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0)
+ snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno);
TAP_LOG(WARNING, "Unable to set fcntl flags: %s",
- strerror(errno));
+ errmsg);
goto error;
}
if (fcntl(fd, F_SETOWN, getpid()) < 0) {
+ if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0)
+ snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno);
TAP_LOG(WARNING, "Unable to set fcntl owner: %s",
- strerror(errno));
+ errmsg);
goto error;
}
}
@@ -781,6 +798,7 @@ tap_ioctl(struct pmd_internals *pmd, unsigned long request,
short req_flags = ifr->ifr_flags;
int remote = pmd->remote_if_index &&
(mode == REMOTE_ONLY || mode == LOCAL_AND_REMOTE);
+ char errmsg[RTE_STRERR_BUFSIZE];
if (!pmd->remote_if_index && mode == REMOTE_ONLY)
return 0;
@@ -820,8 +838,10 @@ tap_ioctl(struct pmd_internals *pmd, unsigned long request,
return 0;
error:
+ if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0)
+ snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno);
TAP_LOG(DEBUG, "%s(%s) failed: %s(%d)", ifr->ifr_name,
- tap_ioctl_req2str(request), strerror(errno), errno);
+ tap_ioctl_req2str(request), errmsg, errno);
return -errno;
}
@@ -1913,6 +1933,7 @@ eth_dev_tap_create(struct rte_vdev_device *vdev, const char *tap_name,
struct pmd_internals *pmd;
struct pmd_process_private *process_private;
const char *tuntap_name = tuntap_types[type];
+ char errmsg[RTE_STRERR_BUFSIZE];
struct rte_eth_dev_data *data;
struct ifreq ifr;
int i;
@@ -1947,9 +1968,11 @@ eth_dev_tap_create(struct rte_vdev_device *vdev, const char *tap_name,
pmd->ioctl_sock = socket(AF_INET, SOCK_DGRAM, 0);
if (pmd->ioctl_sock == -1) {
+ if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0)
+ snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno);
TAP_LOG(ERR,
"%s Unable to get a socket for management: %s",
- tuntap_name, strerror(errno));
+ tuntap_name, errmsg);
goto error_exit;
}
@@ -2110,8 +2133,10 @@ eth_dev_tap_create(struct rte_vdev_device *vdev, const char *tap_name,
return 0;
disable_rte_flow:
+ if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0)
+ snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno);
TAP_LOG(ERR, " Disabling rte flow support: %s(%d)",
- strerror(errno), errno);
+ errmsg, errno);
if (strlen(remote_iface)) {
TAP_LOG(ERR, "Remote feature requires flow support.");
goto error_exit;
@@ -2121,8 +2146,10 @@ eth_dev_tap_create(struct rte_vdev_device *vdev, const char *tap_name,
#ifdef HAVE_TCA_FLOWER
error_remote:
+ if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0)
+ snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno);
TAP_LOG(ERR, " Can't set up remote feature: %s(%d)",
- strerror(errno), errno);
+ errmsg, errno);
tap_flow_implicit_flush(pmd, NULL);
#endif
diff --git a/drivers/net/tap/tap_flow.c b/drivers/net/tap/tap_flow.c
index c0e44bb1a7..01a9852bfd 100644
--- a/drivers/net/tap/tap_flow.c
+++ b/drivers/net/tap/tap_flow.c
@@ -1258,6 +1258,7 @@ tap_flow_create(struct rte_eth_dev *dev,
{
struct pmd_internals *pmd = dev->data->dev_private;
struct rte_flow *remote_flow = NULL;
+ char errmsg[RTE_STRERR_BUFSIZE];
struct rte_flow *flow = NULL;
struct tap_nlmsg *msg = NULL;
int err;
@@ -1300,9 +1301,11 @@ tap_flow_create(struct rte_eth_dev *dev,
}
err = tap_nl_recv_ack(pmd->nlsk_fd);
if (err < 0) {
+ if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0)
+ snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno);
TAP_LOG(ERR,
"Kernel refused TC filter rule creation (%d): %s",
- errno, strerror(errno));
+ errno, errmsg);
rte_flow_error_set(error, EEXIST, RTE_FLOW_ERROR_TYPE_HANDLE,
NULL,
"overlapping rules or Kernel too old for flower support");
@@ -1345,9 +1348,11 @@ tap_flow_create(struct rte_eth_dev *dev,
}
err = tap_nl_recv_ack(pmd->nlsk_fd);
if (err < 0) {
+ if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0)
+ snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno);
TAP_LOG(ERR,
"Kernel refused TC filter rule creation (%d): %s",
- errno, strerror(errno));
+ errno, errmsg);
rte_flow_error_set(
error, ENOMEM, RTE_FLOW_ERROR_TYPE_HANDLE,
NULL,
@@ -1382,6 +1387,7 @@ tap_flow_destroy_pmd(struct pmd_internals *pmd,
struct rte_flow_error *error)
{
struct rte_flow *remote_flow = flow->remote_flow;
+ char errmsg[RTE_STRERR_BUFSIZE];
int ret = 0;
LIST_REMOVE(flow, next);
@@ -1399,9 +1405,11 @@ tap_flow_destroy_pmd(struct pmd_internals *pmd,
if (ret < 0 && errno == ENOENT)
ret = 0;
if (ret < 0) {
+ if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0)
+ snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno);
TAP_LOG(ERR,
"Kernel refused TC filter rule deletion (%d): %s",
- errno, strerror(errno));
+ errno, errmsg);
rte_flow_error_set(
error, ENOTSUP, RTE_FLOW_ERROR_TYPE_HANDLE, NULL,
"couldn't receive kernel ack to our request");
@@ -1423,9 +1431,11 @@ tap_flow_destroy_pmd(struct pmd_internals *pmd,
if (ret < 0 && errno == ENOENT)
ret = 0;
if (ret < 0) {
+ if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0)
+ snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno);
TAP_LOG(ERR,
"Kernel refused TC filter rule deletion (%d): %s",
- errno, strerror(errno));
+ errno, errmsg);
rte_flow_error_set(
error, ENOMEM, RTE_FLOW_ERROR_TYPE_HANDLE,
NULL, "Failure trying to receive nl ack");
@@ -1578,6 +1588,7 @@ int tap_flow_implicit_create(struct pmd_internals *pmd,
struct rte_flow_item_eth eth_local = { .hdr.ether_type = 0 };
unsigned int if_index = pmd->remote_if_index;
struct rte_flow *remote_flow = NULL;
+ char errmsg[RTE_STRERR_BUFSIZE];
struct tap_nlmsg *msg = NULL;
int err = 0;
struct rte_flow_item items_local[2] = {
@@ -1647,9 +1658,11 @@ int tap_flow_implicit_create(struct pmd_internals *pmd,
/* Silently ignore re-entering existing rule */
if (errno == EEXIST)
goto success;
+ if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0)
+ snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno);
TAP_LOG(ERR,
"Kernel refused TC filter rule creation (%d): %s",
- errno, strerror(errno));
+ errno, errmsg);
goto fail;
}
LIST_INSERT_HEAD(&pmd->implicit_flows, remote_flow, next);
@@ -1734,12 +1747,15 @@ void tap_flow_bpf_destroy(struct pmd_internals *pmd __rte_unused)
*/
static int rss_enable(struct pmd_internals *pmd, struct rte_flow_error *error)
{
+ char errmsg[RTE_STRERR_BUFSIZE];
int err;
/* Load the BPF program (defined in tap_bpf.h from skeleton) */
pmd->rss = tap_rss__open_and_load();
if (pmd->rss == NULL) {
- TAP_LOG(ERR, "Failed to load BPF object: %s", strerror(errno));
+ if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0)
+ snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno);
+ TAP_LOG(ERR, "Failed to load BPF object: %s", errmsg);
rte_flow_error_set(error, errno, RTE_FLOW_ERROR_TYPE_HANDLE, NULL,
"BPF object could not be loaded");
return -errno;
@@ -1795,6 +1811,7 @@ static int rss_add_actions(struct rte_flow *flow, struct pmd_internals *pmd,
const uint8_t *key_in;
uint32_t hash_type = 0;
uint32_t handle = flow->msg.t.tcm_handle;
+ char errmsg[RTE_STRERR_BUFSIZE];
unsigned int i;
int err;
@@ -1868,9 +1885,11 @@ static int rss_add_actions(struct rte_flow *flow, struct pmd_internals *pmd,
&handle, sizeof(handle),
&rss_entry, sizeof(rss_entry), 0);
if (err) {
+ if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0)
+ snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno);
TAP_LOG(ERR,
"Failed to update BPF map entry %#x (%d): %s",
- handle, errno, strerror(errno));
+ handle, errno, errmsg);
rte_flow_error_set(
error, ENOTSUP, RTE_FLOW_ERROR_TYPE_HANDLE, NULL,
"Kernel too old or not configured "
diff --git a/drivers/net/tap/tap_netlink.c b/drivers/net/tap/tap_netlink.c
index 8a57c9242c..bd75ca8576 100644
--- a/drivers/net/tap/tap_netlink.c
+++ b/drivers/net/tap/tap_netlink.c
@@ -14,6 +14,7 @@
#include <rte_malloc.h>
#include <tap_netlink.h>
#include <rte_random.h>
+#include <rte_errno.h>
#include "tap_log.h"
@@ -96,9 +97,13 @@ tap_nl_init(uint32_t nl_groups)
int
tap_nl_final(int nlsk_fd)
{
+ char errmsg[RTE_STRERR_BUFSIZE];
+
if (close(nlsk_fd)) {
+ if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0)
+ snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno);
TAP_LOG(ERR, "Failed to close netlink socket: %s (%d)",
- strerror(errno), errno);
+ errmsg, errno);
return -1;
}
return 0;
@@ -122,6 +127,7 @@ tap_nl_send(int nlsk_fd, struct nlmsghdr *nh)
nh->nlmsg_pid = 0; /* communication with the kernel uses pid 0 */
nh->nlmsg_seq = (uint32_t)rte_rand();
+ char errmsg[RTE_STRERR_BUFSIZE];
retry:
send_bytes = send(nlsk_fd, nh, nh->nlmsg_len, 0);
@@ -129,8 +135,10 @@ tap_nl_send(int nlsk_fd, struct nlmsghdr *nh)
if (errno == EINTR)
goto retry;
+ if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0)
+ snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno);
TAP_LOG(ERR, "Failed to send netlink message: %s (%d)",
- strerror(errno), errno);
+ errmsg, errno);
return -1;
}
return send_bytes;
diff --git a/drivers/net/tap/tap_tcmsgs.c b/drivers/net/tap/tap_tcmsgs.c
index 1755b57519..5b45c3c296 100644
--- a/drivers/net/tap/tap_tcmsgs.c
+++ b/drivers/net/tap/tap_tcmsgs.c
@@ -8,6 +8,8 @@
#include <net/if.h>
#include <string.h>
+#include <rte_errno.h>
+
#include <rte_log.h>
#include <tap_tcmsgs.h>
#include "tap_log.h"
@@ -258,12 +260,15 @@ qdisc_flush(int nlsk_fd, unsigned int ifindex)
int
qdisc_create_multiq(int nlsk_fd, unsigned int ifindex)
{
+ char errmsg[RTE_STRERR_BUFSIZE];
int err = 0;
err = qdisc_add_multiq(nlsk_fd, ifindex);
if (err < 0 && errno != -EEXIST) {
+ if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0)
+ snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno);
TAP_LOG(ERR, "Could not add multiq qdisc (%d): %s",
- errno, strerror(errno));
+ errno, errmsg);
return -1;
}
return 0;
@@ -284,12 +289,15 @@ qdisc_create_multiq(int nlsk_fd, unsigned int ifindex)
int
qdisc_create_ingress(int nlsk_fd, unsigned int ifindex)
{
+ char errmsg[RTE_STRERR_BUFSIZE];
int err = 0;
err = qdisc_add_ingress(nlsk_fd, ifindex);
if (err < 0 && errno != -EEXIST) {
+ if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0)
+ snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno);
TAP_LOG(ERR, "Could not add ingress qdisc (%d): %s",
- errno, strerror(errno));
+ errno, errmsg);
return -1;
}
return 0;
--
2.33.0
next prev parent reply other threads:[~2024-11-04 11:14 UTC|newest]
Thread overview: 247+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-11-14 8:24 [PATCH 00/43] replace strerror Dengdui Huang
2023-11-14 8:24 ` [PATCH 01/43] devtools: forbid use of strerror Dengdui Huang
2023-11-14 8:24 ` [PATCH 02/43] eal: use rte strerror Dengdui Huang
2023-11-15 0:18 ` Stephen Hemminger
2023-11-15 11:16 ` Morten Brørup
2024-02-01 21:49 ` Stephen Hemminger
2023-11-15 0:22 ` Stephen Hemminger
2023-11-15 11:23 ` Morten Brørup
2023-11-15 15:06 ` Stephen Hemminger
2023-11-14 8:24 ` [PATCH 03/43] eventdev: " Dengdui Huang
2023-11-14 8:25 ` [PATCH 04/43] latency: " Dengdui Huang
2023-11-14 8:25 ` [PATCH 05/43] node: " Dengdui Huang
2023-11-14 8:25 ` [PATCH 06/43] pdump: " Dengdui Huang
2023-11-14 8:25 ` [PATCH 07/43] power: " Dengdui Huang
2023-11-14 8:25 ` [PATCH 08/43] telemetry: replace strerror Dengdui Huang
2023-11-14 8:25 ` [PATCH 09/43] vhost: use rte strerror Dengdui Huang
2023-11-14 8:25 ` [PATCH 10/43] bpf: " Dengdui Huang
2023-11-14 8:25 ` [PATCH 11/43] bus/cdx: " Dengdui Huang
2023-11-14 8:25 ` [PATCH 12/43] bus/dpaa: " Dengdui Huang
2023-11-14 8:25 ` [PATCH 13/43] bus/fslmc: " Dengdui Huang
2023-11-14 8:25 ` [PATCH 14/43] bus/pci: " Dengdui Huang
2023-11-14 8:25 ` [PATCH 15/43] bus/vdev: " Dengdui Huang
2023-11-14 8:25 ` [PATCH 16/43] bus/vmbus: " Dengdui Huang
2023-11-14 8:25 ` [PATCH 17/43] common/cnxk: " Dengdui Huang
2023-11-14 8:25 ` [PATCH 18/43] common/mlx5: " Dengdui Huang
2023-11-14 8:25 ` [PATCH 19/43] crypto/caam_jr: " Dengdui Huang
2023-11-14 8:25 ` [PATCH 20/43] dma/idxd: " Dengdui Huang
2023-11-14 8:25 ` [PATCH 21/43] net/af_packet: " Dengdui Huang
2023-11-14 8:25 ` [PATCH 22/43] net/bnxt: " Dengdui Huang
2023-11-14 8:25 ` [PATCH 23/43] net/af_xdp: " Dengdui Huang
2023-11-14 8:25 ` [PATCH 24/43] net/bonding: " Dengdui Huang
2023-11-14 8:25 ` [PATCH 25/43] net/dpaa: " Dengdui Huang
2023-11-14 8:25 ` [PATCH 26/43] net/dpaa2: " Dengdui Huang
2023-11-14 8:25 ` [PATCH 27/43] net/enetfec: " Dengdui Huang
2023-11-14 8:25 ` [PATCH 28/43] net/failsafe: " Dengdui Huang
2023-11-14 8:25 ` [PATCH 29/43] net/i40e: " Dengdui Huang
2023-11-14 8:25 ` [PATCH 30/43] net/ice: " Dengdui Huang
2023-11-14 8:25 ` [PATCH 31/43] net/ixgbe: " Dengdui Huang
2023-11-14 8:25 ` [PATCH 32/43] net/memif: " Dengdui Huang
2023-11-14 8:25 ` [PATCH 33/43] net/mlx4: " Dengdui Huang
2023-11-14 8:25 ` [PATCH 34/43] net/mlx5: " Dengdui Huang
2023-11-14 8:25 ` [PATCH 35/43] net/qede: " Dengdui Huang
2023-11-14 8:25 ` [PATCH 36/43] net/sfc: " Dengdui Huang
2023-11-14 8:25 ` [PATCH 37/43] net/tap: " Dengdui Huang
2023-11-14 8:25 ` [PATCH 38/43] net/vhost: " Dengdui Huang
2023-11-14 8:25 ` [PATCH 39/43] net/virtio: " Dengdui Huang
2023-11-14 8:25 ` [PATCH 40/43] raw/ifpga: " Dengdui Huang
2023-11-14 8:25 ` [PATCH 41/43] vdpa/ifc: " Dengdui Huang
2023-11-14 8:25 ` [PATCH 42/43] vdpa/mlx5: " Dengdui Huang
2023-11-14 8:25 ` [PATCH 43/43] vdpa/sfc: " Dengdui Huang
2023-11-14 11:23 ` [PATCH v2 00/43] replace strerror Dengdui Huang
2023-11-14 11:23 ` [PATCH v2 01/43] devtools: forbid use of strerror Dengdui Huang
2023-11-14 11:23 ` [PATCH v2 02/43] eal: use rte strerror Dengdui Huang
2023-11-14 11:23 ` [PATCH v2 03/43] eventdev: " Dengdui Huang
2023-11-14 11:23 ` [PATCH v2 04/43] latency: " Dengdui Huang
2023-11-14 11:23 ` [PATCH v2 05/43] node: " Dengdui Huang
2023-11-14 11:23 ` [PATCH v2 06/43] pdump: " Dengdui Huang
2023-11-14 11:23 ` [PATCH v2 07/43] power: " Dengdui Huang
2023-11-14 11:23 ` [PATCH v2 08/43] telemetry: replace strerror Dengdui Huang
2023-11-14 11:23 ` [PATCH v2 09/43] vhost: use rte strerror Dengdui Huang
2023-11-14 11:23 ` [PATCH v2 10/43] bpf: " Dengdui Huang
2023-11-14 11:23 ` [PATCH v2 11/43] bus/cdx: " Dengdui Huang
2023-11-14 11:23 ` [PATCH v2 12/43] bus/dpaa: " Dengdui Huang
2023-11-14 11:23 ` [PATCH v2 13/43] bus/fslmc: " Dengdui Huang
2023-11-14 11:23 ` [PATCH v2 14/43] bus/pci: " Dengdui Huang
2023-11-14 11:23 ` [PATCH v2 15/43] bus/vdev: " Dengdui Huang
2023-11-14 11:23 ` [PATCH v2 16/43] bus/vmbus: " Dengdui Huang
2023-11-14 11:23 ` [PATCH v2 17/43] common/cnxk: " Dengdui Huang
2023-11-14 11:23 ` [PATCH v2 18/43] common/mlx5: " Dengdui Huang
2023-11-14 11:23 ` [PATCH v2 19/43] crypto/caam_jr: " Dengdui Huang
2023-11-14 11:23 ` [PATCH v2 20/43] dma/idxd: " Dengdui Huang
2023-11-14 11:23 ` [PATCH v2 21/43] net/af_packet: " Dengdui Huang
2023-11-14 11:23 ` [PATCH v2 22/43] net/bnxt: " Dengdui Huang
2023-11-14 11:23 ` [PATCH v2 23/43] net/af_xdp: " Dengdui Huang
2023-11-14 11:23 ` [PATCH v2 24/43] net/bonding: " Dengdui Huang
2023-11-14 11:23 ` [PATCH v2 25/43] net/dpaa: " Dengdui Huang
2023-11-14 11:23 ` [PATCH v2 26/43] net/dpaa2: " Dengdui Huang
2023-11-14 11:23 ` [PATCH v2 27/43] net/enetfec: " Dengdui Huang
2023-11-14 11:23 ` [PATCH v2 28/43] net/failsafe: " Dengdui Huang
2023-11-14 11:23 ` [PATCH v2 29/43] net/i40e: " Dengdui Huang
2023-11-14 11:23 ` [PATCH v2 30/43] net/ice: " Dengdui Huang
2023-11-14 11:23 ` [PATCH v2 31/43] net/ixgbe: " Dengdui Huang
2023-11-14 11:23 ` [PATCH v2 32/43] net/memif: " Dengdui Huang
2023-11-14 11:23 ` [PATCH v2 33/43] net/mlx4: " Dengdui Huang
2023-11-14 11:23 ` [PATCH v2 34/43] net/mlx5: " Dengdui Huang
2023-11-14 11:23 ` [PATCH v2 35/43] net/qede: " Dengdui Huang
2023-11-14 11:24 ` [PATCH v2 36/43] net/sfc: " Dengdui Huang
2023-11-14 11:24 ` [PATCH v2 37/43] net/tap: " Dengdui Huang
2023-11-14 11:24 ` [PATCH v2 38/43] net/vhost: " Dengdui Huang
2023-11-14 11:24 ` [PATCH v2 39/43] net/virtio: " Dengdui Huang
2023-11-14 11:24 ` [PATCH v2 40/43] raw/ifpga: " Dengdui Huang
2023-11-14 11:24 ` [PATCH v2 41/43] vdpa/ifc: " Dengdui Huang
2023-11-14 11:24 ` [PATCH v2 42/43] vdpa/mlx5: " Dengdui Huang
2023-11-14 11:24 ` [PATCH v2 43/43] vdpa/sfc: " Dengdui Huang
2023-11-14 12:35 ` [PATCH v3 00/42] replace strerror Dengdui Huang
2023-11-14 12:35 ` [PATCH v3 01/42] devtools: forbid use of strerror Dengdui Huang
2023-11-14 12:35 ` [PATCH v3 02/42] eal: use rte strerror Dengdui Huang
2023-11-14 12:35 ` [PATCH v3 03/42] eventdev: " Dengdui Huang
2023-11-14 12:35 ` [PATCH v3 04/42] latency: " Dengdui Huang
2023-11-14 12:35 ` [PATCH v3 05/42] node: " Dengdui Huang
2023-11-14 12:35 ` [PATCH v3 06/42] pdump: " Dengdui Huang
2023-11-14 12:35 ` [PATCH v3 07/42] power: " Dengdui Huang
2023-11-14 12:35 ` [PATCH v3 08/42] vhost: " Dengdui Huang
2023-11-14 12:35 ` [PATCH v3 09/42] bpf: " Dengdui Huang
2023-11-14 12:35 ` [PATCH v3 10/42] bus/cdx: " Dengdui Huang
2023-11-14 12:35 ` [PATCH v3 11/42] bus/dpaa: " Dengdui Huang
2023-11-14 12:35 ` [PATCH v3 12/42] bus/fslmc: " Dengdui Huang
2023-11-14 12:35 ` [PATCH v3 13/42] bus/pci: " Dengdui Huang
2023-11-14 12:35 ` [PATCH v3 14/42] bus/vdev: " Dengdui Huang
2023-11-14 12:35 ` [PATCH v3 15/42] bus/vmbus: " Dengdui Huang
2023-11-14 12:35 ` [PATCH v3 16/42] common/cnxk: " Dengdui Huang
2023-11-14 12:35 ` [PATCH v3 17/42] common/mlx5: " Dengdui Huang
2023-11-14 12:35 ` [PATCH v3 18/42] crypto/caam_jr: " Dengdui Huang
2023-11-14 12:35 ` [PATCH v3 19/42] dma/idxd: " Dengdui Huang
2023-11-14 12:35 ` [PATCH v3 20/42] net/af_packet: " Dengdui Huang
2023-11-14 12:35 ` [PATCH v3 21/42] net/bnxt: " Dengdui Huang
2023-11-14 12:35 ` [PATCH v3 22/42] net/af_xdp: " Dengdui Huang
2023-11-14 12:35 ` [PATCH v3 23/42] net/bonding: " Dengdui Huang
2023-11-14 12:35 ` [PATCH v3 24/42] net/dpaa: " Dengdui Huang
2023-11-14 12:35 ` [PATCH v3 25/42] net/dpaa2: " Dengdui Huang
2023-11-14 12:35 ` [PATCH v3 26/42] net/enetfec: " Dengdui Huang
2023-11-14 12:35 ` [PATCH v3 27/42] net/failsafe: " Dengdui Huang
2023-11-14 12:35 ` [PATCH v3 28/42] net/i40e: " Dengdui Huang
2023-11-14 12:35 ` [PATCH v3 29/42] net/ice: " Dengdui Huang
2023-11-14 12:35 ` [PATCH v3 30/42] net/ixgbe: " Dengdui Huang
2023-11-14 12:35 ` [PATCH v3 31/42] net/memif: " Dengdui Huang
2023-11-14 12:35 ` [PATCH v3 32/42] net/mlx4: " Dengdui Huang
2023-11-14 12:35 ` [PATCH v3 33/42] net/mlx5: " Dengdui Huang
2023-11-14 12:35 ` [PATCH v3 34/42] net/qede: " Dengdui Huang
2023-11-14 12:35 ` [PATCH v3 35/42] net/sfc: " Dengdui Huang
2023-11-14 12:35 ` [PATCH v3 36/42] net/tap: " Dengdui Huang
2023-11-14 12:35 ` [PATCH v3 37/42] net/vhost: " Dengdui Huang
2023-11-14 12:35 ` [PATCH v3 38/42] net/virtio: " Dengdui Huang
2023-11-14 12:35 ` [PATCH v3 39/42] raw/ifpga: " Dengdui Huang
2023-11-14 12:35 ` [PATCH v3 40/42] vdpa/ifc: " Dengdui Huang
2023-11-14 12:35 ` [PATCH v3 41/42] vdpa/mlx5: " Dengdui Huang
2023-11-14 12:35 ` [PATCH v3 42/42] vdpa/sfc: " Dengdui Huang
2024-10-23 8:28 ` [PATCH v4 00/42] replace strerror Dengdui Huang
2024-10-23 8:28 ` [PATCH v4 01/42] devtools: forbid use of strerror Dengdui Huang
2024-10-23 8:28 ` [PATCH v4 02/42] eal: use rte strerror Dengdui Huang
2024-10-23 8:28 ` [PATCH v4 03/42] eventdev: " Dengdui Huang
2024-10-23 8:28 ` [PATCH v4 04/42] latency: " Dengdui Huang
2024-10-23 8:28 ` [PATCH v4 05/42] node: " Dengdui Huang
2024-10-23 8:28 ` [PATCH v4 06/42] pdump: " Dengdui Huang
2024-10-23 8:28 ` [PATCH v4 07/42] power: " Dengdui Huang
2024-10-23 8:28 ` [PATCH v4 08/42] vhost: " Dengdui Huang
2024-10-23 8:28 ` [PATCH v4 09/42] bpf: " Dengdui Huang
2024-10-23 8:28 ` [PATCH v4 10/42] bus/cdx: " Dengdui Huang
2024-10-23 8:28 ` [PATCH v4 11/42] bus/dpaa: " Dengdui Huang
2024-10-23 8:28 ` [PATCH v4 12/42] bus/fslmc: " Dengdui Huang
2024-10-23 8:28 ` [PATCH v4 13/42] bus/pci: " Dengdui Huang
2024-10-23 8:28 ` [PATCH v4 14/42] bus/vdev: " Dengdui Huang
2024-10-23 8:28 ` [PATCH v4 15/42] bus/vmbus: " Dengdui Huang
2024-10-23 8:28 ` [PATCH v4 16/42] common/cnxk: " Dengdui Huang
2024-10-23 8:28 ` [PATCH v4 17/42] common/mlx5: " Dengdui Huang
2024-10-23 8:28 ` [PATCH v4 18/42] crypto/caam_jr: " Dengdui Huang
2024-10-23 8:28 ` [PATCH v4 19/42] dma/idxd: " Dengdui Huang
2024-10-23 8:28 ` [PATCH v4 20/42] net/af_packet: " Dengdui Huang
2024-10-23 8:28 ` [PATCH v4 21/42] net/bnxt: " Dengdui Huang
2024-10-23 20:24 ` Ajit Khaparde
2024-10-23 8:28 ` [PATCH v4 22/42] net/af_xdp: " Dengdui Huang
2024-10-24 17:05 ` Maryam Tahhan
2024-10-23 8:28 ` [PATCH v4 23/42] net/bonding: " Dengdui Huang
2024-10-23 8:28 ` [PATCH v4 24/42] net/dpaa: " Dengdui Huang
2024-10-23 8:28 ` [PATCH v4 25/42] net/dpaa2: " Dengdui Huang
2024-10-23 8:28 ` [PATCH v4 26/42] net/enetfec: " Dengdui Huang
2024-10-23 8:28 ` [PATCH v4 27/42] net/failsafe: " Dengdui Huang
2024-10-23 8:28 ` [PATCH v4 28/42] net/i40e: " Dengdui Huang
2024-10-23 8:28 ` [PATCH v4 29/42] net/ice: " Dengdui Huang
2024-10-23 8:28 ` [PATCH v4 30/42] net/ixgbe: " Dengdui Huang
2024-10-23 8:28 ` [PATCH v4 31/42] net/memif: " Dengdui Huang
2024-10-23 8:28 ` [PATCH v4 32/42] net/mlx4: " Dengdui Huang
2024-10-23 8:28 ` [PATCH v4 33/42] net/mlx5: " Dengdui Huang
2024-10-23 8:28 ` [PATCH v4 34/42] net/qede: " Dengdui Huang
2024-10-23 8:28 ` [PATCH v4 35/42] net/sfc: " Dengdui Huang
2024-10-23 8:28 ` [PATCH v4 36/42] net/tap: " Dengdui Huang
2024-10-23 8:28 ` [PATCH v4 37/42] net/vhost: " Dengdui Huang
2024-10-23 8:28 ` [PATCH v4 38/42] net/virtio: " Dengdui Huang
2024-10-23 8:28 ` [PATCH v4 39/42] raw/ifpga: " Dengdui Huang
2024-10-23 8:28 ` [PATCH v4 40/42] vdpa/ifc: " Dengdui Huang
2024-10-23 8:28 ` [PATCH v4 41/42] vdpa/mlx5: " Dengdui Huang
2024-10-23 8:28 ` [PATCH v4 42/42] vdpa/sfc: " Dengdui Huang
2024-10-23 15:42 ` [PATCH v4 00/42] replace strerror Stephen Hemminger
2024-10-24 6:47 ` huangdengdui
2024-10-25 21:56 ` Thomas Monjalon
2024-11-01 9:16 ` huangdengdui
2024-10-29 1:16 ` lihuisong (C)
2024-11-04 18:22 ` Stephen Hemminger
2023-11-15 0:16 ` [PATCH 00/43] " Stephen Hemminger
2024-02-01 11:03 ` David Marchand
2024-10-22 10:48 ` Morten Brørup
2024-11-04 11:09 ` [PATCH v5 00/52] " Dengdui Huang
2024-11-04 11:09 ` [PATCH v5 01/52] eal: fix use rte errno for libc function Dengdui Huang
2024-11-04 11:09 ` [PATCH v5 02/52] devtools: forbid use of strerror Dengdui Huang
2024-11-04 11:09 ` [PATCH v5 03/52] eal: replace strerror with reentrant version Dengdui Huang
2024-11-04 11:09 ` [PATCH v5 04/52] eventdev: " Dengdui Huang
2024-11-04 11:09 ` [PATCH v5 05/52] latency: " Dengdui Huang
2024-11-04 11:09 ` [PATCH v5 06/52] node: " Dengdui Huang
2024-11-04 11:09 ` [PATCH v5 07/52] pdump: " Dengdui Huang
2024-11-04 11:09 ` [PATCH v5 08/52] pdump: use rte strerror Dengdui Huang
2024-11-04 11:09 ` [PATCH v5 09/52] power: replace strerror with reentrant version Dengdui Huang
2024-11-04 11:09 ` [PATCH v5 10/52] vhost: " Dengdui Huang
2024-11-04 11:09 ` [PATCH v5 11/52] bpf: " Dengdui Huang
2024-11-04 11:09 ` [PATCH v5 12/52] bus/cdx: " Dengdui Huang
2024-11-04 11:09 ` [PATCH v5 13/52] bus/dpaa: " Dengdui Huang
2024-11-04 11:09 ` [PATCH v5 14/52] bus/fslmc: " Dengdui Huang
2024-11-04 11:10 ` [PATCH v5 15/52] bus/pci: " Dengdui Huang
2024-11-04 11:10 ` [PATCH v5 16/52] bus/vmbus: " Dengdui Huang
2024-11-04 11:10 ` [PATCH v5 17/52] bus/vdev: use rte strerror Dengdui Huang
2024-11-04 11:10 ` [PATCH v5 18/52] common/cnxk: replace strerror with reentrant version Dengdui Huang
2024-11-04 11:10 ` [PATCH v5 19/52] common/mlx5: " Dengdui Huang
2024-11-04 11:10 ` [PATCH v5 20/52] common/mlx5: use rte strerror Dengdui Huang
2024-11-04 11:10 ` [PATCH v5 21/52] crypto/caam_jr: replace strerror with reentrant version Dengdui Huang
2024-11-04 11:10 ` [PATCH v5 22/52] dma/idxd: " Dengdui Huang
2024-11-04 11:10 ` [PATCH v5 23/52] net/bnxt: " Dengdui Huang
2024-11-04 11:10 ` [PATCH v5 24/52] net/af_xdp: " Dengdui Huang
2024-11-04 11:10 ` [PATCH v5 25/52] net/af_xdp: use rte strerror Dengdui Huang
2024-11-04 11:10 ` [PATCH v5 26/52] net/bonding: replace strerror with reentrant version Dengdui Huang
2024-11-04 11:10 ` [PATCH v5 27/52] net/bonding: use rte strerror Dengdui Huang
2024-11-04 11:10 ` [PATCH v5 28/52] net/cnxk: replace strerror with reentrant version Dengdui Huang
2024-11-04 11:10 ` [PATCH v5 29/52] net/dpaa: " Dengdui Huang
2024-11-04 11:10 ` [PATCH v5 30/52] net/dpaa2: " Dengdui Huang
2024-11-04 11:10 ` [PATCH v5 31/52] net/enetfec: " Dengdui Huang
2024-11-04 11:10 ` [PATCH v5 32/52] net/failsafe: " Dengdui Huang
2024-11-04 11:10 ` [PATCH v5 33/52] net/failsafe: use rte strerror Dengdui Huang
2024-11-04 11:10 ` [PATCH v5 34/52] net/i40e: replace strerror with reentrant version Dengdui Huang
2024-11-04 11:10 ` [PATCH v5 35/52] net/ice: " Dengdui Huang
2024-11-04 11:10 ` [PATCH v5 36/52] net/ixgbe: " Dengdui Huang
2024-11-04 11:10 ` [PATCH v5 37/52] net/memif: " Dengdui Huang
2024-11-04 11:10 ` [PATCH v5 38/52] net/memif: use rte strerror Dengdui Huang
2024-11-04 11:10 ` [PATCH v5 39/52] net/mlx4: replace strerror with reentrant version Dengdui Huang
2024-11-04 11:10 ` [PATCH v5 40/52] net/mlx4: use rte strerror Dengdui Huang
2024-11-04 11:10 ` [PATCH v5 41/52] net/mlx5: replace strerror with reentrant version Dengdui Huang
2024-11-04 11:10 ` [PATCH v5 42/52] net/mlx5: use rte strerror Dengdui Huang
2024-11-04 11:10 ` [PATCH v5 43/52] net/qede: replace strerror with reentrant version Dengdui Huang
2024-11-04 11:10 ` [PATCH v5 44/52] net/sfc: " Dengdui Huang
2024-11-04 11:10 ` Dengdui Huang [this message]
2024-11-04 11:10 ` [PATCH v5 46/52] net/tap: use rte strerror Dengdui Huang
2024-11-04 11:10 ` [PATCH v5 47/52] net/vhost: replace strerror with reentrant version Dengdui Huang
2024-11-04 11:10 ` [PATCH v5 48/52] net/virtio: " Dengdui Huang
2024-11-04 11:10 ` [PATCH v5 49/52] raw/ifpga: " Dengdui Huang
2024-11-04 11:10 ` [PATCH v5 50/52] vdpa/ifc: " Dengdui Huang
2024-11-04 11:10 ` [PATCH v5 51/52] vdpa/mlx5: " Dengdui Huang
2024-11-04 11:10 ` [PATCH v5 52/52] vdpa/sfc: " Dengdui Huang
2024-11-04 18:23 ` [PATCH v5 00/52] replace strerror Stephen Hemminger
2024-11-06 18:57 ` [PATCH 00/43] " Stephen Hemminger
2024-11-07 2:52 ` huangdengdui
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20241104111037.3632161-46-huangdengdui@huawei.com \
--to=huangdengdui@huawei.com \
--cc=ajit.khaparde@broadcom.com \
--cc=david.marchand@redhat.com \
--cc=dev@dpdk.org \
--cc=fengchengwen@huawei.com \
--cc=ferruh.yigit@amd.com \
--cc=haijie1@huawei.com \
--cc=iboukris@gmail.com \
--cc=lihuisong@huawei.com \
--cc=liuyonglong@huawei.com \
--cc=mb@smartsharesystems.com \
--cc=stephen@networkplumber.org \
--cc=thomas@monjalon.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).