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>
---
 lib/bpf/bpf_load_elf.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/lib/bpf/bpf_load_elf.c b/lib/bpf/bpf_load_elf.c
index e0abd3c856..569a9f4446 100644
--- a/lib/bpf/bpf_load_elf.c
+++ b/lib/bpf/bpf_load_elf.c
@@ -300,6 +300,7 @@ rte_bpf_elf_load(const struct rte_bpf_prm *prm, const char 
*fname,
 {
        int32_t fd, rc;
        struct rte_bpf *bpf;
+       char errmsg[RTE_STRERR_BUFSIZE];
 
        if (prm == NULL || fname == NULL || sname == NULL) {
                rte_errno = EINVAL;
@@ -309,8 +310,10 @@ rte_bpf_elf_load(const struct rte_bpf_prm *prm, const char 
*fname,
        fd = open(fname, O_RDONLY);
        if (fd < 0) {
                rc = errno;
+               if (strerror_r(rc, errmsg, sizeof(errmsg)) != 0)
+                       snprintf(errmsg, sizeof(errmsg), "Unknown error %d", 
rc);
                RTE_BPF_LOG_LINE(ERR, "%s(%s) error code: %d(%s)",
-                       __func__, fname, rc, strerror(rc));
+                       __func__, fname, rc, errmsg);
                rte_errno = EINVAL;
                return NULL;
        }
-- 
2.33.0

Reply via email to