[EXT] [PATCH 3/8] trace: fix leak with regexp

Sunil Kumar Kori skori at marvell.com
Thu Sep 22 13:00:22 CEST 2022


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



More information about the stable mailing list