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/dpaa/dpaa_ethdev.c  | 10 ++++++++--
 drivers/net/dpaa/fmlib/fm_lib.c | 15 ++++++++++++---
 2 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/drivers/net/dpaa/dpaa_ethdev.c b/drivers/net/dpaa/dpaa_ethdev.c
index e8d34e5898..0bdd5458e2 100644
--- a/drivers/net/dpaa/dpaa_ethdev.c
+++ b/drivers/net/dpaa/dpaa_ethdev.c
@@ -1075,6 +1075,7 @@ int dpaa_eth_rx_queue_setup(struct rte_eth_dev *dev, 
uint16_t queue_idx,
        struct fman_if *fif = dev->process_private;
        struct qman_fq *rxq = &dpaa_intf->rx_queues[queue_idx];
        struct qm_mcc_initfq opts = {0};
+       char errmsg[RTE_STRERR_BUFSIZE];
        u32 ch_id, flags = 0;
        int ret;
        u32 buffsz = rte_pktmbuf_data_room_size(mp) - RTE_PKTMBUF_HEADROOM;
@@ -1217,8 +1218,10 @@ int dpaa_eth_rx_queue_setup(struct rte_eth_dev *dev, 
uint16_t queue_idx,
                }
                ret = qman_init_fq(rxq, flags, &opts);
                if (ret) {
+                       if (strerror_r(ret, errmsg, sizeof(errmsg)) != 0)
+                               snprintf(errmsg, sizeof(errmsg), "Unknown error 
%d", ret);
                        DPAA_PMD_ERR("Channel/Q association failed. fqid 0x%x "
-                               "ret:%d(%s)", rxq->fqid, ret, strerror(ret));
+                               "ret:%d(%s)", rxq->fqid, ret, errmsg);
                        return ret;
                }
                if (dpaa_svr_family == SVR_LS1043A_FAMILY) {
@@ -1310,6 +1313,7 @@ dpaa_eth_eventq_attach(const struct rte_eth_dev *dev,
        struct dpaa_if *dpaa_intf = dev->data->dev_private;
        struct qman_fq *rxq = &dpaa_intf->rx_queues[eth_rx_queue_id];
        struct qm_mcc_initfq opts = {0};
+       char errmsg[RTE_STRERR_BUFSIZE];
 
        if (dpaa_push_mode_max_queue) {
                DPAA_PMD_WARN("PUSH mode q and EVENTDEV are not compatible");
@@ -1352,8 +1356,10 @@ dpaa_eth_eventq_attach(const struct rte_eth_dev *dev,
 
        ret = qman_init_fq(rxq, flags, &opts);
        if (ret) {
+               if (strerror_r(ret, errmsg, sizeof(errmsg)) != 0)
+                       snprintf(errmsg, sizeof(errmsg), "Unknown error %d", 
ret);
                DPAA_PMD_ERR("Ev-Channel/Q association failed. fqid 0x%x "
-                               "ret:%d(%s)", rxq->fqid, ret, strerror(ret));
+                               "ret:%d(%s)", rxq->fqid, ret, errmsg);
                return ret;
        }
 
diff --git a/drivers/net/dpaa/fmlib/fm_lib.c b/drivers/net/dpaa/fmlib/fm_lib.c
index b35feba004..347d24906a 100644
--- a/drivers/net/dpaa/fmlib/fm_lib.c
+++ b/drivers/net/dpaa/fmlib/fm_lib.c
@@ -96,14 +96,17 @@ uint32_t
 fm_get_api_version(t_handle h_fm, ioc_fm_api_version_t *p_version)
 {
        t_device *p_dev = (t_device *)h_fm;
+       char errmsg[RTE_STRERR_BUFSIZE];
        int ret;
 
        _fml_dbg("Calling...");
 
        ret = ioctl(p_dev->fd, FM_IOC_GET_API_VERSION, p_version);
        if (ret) {
+               if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0)
+                       snprintf(errmsg, sizeof(errmsg), "Unknown error %d", 
errno);
                DPAA_PMD_ERR("cannot get API version, error %i (%s)",
-                            errno, strerror(errno));
+                            errno, errmsg);
                RETURN_ERROR(MINOR, E_INVALID_OPERATION, NO_MSG);
        }
        _fml_dbg("Finishing.");
@@ -250,6 +253,7 @@ fm_pcd_kg_scheme_set(t_handle h_fm_pcd,
                     ioc_fm_pcd_kg_scheme_params_t *params)
 {
        t_device *p_pcd_dev = (t_device *)h_fm_pcd;
+       char errmsg[RTE_STRERR_BUFSIZE];
        t_device *p_dev = NULL;
        int ret;
 
@@ -275,8 +279,10 @@ fm_pcd_kg_scheme_set(t_handle h_fm_pcd,
 
        ret = ioctl(p_pcd_dev->fd, FM_PCD_IOC_KG_SCHEME_SET, params);
        if (ret) {
+               if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0)
+                       snprintf(errmsg, sizeof(errmsg), "Unknown error %d", 
errno);
                DPAA_PMD_ERR("  cannot set kg scheme, error %i (%s)",
-                            errno, strerror(errno));
+                            errno, errmsg);
                return NULL;
        }
 
@@ -300,6 +306,7 @@ uint32_t
 fm_pcd_kg_scheme_delete(t_handle h_scheme)
 {
        t_device *p_dev = (t_device *)h_scheme;
+       char errmsg[RTE_STRERR_BUFSIZE];
        t_device *p_pcd_dev = NULL;
        ioc_fm_obj_t id;
 
@@ -309,8 +316,10 @@ fm_pcd_kg_scheme_delete(t_handle h_scheme)
        id.obj = UINT_TO_PTR(p_dev->id);
 
        if (ioctl(p_pcd_dev->fd, FM_PCD_IOC_KG_SCHEME_DELETE, &id)) {
+               if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0)
+                       snprintf(errmsg, sizeof(errmsg), "Unknown error %d", 
errno);
                DPAA_PMD_WARN("cannot delete kg scheme, error %i (%s)",
-                             errno, strerror(errno));
+                             errno, errmsg);
                RETURN_ERROR(MINOR, E_INVALID_OPERATION, NO_MSG);
        }
 
-- 
2.33.0

Reply via email to