> -----Original Message-----
> From: David Marchand <[email protected]>
> Sent: Wednesday, September 21, 2022 5:34 PM
> To: [email protected]
> Cc: [email protected]; Jerin Jacob Kollanukkaran <[email protected]>; Sunil
> Kumar Kori <[email protected]>
> Subject: [EXT] [PATCH 3/8] trace: fix leak with regexp
>
> External Email
>
> ----------------------------------------------------------------------
> The precompiled buffer initialised in regcomp must be freed before leaving
> rte_trace_regexp.
>
> Fixes: 84c4fae4628f ("trace: implement operation APIs")
> Cc: [email protected]
>
> Signed-off-by: David Marchand <[email protected]>
> ---
> lib/eal/common/eal_common_trace.c | 19 +++++++++++--------
> 1 file changed, 11 insertions(+), 8 deletions(-)
>
> diff --git a/lib/eal/common/eal_common_trace.c
> b/lib/eal/common/eal_common_trace.c
> index 1db28a441d..c835b0d16e 100644
> --- a/lib/eal/common/eal_common_trace.c
> +++ b/lib/eal/common/eal_common_trace.c
> @@ -210,15 +210,18 @@ rte_trace_regexp(const char *regex, bool enable)
> return -EINVAL;
>
> STAILQ_FOREACH(tp, &tp_list, next) {
> - if (regexec(&r, tp->name, 0, NULL, 0) == 0) {
> - if (enable)
> - rc = rte_trace_point_enable(tp->handle);
> - else
> - rc = rte_trace_point_disable(tp->handle);
> - found = 1;
> + if (regexec(&r, tp->name, 0, NULL, 0) != 0)
> + continue;
> +
> + if (enable)
> + rc = rte_trace_point_enable(tp->handle);
> + else
> + rc = rte_trace_point_disable(tp->handle);
> + if (rc < 0) {
> + found = 0;
> + break;
> }
> - if (rc < 0)
> - return rc;
> + found = 1;
> }
> regfree(&r);
>
> --
I understand the problem addressed by this fix but may be following changes
will be sufficient to fix it.
Please highlight, If I am missing. Just trying to reduce the line of changes.
@@ -220,8 +220,10 @@ rte_trace_regexp(const char *regex, bool enable)
rc = rte_trace_point_disable(tp->handle);
found = 1;
}
- if (rc < 0)
- return rc;
+ if (rc < 0) {
+ found = 0;
+ break;
+ }
}
> 2.37.3