[DTrace-devel] [PATCH v2] Fix strchr() tstring free

Kris Van Hees kris.van.hees at oracle.com
Mon Feb 27 01:11:27 UTC 2023


On Sat, Feb 25, 2023 at 03:17:43PM -0500, eugene.loh--- via DTrace-devel wrote:
> From: Eugene Loh <eugene.loh at oracle.com>
> 
> A node's register and tstring have to be managed independently.  E.g.,
> in this case, str's register value is moved to another register, and
> so str->dn_reg can be freed.  Meanwhile, the associated tstring is still
> in use and cannot be freed until later.
> 
> Signed-off-by: Eugene Loh <eugene.loh at oracle.com>

Reviewed-by: Kris Van Hees <kris.van.hees at oracle.com>

> ---
>  libdtrace/dt_cg.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/libdtrace/dt_cg.c b/libdtrace/dt_cg.c
> index 43ad6971..c4228b82 100644
> --- a/libdtrace/dt_cg.c
> +++ b/libdtrace/dt_cg.c
> @@ -4996,7 +4996,6 @@ dt_cg_subr_strchr(dt_node_t *dnp, dt_irlist_t *dlp, dt_regset_t *drp)
>  
>  	emit(dlp, BPF_MOV_REG(BPF_REG_1, str->dn_reg));
>  	dt_regset_free(drp, str->dn_reg);
> -	dt_cg_tstring_free(yypcb, str);
>  	emit(dlp, BPF_MOV_REG(BPF_REG_2, chr->dn_reg));
>  	dt_regset_free(drp, chr->dn_reg);
>  
> @@ -5024,6 +5023,7 @@ dt_cg_subr_strchr(dt_node_t *dnp, dt_irlist_t *dlp, dt_regset_t *drp)
>  	emite(dlp,  BPF_CALL_FUNC(idp->di_id), idp);
>  	dt_regset_free_args(drp);
>  	dt_cg_tstring_xfree(yypcb, off);
> +	dt_cg_tstring_free(yypcb, str);
>  
>  	emit (dlp, BPF_BRANCH_IMM(BPF_JEQ, BPF_REG_0, 0, Lfound));
>  	emit (dlp, BPF_MOV_IMM(dnp->dn_reg, 0));
> @@ -5052,7 +5052,6 @@ dt_cg_subr_strrchr(dt_node_t *dnp, dt_irlist_t *dlp, dt_regset_t *drp)
>  
>  	emit(dlp, BPF_MOV_REG(BPF_REG_1, str->dn_reg));
>  	dt_regset_free(drp, str->dn_reg);
> -	dt_cg_tstring_free(yypcb, str);
>  	emit(dlp, BPF_MOV_REG(BPF_REG_2, chr->dn_reg));
>  	dt_regset_free(drp, chr->dn_reg);
>  
> @@ -5074,6 +5073,7 @@ dt_cg_subr_strrchr(dt_node_t *dnp, dt_irlist_t *dlp, dt_regset_t *drp)
>  	dt_regset_xalloc(drp, BPF_REG_0);
>  	emite(dlp,  BPF_CALL_FUNC(idp->di_id), idp);
>  	dt_regset_free_args(drp);
> +	dt_cg_tstring_free(yypcb, str);
>  
>  	emit (dlp, BPF_BRANCH_IMM(BPF_JEQ, BPF_REG_0, 0, Lfound));
>  	emit (dlp, BPF_MOV_IMM(dnp->dn_reg, 0));
> -- 
> 2.18.4
> 
> 
> _______________________________________________
> DTrace-devel mailing list
> DTrace-devel at oss.oracle.com
> https://oss.oracle.com/mailman/listinfo/dtrace-devel



More information about the DTrace-devel mailing list