On Fri, 17 Apr 2026 20:24:00 +0800
Pengpeng Hou <[email protected]> wrote:

> diff --git a/kernel/trace/trace_events_hist.c 
> b/kernel/trace/trace_events_hist.c
> index 73ea180cad55..954e0beb7f0a 100644
> --- a/kernel/trace/trace_events_hist.c
> +++ b/kernel/trace/trace_events_hist.c
> @@ -1764,13 +1764,14 @@ static void expr_field_str(struct hist_field *field, 
> char *expr)
>  static char *expr_str(struct hist_field *field, unsigned int level)
>  {
>       char *expr;
> +     int ret = -EINVAL;

No need for the ret value, use:

        char *expr __free(kfree) = NULL;

instead.

>  
>       if (level > 1)
> -             return NULL;
> +             return ERR_PTR(-EINVAL);
>  
>       expr = kzalloc(MAX_FILTER_STR_VAL, GFP_KERNEL);
>       if (!expr)
> -             return NULL;
> +             return ERR_PTR(-ENOMEM);
>  
>       if (!field->operands[0]) {
>               expr_field_str(field, expr);
> @@ -1782,9 +1783,9 @@ static char *expr_str(struct hist_field *field, 
> unsigned int level)
>  
>               strcat(expr, "-(");
>               subexpr = expr_str(field->operands[0], ++level);
> -             if (!subexpr) {
> -                     kfree(expr);
> -                     return NULL;
> +             if (IS_ERR(subexpr)) {
> +                     ret = PTR_ERR(subexpr);
> +                     goto free;

The above could then be:

                if (IS_ERR(subexpr))
                        return subexpr;

>               }
>               strcat(expr, subexpr);
>               strcat(expr, ")");
> @@ -1810,13 +1811,16 @@ static char *expr_str(struct hist_field *field, 
> unsigned int level)
>               strcat(expr, "*");
>               break;
>       default:
> -             kfree(expr);
> -             return NULL;

This could be just:

                return ERR_PTR(-EINVAL);


> +             goto free;
>       }
>  
>       expr_field_str(field->operands[1], expr);
>  
>       return expr;

And the above would be:

        return_ptr(expr);

> +
> +free:
> +     kfree(expr);
> +     return ERR_PTR(ret);

And the above isn't needed.

-- Steve

>  }
>  

Reply via email to