[v8] linuxapp, eal: Fix the memory leak issue of logid
Checks
Commit Message
From: Ziye Yang <optimistyzy@gmail.com>
This patch is used to fix the memory leak issue of logid.
We use the ASAN test in SPDK when intergrating DPDK and
find this memory leak issue.
Signed-off-by: Ziye Yang <ziye.yang@intel.com>
---
lib/librte_eal/linuxapp/eal/eal.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
Comments
On 9/12/2018 2:31 AM, Ziye Yang wrote:
> From: Ziye Yang <optimistyzy@gmail.com>
>
> This patch is used to fix the memory leak issue of logid.
> We use the ASAN test in SPDK when intergrating DPDK and
> find this memory leak issue.
>
> Signed-off-by: Ziye Yang <ziye.yang@intel.com>
Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
check-git-log.sh complains about commit log, it can be:
eal/linux: fix memory leak of logid
Also needs:
Fixes: d8a2bc71dfc2 ("log: remove app path from syslog id")
CC: stable@dpdk.org
12/09/2018 03:31, Ziye Yang:
> From: Ziye Yang <optimistyzy@gmail.com>
>
> This patch is used to fix the memory leak issue of logid.
> We use the ASAN test in SPDK when intergrating DPDK and
> find this memory leak issue.
>
> Signed-off-by: Ziye Yang <ziye.yang@intel.com>
> ---
> - logid = strrchr(argv[0], '/');
> - logid = strdup(logid ? logid + 1: argv[0]);
> -
> + p = strrchr(argv[0], '/');
> + snprintf(logid, sizeof(logid), "%s", (p ? p + 1 : argv[0]));
Shouldn't it be strlcpy instead of snprintf?
22/10/2018 10:00, Thomas Monjalon:
> 12/09/2018 03:31, Ziye Yang:
> > From: Ziye Yang <optimistyzy@gmail.com>
> >
> > This patch is used to fix the memory leak issue of logid.
> > We use the ASAN test in SPDK when intergrating DPDK and
> > find this memory leak issue.
> >
> > Signed-off-by: Ziye Yang <ziye.yang@intel.com>
> > ---
> > - logid = strrchr(argv[0], '/');
> > - logid = strdup(logid ? logid + 1: argv[0]);
> > -
> > + p = strrchr(argv[0], '/');
> > + snprintf(logid, sizeof(logid), "%s", (p ? p + 1 : argv[0]));
>
> Shouldn't it be strlcpy instead of snprintf?
Applied with suggested replacement:
- snprintf(logid, sizeof(logid), "%s", (p ? p + 1 : argv[0]));
+ strlcpy(logid, p ? p + 1 : argv[0], sizeof(logid));
@@ -793,7 +793,8 @@ static void rte_eal_init_alert(const char *msg)
int i, fctret, ret;
pthread_t thread_id;
static rte_atomic32_t run_once = RTE_ATOMIC32_INIT(0);
- const char *logid;
+ const char *p;
+ static char logid[PATH_MAX];
char cpuset[RTE_CPU_AFFINITY_STR_LEN];
char thread_name[RTE_MAX_THREAD_NAME_LEN];
@@ -810,9 +811,8 @@ static void rte_eal_init_alert(const char *msg)
return -1;
}
- logid = strrchr(argv[0], '/');
- logid = strdup(logid ? logid + 1: argv[0]);
-
+ p = strrchr(argv[0], '/');
+ snprintf(logid, sizeof(logid), "%s", (p ? p + 1 : argv[0]));
thread_id = pthread_self();
eal_reset_internal_config(&internal_config);