On Wed, 20 May 2026 14:58:17 -0700
Rosen Penev <[email protected]> wrote:

> Store probe entry fetch instructions in the probe_entry_arg
> allocation instead of allocating a separate instruction array.
> 
> This keeps the entry fetch code tied to the entry argument lifetime while
> leaving regular probe_arg instruction arrays separately allocated and
> freed.
> 

Thanks, this looks good to me.

> Assisted-by: Codex:GPT-5.5
> Signed-off-by: Rosen Penev <[email protected]>
> ---
>  kernel/trace/trace_probe.c | 8 +-------
>  kernel/trace/trace_probe.h | 2 +-
>  2 files changed, 2 insertions(+), 8 deletions(-)
> 
> diff --git a/kernel/trace/trace_probe.c b/kernel/trace/trace_probe.c
> index e0d3a0da26af..39f040c863e8 100644
> --- a/kernel/trace/trace_probe.c
> +++ b/kernel/trace/trace_probe.c
> @@ -838,15 +838,10 @@ static int __store_entry_arg(struct trace_probe *tp, 
> int argnum)
>       int i, offset, last_offset = 0;
>  
>       if (!earg) {
> -             earg = kzalloc_obj(*tp->entry_arg);
> +             earg = kzalloc_flex(*earg, code, 2 * tp->nr_args + 1);
>               if (!earg)
>                       return -ENOMEM;
>               earg->size = 2 * tp->nr_args + 1;
> -             earg->code = kzalloc_objs(struct fetch_insn, earg->size);
> -             if (!earg->code) {
> -                     kfree(earg);
> -                     return -ENOMEM;
> -             }
>               /* Fill the code buffer with 'end' to simplify it */
>               for (i = 0; i < earg->size; i++)
>                       earg->code[i].op = FETCH_OP_END;
> @@ -2051,7 +2046,6 @@ void trace_probe_cleanup(struct trace_probe *tp)
>               traceprobe_free_probe_arg(&tp->args[i]);
>  
>       if (tp->entry_arg) {
> -             kfree(tp->entry_arg->code);
>               kfree(tp->entry_arg);
>               tp->entry_arg = NULL;
>       }
> diff --git a/kernel/trace/trace_probe.h b/kernel/trace/trace_probe.h
> index 262d8707a3df..1076f1df347b 100644
> --- a/kernel/trace/trace_probe.h
> +++ b/kernel/trace/trace_probe.h
> @@ -238,8 +238,8 @@ struct probe_arg {
>  };
>  
>  struct probe_entry_arg {
> -     struct fetch_insn       *code;
>       unsigned int            size;   /* The entry data size */
> +     struct fetch_insn       code[] __counted_by(size);
>  };
>  
>  struct trace_uprobe_filter {
> -- 
> 2.54.0
> 


-- 
Masami Hiramatsu (Google) <[email protected]>

Reply via email to