[DTrace-devel] [PATCH] cg: fix tstring leak in translator members that yield string values

Eugene Loh eugene.loh at oracle.com
Mon Aug 7 20:26:04 UTC 2023


Reviewed-by: Eugene Loh <eugene.loh at oracle.com>

On 8/4/23 22:13, Kris Van Hees via DTrace-devel wrote:
> When a translator member yields a string value, the tstring holding the
> value was not properly tracked.  This resulted in an assertion failure
> in test/demo/ip/ipproto.d.
>
> Signed-off-by: Kris Van Hees <kris.van.hees at oracle.com>
> ---
>   libdtrace/dt_cg.c | 6 +++++-
>   1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/libdtrace/dt_cg.c b/libdtrace/dt_cg.c
> index 7f946b2c..8275cc85 100644
> --- a/libdtrace/dt_cg.c
> +++ b/libdtrace/dt_cg.c
> @@ -1135,7 +1135,6 @@ dt_cg_tstring_xalloc(dt_pcb_t *pcb)
>   
>   	assert(i < DT_TSTRING_SLOTS);
>   	ts->in_use = 1;
> -
>   	return ts->offset;
>   }
>   
> @@ -6444,6 +6443,11 @@ dt_cg_node(dt_node_t *dnp, dt_irlist_t *dlp, dt_regset_t *drp)
>   
>   			dt_cg_node(mnp->dn_membexpr, dlp, drp);
>   			dnp->dn_reg = mnp->dn_membexpr->dn_reg;
> +
> +			/* Move tstring (if any) to dnp. */
> +			dnp->dn_tstring = mnp->dn_membexpr->dn_tstring;
> +			mnp->dn_membexpr->dn_tstring = NULL;
> +
>   			dt_cg_typecast(mnp->dn_membexpr, dnp, dlp, drp);
>   
>   			dxp->dx_ident->di_flags &= ~DT_IDFLG_CGREG;



More information about the DTrace-devel mailing list