> -----Original Message-----
> From: David Marchand <david.march...@redhat.com>
> Sent: Wednesday, September 21, 2022 5:34 PM
> To: dev@dpdk.org
> Cc: sta...@dpdk.org; Jerin Jacob Kollanukkaran <jer...@marvell.com>; Sunil
> Kumar Kori <sk...@marvell.com>
> 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: sta...@dpdk.org
> 
> Signed-off-by: David Marchand <david.march...@redhat.com>
> ---
>  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

Reply via email to