* [dpdk-dev] [PATCH] eal: fix resource leak @ 2017-09-19 13:34 Daniel Mrzyglod 2017-09-22 14:48 ` [dpdk-dev] [PATCH v2] " Daniel Mrzyglod 0 siblings, 1 reply; 7+ messages in thread From: Daniel Mrzyglod @ 2017-09-19 13:34 UTC (permalink / raw) To: thomas; +Cc: dev, Daniel Mrzyglod Memory allocated in strdup is not free. Coverity issue: 143257 Fixes: d8a2bc71dfc2 ("log: remove app path from syslog id") Cc: thomas@monjalon.net Signed-off-by: Daniel Mrzyglod <danielx.t.mrzyglod@intel.com> --- lib/librte_eal/linuxapp/eal/eal.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/lib/librte_eal/linuxapp/eal/eal.c b/lib/librte_eal/linuxapp/eal/eal.c index 48f12f4..1bdbc3f 100644 --- a/lib/librte_eal/linuxapp/eal/eal.c +++ b/lib/librte_eal/linuxapp/eal/eal.c @@ -781,6 +781,7 @@ rte_eal_init(int argc, char **argv) if (rte_eal_cpu_init() < 0) { rte_eal_init_alert("Cannot detect lcores."); rte_errno = ENOTSUP; + free(logid); return -1; } @@ -789,6 +790,7 @@ rte_eal_init(int argc, char **argv) rte_eal_init_alert("Invalid 'command line' arguments."); rte_errno = EINVAL; rte_atomic32_clear(&run_once); + free(logid); return -1; } @@ -799,6 +801,7 @@ rte_eal_init(int argc, char **argv) rte_eal_init_alert("Cannot get hugepage information."); rte_errno = EACCES; rte_atomic32_clear(&run_once); + free(logid); return -1; } @@ -826,6 +829,7 @@ rte_eal_init(int argc, char **argv) rte_eal_init_alert("Cannot init logging."); rte_errno = ENOMEM; rte_atomic32_clear(&run_once); + free(logid); return -1; } @@ -834,6 +838,7 @@ rte_eal_init(int argc, char **argv) rte_eal_init_alert("Cannot init VFIO\n"); rte_errno = EAGAIN; rte_atomic32_clear(&run_once); + free(logid); return -1; } #endif @@ -841,6 +846,7 @@ rte_eal_init(int argc, char **argv) if (rte_eal_memory_init() < 0) { rte_eal_init_alert("Cannot init memory\n"); rte_errno = ENOMEM; + free(logid); return -1; } @@ -850,24 +856,28 @@ rte_eal_init(int argc, char **argv) if (rte_eal_memzone_init() < 0) { rte_eal_init_alert("Cannot init memzone\n"); rte_errno = ENODEV; + free(logid); return -1; } if (rte_eal_tailqs_init() < 0) { rte_eal_init_alert("Cannot init tail queues for objects\n"); rte_errno = EFAULT; + free(logid); return -1; } if (rte_eal_alarm_init() < 0) { rte_eal_init_alert("Cannot init interrupt-handling thread\n"); /* rte_eal_alarm_init sets rte_errno on failure. */ + free(logid); return -1; } if (rte_eal_timer_init() < 0) { rte_eal_init_alert("Cannot init HPET or TSC timers\n"); rte_errno = ENOTSUP; + free(logid); return -1; } @@ -886,17 +896,20 @@ rte_eal_init(int argc, char **argv) if (rte_eal_intr_init() < 0) { rte_eal_init_alert("Cannot init interrupt-handling thread\n"); + free(logid); return -1; } if (eal_option_device_parse()) { rte_errno = ENODEV; + free(logid); return -1; } if (rte_bus_scan()) { rte_eal_init_alert("Cannot scan the buses for devices\n"); rte_errno = ENODEV; + free(logid); return -1; } @@ -941,6 +954,7 @@ rte_eal_init(int argc, char **argv) if (ret) { rte_eal_init_alert("rte_service_init() failed\n"); rte_errno = ENOEXEC; + free(logid); return -1; } @@ -948,6 +962,7 @@ rte_eal_init(int argc, char **argv) if (rte_bus_probe()) { rte_eal_init_alert("Cannot probe devices\n"); rte_errno = ENOTSUP; + free(logid); return -1; } @@ -957,6 +972,7 @@ rte_eal_init(int argc, char **argv) ret = rte_service_start_with_defaults(); if (ret < 0 && ret != -ENOTSUP) { rte_errno = ENOEXEC; + free(logid); return -1; } -- 2.7.4 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [dpdk-dev] [PATCH v2] eal: fix resource leak 2017-09-19 13:34 [dpdk-dev] [PATCH] eal: fix resource leak Daniel Mrzyglod @ 2017-09-22 14:48 ` Daniel Mrzyglod 2017-10-02 14:16 ` Jastrzebski, MichalX K ` (2 more replies) 0 siblings, 3 replies; 7+ messages in thread From: Daniel Mrzyglod @ 2017-09-22 14:48 UTC (permalink / raw) To: thomas; +Cc: dev, Daniel Mrzyglod Memory allocated in strdup is not free. Coverity issue: 143257 Fixes: d8a2bc71dfc2 ("log: remove app path from syslog id") Cc: thomas@monjalon.net Signed-off-by: Daniel Mrzyglod <danielx.t.mrzyglod@intel.com> --- v2: * Fix due to compilation errors lib/librte_eal/linuxapp/eal/eal.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/lib/librte_eal/linuxapp/eal/eal.c b/lib/librte_eal/linuxapp/eal/eal.c index 48f12f4..a7df566 100644 --- a/lib/librte_eal/linuxapp/eal/eal.c +++ b/lib/librte_eal/linuxapp/eal/eal.c @@ -751,7 +751,7 @@ rte_eal_init(int argc, char **argv) int i, fctret, ret; pthread_t thread_id; static rte_atomic32_t run_once = RTE_ATOMIC32_INIT(0); - const char *logid; + char *logid; char cpuset[RTE_CPU_AFFINITY_STR_LEN]; char thread_name[RTE_MAX_THREAD_NAME_LEN]; @@ -781,6 +781,7 @@ rte_eal_init(int argc, char **argv) if (rte_eal_cpu_init() < 0) { rte_eal_init_alert("Cannot detect lcores."); rte_errno = ENOTSUP; + free(logid); return -1; } @@ -789,6 +790,7 @@ rte_eal_init(int argc, char **argv) rte_eal_init_alert("Invalid 'command line' arguments."); rte_errno = EINVAL; rte_atomic32_clear(&run_once); + free(logid); return -1; } @@ -799,6 +801,7 @@ rte_eal_init(int argc, char **argv) rte_eal_init_alert("Cannot get hugepage information."); rte_errno = EACCES; rte_atomic32_clear(&run_once); + free(logid); return -1; } @@ -826,6 +829,7 @@ rte_eal_init(int argc, char **argv) rte_eal_init_alert("Cannot init logging."); rte_errno = ENOMEM; rte_atomic32_clear(&run_once); + free(logid); return -1; } @@ -834,6 +838,7 @@ rte_eal_init(int argc, char **argv) rte_eal_init_alert("Cannot init VFIO\n"); rte_errno = EAGAIN; rte_atomic32_clear(&run_once); + free(logid); return -1; } #endif @@ -841,6 +846,7 @@ rte_eal_init(int argc, char **argv) if (rte_eal_memory_init() < 0) { rte_eal_init_alert("Cannot init memory\n"); rte_errno = ENOMEM; + free(logid); return -1; } @@ -850,24 +856,28 @@ rte_eal_init(int argc, char **argv) if (rte_eal_memzone_init() < 0) { rte_eal_init_alert("Cannot init memzone\n"); rte_errno = ENODEV; + free(logid); return -1; } if (rte_eal_tailqs_init() < 0) { rte_eal_init_alert("Cannot init tail queues for objects\n"); rte_errno = EFAULT; + free(logid); return -1; } if (rte_eal_alarm_init() < 0) { rte_eal_init_alert("Cannot init interrupt-handling thread\n"); /* rte_eal_alarm_init sets rte_errno on failure. */ + free(logid); return -1; } if (rte_eal_timer_init() < 0) { rte_eal_init_alert("Cannot init HPET or TSC timers\n"); rte_errno = ENOTSUP; + free(logid); return -1; } @@ -886,17 +896,20 @@ rte_eal_init(int argc, char **argv) if (rte_eal_intr_init() < 0) { rte_eal_init_alert("Cannot init interrupt-handling thread\n"); + free(logid); return -1; } if (eal_option_device_parse()) { rte_errno = ENODEV; + free(logid); return -1; } if (rte_bus_scan()) { rte_eal_init_alert("Cannot scan the buses for devices\n"); rte_errno = ENODEV; + free(logid); return -1; } @@ -941,6 +954,7 @@ rte_eal_init(int argc, char **argv) if (ret) { rte_eal_init_alert("rte_service_init() failed\n"); rte_errno = ENOEXEC; + free(logid); return -1; } @@ -948,6 +962,7 @@ rte_eal_init(int argc, char **argv) if (rte_bus_probe()) { rte_eal_init_alert("Cannot probe devices\n"); rte_errno = ENOTSUP; + free(logid); return -1; } @@ -957,6 +972,7 @@ rte_eal_init(int argc, char **argv) ret = rte_service_start_with_defaults(); if (ret < 0 && ret != -ENOTSUP) { rte_errno = ENOEXEC; + free(logid); return -1; } -- 2.7.4 ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [dpdk-dev] [PATCH v2] eal: fix resource leak 2017-09-22 14:48 ` [dpdk-dev] [PATCH v2] " Daniel Mrzyglod @ 2017-10-02 14:16 ` Jastrzebski, MichalX K 2017-10-04 19:24 ` Ferruh Yigit 2017-10-11 11:53 ` [dpdk-dev] [PATCH v3] " Daniel Mrzyglod 2 siblings, 0 replies; 7+ messages in thread From: Jastrzebski, MichalX K @ 2017-10-02 14:16 UTC (permalink / raw) To: Mrzyglod, DanielX T, thomas; +Cc: dev, Mrzyglod, DanielX T > -----Original Message----- > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Daniel Mrzyglod > Sent: Friday, September 22, 2017 4:48 PM > To: thomas@monjalon.net > Cc: dev@dpdk.org; Mrzyglod, DanielX T <danielx.t.mrzyglod@intel.com> > Subject: [dpdk-dev] [PATCH v2] eal: fix resource leak > > Memory allocated in strdup is not free. > > Coverity issue: 143257 > Fixes: d8a2bc71dfc2 ("log: remove app path from syslog id") > Cc: thomas@monjalon.net > > Signed-off-by: Daniel Mrzyglod <danielx.t.mrzyglod@intel.com> > --- > v2: > * Fix due to compilation errors > > lib/librte_eal/linuxapp/eal/eal.c | 18 +++++++++++++++++- > 1 file changed, 17 insertions(+), 1 deletion(-) > > diff --git a/lib/librte_eal/linuxapp/eal/eal.c > b/lib/librte_eal/linuxapp/eal/eal.c > index 48f12f4..a7df566 100644 > --- a/lib/librte_eal/linuxapp/eal/eal.c > +++ b/lib/librte_eal/linuxapp/eal/eal.c > @@ -751,7 +751,7 @@ rte_eal_init(int argc, char **argv) > int i, fctret, ret; > pthread_t thread_id; > static rte_atomic32_t run_once = RTE_ATOMIC32_INIT(0); > - const char *logid; > + char *logid; > char cpuset[RTE_CPU_AFFINITY_STR_LEN]; > char thread_name[RTE_MAX_THREAD_NAME_LEN]; > > @@ -781,6 +781,7 @@ rte_eal_init(int argc, char **argv) > if (rte_eal_cpu_init() < 0) { > rte_eal_init_alert("Cannot detect lcores."); > rte_errno = ENOTSUP; > + free(logid); > return -1; > } > > @@ -789,6 +790,7 @@ rte_eal_init(int argc, char **argv) > rte_eal_init_alert("Invalid 'command line' arguments."); > rte_errno = EINVAL; > rte_atomic32_clear(&run_once); > + free(logid); > return -1; > } > > @@ -799,6 +801,7 @@ rte_eal_init(int argc, char **argv) > rte_eal_init_alert("Cannot get hugepage information."); > rte_errno = EACCES; > rte_atomic32_clear(&run_once); > + free(logid); > return -1; > } > > @@ -826,6 +829,7 @@ rte_eal_init(int argc, char **argv) > rte_eal_init_alert("Cannot init logging."); > rte_errno = ENOMEM; > rte_atomic32_clear(&run_once); > + free(logid); > return -1; > } > > @@ -834,6 +838,7 @@ rte_eal_init(int argc, char **argv) > rte_eal_init_alert("Cannot init VFIO\n"); > rte_errno = EAGAIN; > rte_atomic32_clear(&run_once); > + free(logid); > return -1; > } > #endif > @@ -841,6 +846,7 @@ rte_eal_init(int argc, char **argv) > if (rte_eal_memory_init() < 0) { > rte_eal_init_alert("Cannot init memory\n"); > rte_errno = ENOMEM; > + free(logid); > return -1; > } > > @@ -850,24 +856,28 @@ rte_eal_init(int argc, char **argv) > if (rte_eal_memzone_init() < 0) { > rte_eal_init_alert("Cannot init memzone\n"); > rte_errno = ENODEV; > + free(logid); > return -1; > } > > if (rte_eal_tailqs_init() < 0) { > rte_eal_init_alert("Cannot init tail queues for objects\n"); > rte_errno = EFAULT; > + free(logid); > return -1; > } > > if (rte_eal_alarm_init() < 0) { > rte_eal_init_alert("Cannot init interrupt-handling > thread\n"); > /* rte_eal_alarm_init sets rte_errno on failure. */ > + free(logid); > return -1; > } > > if (rte_eal_timer_init() < 0) { > rte_eal_init_alert("Cannot init HPET or TSC timers\n"); > rte_errno = ENOTSUP; > + free(logid); > return -1; > } > > @@ -886,17 +896,20 @@ rte_eal_init(int argc, char **argv) > > if (rte_eal_intr_init() < 0) { > rte_eal_init_alert("Cannot init interrupt-handling > thread\n"); > + free(logid); > return -1; > } > > if (eal_option_device_parse()) { > rte_errno = ENODEV; > + free(logid); > return -1; > } > > if (rte_bus_scan()) { > rte_eal_init_alert("Cannot scan the buses for devices\n"); > rte_errno = ENODEV; > + free(logid); > return -1; > } > > @@ -941,6 +954,7 @@ rte_eal_init(int argc, char **argv) > if (ret) { > rte_eal_init_alert("rte_service_init() failed\n"); > rte_errno = ENOEXEC; > + free(logid); > return -1; > } > > @@ -948,6 +962,7 @@ rte_eal_init(int argc, char **argv) > if (rte_bus_probe()) { > rte_eal_init_alert("Cannot probe devices\n"); > rte_errno = ENOTSUP; > + free(logid); > return -1; > } > > @@ -957,6 +972,7 @@ rte_eal_init(int argc, char **argv) > ret = rte_service_start_with_defaults(); > if (ret < 0 && ret != -ENOTSUP) { > rte_errno = ENOEXEC; > + free(logid); > return -1; > } > > -- > 2.7.4 Hi Thomas, I would like to ask for a feedback regarding proposed fix. If everything is ok with it, please send acked-by. Best regards Michal. ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [dpdk-dev] [PATCH v2] eal: fix resource leak 2017-09-22 14:48 ` [dpdk-dev] [PATCH v2] " Daniel Mrzyglod 2017-10-02 14:16 ` Jastrzebski, MichalX K @ 2017-10-04 19:24 ` Ferruh Yigit 2017-10-05 22:33 ` Thomas Monjalon 2017-10-11 11:53 ` [dpdk-dev] [PATCH v3] " Daniel Mrzyglod 2 siblings, 1 reply; 7+ messages in thread From: Ferruh Yigit @ 2017-10-04 19:24 UTC (permalink / raw) To: Daniel Mrzyglod, thomas; +Cc: dev On 9/22/2017 3:48 PM, Daniel Mrzyglod wrote: > Memory allocated in strdup is not free. > > Coverity issue: 143257 > Fixes: d8a2bc71dfc2 ("log: remove app path from syslog id") > Cc: thomas@monjalon.net > > Signed-off-by: Daniel Mrzyglod <danielx.t.mrzyglod@intel.com> > --- > v2: > * Fix due to compilation errors > > lib/librte_eal/linuxapp/eal/eal.c | 18 +++++++++++++++++- > 1 file changed, 17 insertions(+), 1 deletion(-) > > diff --git a/lib/librte_eal/linuxapp/eal/eal.c b/lib/librte_eal/linuxapp/eal/eal.c > index 48f12f4..a7df566 100644 > --- a/lib/librte_eal/linuxapp/eal/eal.c > +++ b/lib/librte_eal/linuxapp/eal/eal.c > @@ -751,7 +751,7 @@ rte_eal_init(int argc, char **argv) > int i, fctret, ret; > pthread_t thread_id; > static rte_atomic32_t run_once = RTE_ATOMIC32_INIT(0); > - const char *logid; > + char *logid; > char cpuset[RTE_CPU_AFFINITY_STR_LEN]; > char thread_name[RTE_MAX_THREAD_NAME_LEN]; > > @@ -781,6 +781,7 @@ rte_eal_init(int argc, char **argv) > if (rte_eal_cpu_init() < 0) { > rte_eal_init_alert("Cannot detect lcores."); > rte_errno = ENOTSUP; > + free(logid); Hi Daniel, This works but this variable is a nuance and adding free() for this it into main eal features fail path looks like noise. Initially, do we need to strdup this variable at all? What will happen if logid fed into rte_eal_log_init() without strdup? Since it is const char *, I guess the string is just for read and content won't be changed so it should be OK I guess. If above is not right, what about creating a static variable and use it instead of dynamically allocating the logid, what do you think? Thanks, ferruh > return -1; > } > > @@ -789,6 +790,7 @@ rte_eal_init(int argc, char **argv) > rte_eal_init_alert("Invalid 'command line' arguments."); > rte_errno = EINVAL; > rte_atomic32_clear(&run_once); > + free(logid); > return -1; > } > <...> ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [dpdk-dev] [PATCH v2] eal: fix resource leak 2017-10-04 19:24 ` Ferruh Yigit @ 2017-10-05 22:33 ` Thomas Monjalon 0 siblings, 0 replies; 7+ messages in thread From: Thomas Monjalon @ 2017-10-05 22:33 UTC (permalink / raw) To: Ferruh Yigit, Daniel Mrzyglod; +Cc: dev 04/10/2017 21:24, Ferruh Yigit: > On 9/22/2017 3:48 PM, Daniel Mrzyglod wrote: > > Memory allocated in strdup is not free. > > > > Coverity issue: 143257 > > Fixes: d8a2bc71dfc2 ("log: remove app path from syslog id") > > Cc: thomas@monjalon.net > > > > Signed-off-by: Daniel Mrzyglod <danielx.t.mrzyglod@intel.com> > > --- > This works but this variable is a nuance and adding free() for this it > into main eal features fail path looks like noise. > > Initially, do we need to strdup this variable at all? > What will happen if logid fed into rte_eal_log_init() without strdup? > Since it is const char *, I guess the string is just for read and > content won't be changed so it should be OK I guess. > > If above is not right, what about creating a static variable and use it > instead of dynamically allocating the logid, what do you think? Good proposal Ferruh. It seems strdup is not needed as it is basically argv[0]. ^ permalink raw reply [flat|nested] 7+ messages in thread
* [dpdk-dev] [PATCH v3] eal: fix resource leak 2017-09-22 14:48 ` [dpdk-dev] [PATCH v2] " Daniel Mrzyglod 2017-10-02 14:16 ` Jastrzebski, MichalX K 2017-10-04 19:24 ` Ferruh Yigit @ 2017-10-11 11:53 ` Daniel Mrzyglod 2017-10-11 12:43 ` [dpdk-dev] [dpdk-stable] " Thomas Monjalon 2 siblings, 1 reply; 7+ messages in thread From: Daniel Mrzyglod @ 2017-10-11 11:53 UTC (permalink / raw) To: thomas; +Cc: dev, Daniel Mrzyglod, stable Memory allocated in strdup is not free. Coverity issue: 143257 Fixes: d8a2bc71dfc2 ("log: remove app path from syslog id") Cc: thomas@monjalon.net Cc: stable@dpdk.org Signed-off-by: Daniel Mrzyglod <danielx.t.mrzyglod@intel.com> --- v3: * remove strdup because it's basically striped argv[0] v2: * Fix due to compilation errors lib/librte_eal/linuxapp/eal/eal.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/librte_eal/linuxapp/eal/eal.c b/lib/librte_eal/linuxapp/eal/eal.c index 1f07347..739b61a 100644 --- a/lib/librte_eal/linuxapp/eal/eal.c +++ b/lib/librte_eal/linuxapp/eal/eal.c @@ -763,7 +763,7 @@ rte_eal_init(int argc, char **argv) } logid = strrchr(argv[0], '/'); - logid = strdup(logid ? logid + 1: argv[0]); + logid = logid ? logid + 1 : argv[0]; thread_id = pthread_self(); -- 2.7.4 ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [dpdk-dev] [dpdk-stable] [PATCH v3] eal: fix resource leak 2017-10-11 11:53 ` [dpdk-dev] [PATCH v3] " Daniel Mrzyglod @ 2017-10-11 12:43 ` Thomas Monjalon 0 siblings, 0 replies; 7+ messages in thread From: Thomas Monjalon @ 2017-10-11 12:43 UTC (permalink / raw) To: Daniel Mrzyglod; +Cc: stable, dev 11/10/2017 13:53, Daniel Mrzyglod: > Memory allocated in strdup is not free. > > Coverity issue: 143257 > Fixes: d8a2bc71dfc2 ("log: remove app path from syslog id") > Cc: thomas@monjalon.net > Cc: stable@dpdk.org > > Signed-off-by: Daniel Mrzyglod <danielx.t.mrzyglod@intel.com> Given this recent commit: http://dpdk.org/commit/e3f141879ef I think we should consider this issue as a false positive. The arguments given to rte_eal_init may be freed. So it's better to strdup them, even if it is never freed. ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2017-10-11 12:43 UTC | newest] Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2017-09-19 13:34 [dpdk-dev] [PATCH] eal: fix resource leak Daniel Mrzyglod 2017-09-22 14:48 ` [dpdk-dev] [PATCH v2] " Daniel Mrzyglod 2017-10-02 14:16 ` Jastrzebski, MichalX K 2017-10-04 19:24 ` Ferruh Yigit 2017-10-05 22:33 ` Thomas Monjalon 2017-10-11 11:53 ` [dpdk-dev] [PATCH v3] " Daniel Mrzyglod 2017-10-11 12:43 ` [dpdk-dev] [dpdk-stable] " Thomas Monjalon
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).