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

Signed-off-by: Dengdui Huang <huangdeng...@huawei.com>
Acked-by: Chengwen Feng <fengcheng...@huawei.com>
Acked-by: Morten Brørup <m...@smartsharesystems.com>
Acked-by: Huisong Li <lihuis...@huawei.com>
---
 drivers/net/ixgbe/ixgbe_testpmd.c | 30 ++++++++++++++++++++++++------
 1 file changed, 24 insertions(+), 6 deletions(-)

diff --git a/drivers/net/ixgbe/ixgbe_testpmd.c 
b/drivers/net/ixgbe/ixgbe_testpmd.c
index e0d161eafe..d019a0d6fd 100644
--- a/drivers/net/ixgbe/ixgbe_testpmd.c
+++ b/drivers/net/ixgbe/ixgbe_testpmd.c
@@ -122,6 +122,7 @@ cmd_set_vf_split_drop_en_parsed(void *parsed_result,
        struct cmd_vf_split_drop_en_result *res = parsed_result;
        int ret = -ENOTSUP;
        int is_on = (strcmp(res->on_off, "on") == 0) ? 1 : 0;
+       char errmsg[RTE_STRERR_BUFSIZE];
 
        if (port_id_is_invalid(res->port_id, ENABLED_WARN))
                return;
@@ -141,7 +142,9 @@ cmd_set_vf_split_drop_en_parsed(void *parsed_result,
                fprintf(stderr, "not supported on port %d\n", res->port_id);
                break;
        default:
-               fprintf(stderr, "programming error: (%s)\n", strerror(-ret));
+               if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0)
+                       snprintf(errmsg, sizeof(errmsg), "Unknown error %d", 
-ret);
+               fprintf(stderr, "programming error: (%s)\n", errmsg);
        }
 }
 
@@ -215,6 +218,7 @@ cmd_set_macsec_offload_on_parsed(void *parsed_result,
        int en = (strcmp(res->en_on_off, "on") == 0) ? 1 : 0;
        int rp = (strcmp(res->rp_on_off, "on") == 0) ? 1 : 0;
        struct rte_eth_dev_info dev_info;
+       char errmsg[RTE_STRERR_BUFSIZE];
 
        if (port_id_is_invalid(port_id, ENABLED_WARN))
                return;
@@ -243,7 +247,9 @@ cmd_set_macsec_offload_on_parsed(void *parsed_result,
                fprintf(stderr, "not supported on port %d\n", port_id);
                break;
        default:
-               fprintf(stderr, "programming error: (%s)\n", strerror(-ret));
+               if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0)
+                       snprintf(errmsg, sizeof(errmsg), "Unknown error %d", 
-ret);
+               fprintf(stderr, "programming error: (%s)\n", errmsg);
        }
 }
 
@@ -300,6 +306,7 @@ cmd_set_macsec_offload_off_parsed(void *parsed_result,
        int ret = -ENOTSUP;
        struct rte_eth_dev_info dev_info;
        portid_t port_id = res->port_id;
+       char errmsg[RTE_STRERR_BUFSIZE];
 
        if (port_id_is_invalid(port_id, ENABLED_WARN))
                return;
@@ -327,7 +334,9 @@ cmd_set_macsec_offload_off_parsed(void *parsed_result,
                fprintf(stderr, "not supported on port %d\n", port_id);
                break;
        default:
-               fprintf(stderr, "programming error: (%s)\n", strerror(-ret));
+               if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0)
+                       snprintf(errmsg, sizeof(errmsg), "Unknown error %d", 
-ret);
+               fprintf(stderr, "programming error: (%s)\n", errmsg);
        }
 }
 
@@ -386,6 +395,7 @@ cmd_set_macsec_sc_parsed(void *parsed_result,
        struct cmd_macsec_sc_result *res = parsed_result;
        int ret = -ENOTSUP;
        int is_tx = (strcmp(res->tx_rx, "tx") == 0) ? 1 : 0;
+       char errmsg[RTE_STRERR_BUFSIZE];
 
        ret = is_tx ?
                rte_pmd_ixgbe_macsec_config_txsc(res->port_id,
@@ -402,7 +412,9 @@ cmd_set_macsec_sc_parsed(void *parsed_result,
                fprintf(stderr, "not supported on port %d\n", res->port_id);
                break;
        default:
-               fprintf(stderr, "programming error: (%s)\n", strerror(-ret));
+               if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0)
+                       snprintf(errmsg, sizeof(errmsg), "Unknown error %d", 
-ret);
+               fprintf(stderr, "programming error: (%s)\n", errmsg);
        }
 }
 
@@ -471,6 +483,7 @@ cmd_set_macsec_sa_parsed(void *parsed_result,
        struct cmd_macsec_sa_result *res = parsed_result;
        int ret = -ENOTSUP;
        int is_tx = (strcmp(res->tx_rx, "tx") == 0) ? 1 : 0;
+       char errmsg[RTE_STRERR_BUFSIZE];
        uint8_t key[16] = { 0 };
        uint8_t xdgt0;
        uint8_t xdgt1;
@@ -510,7 +523,9 @@ cmd_set_macsec_sa_parsed(void *parsed_result,
                fprintf(stderr, "not supported on port %d\n", res->port_id);
                break;
        default:
-               fprintf(stderr, "programming error: (%s)\n", strerror(-ret));
+               if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0)
+                       snprintf(errmsg, sizeof(errmsg), "Unknown error %d", 
-ret);
+               fprintf(stderr, "programming error: (%s)\n", errmsg);
        }
 }
 
@@ -565,6 +580,7 @@ cmd_tc_min_bw_parsed(void *parsed_result,
        __rte_unused struct cmdline *cl, __rte_unused void *data)
 {
        struct cmd_vf_tc_bw_result *res = parsed_result;
+       char errmsg[RTE_STRERR_BUFSIZE];
        struct rte_port *port;
        uint8_t tc_num;
        uint8_t bw[16];
@@ -599,7 +615,9 @@ cmd_tc_min_bw_parsed(void *parsed_result,
                fprintf(stderr, "function not implemented\n");
                break;
        default:
-               fprintf(stderr, "programming error: (%s)\n", strerror(-ret));
+               if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0)
+                       snprintf(errmsg, sizeof(errmsg), "Unknown error %d", 
-ret);
+               fprintf(stderr, "programming error: (%s)\n", errmsg);
        }
 }
 
-- 
2.33.0

Reply via email to