[v5,29/52] net/dpaa: replace strerror with reentrant version

Message ID 20241104111037.3632161-30-huangdengdui@huawei.com (mailing list archive)
State Superseded, archived
Delegated to: Thomas Monjalon
Headers
Series replace strerror |

Checks

Context Check Description
ci/checkpatch success coding style OK

Commit Message

huangdengdui Nov. 4, 2024, 11:10 a.m. UTC
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/dpaa/dpaa_ethdev.c  | 10 ++++++++--
 drivers/net/dpaa/fmlib/fm_lib.c | 15 ++++++++++++---
 2 files changed, 20 insertions(+), 5 deletions(-)
  

Patch

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);
 	}