[DTrace-devel] [PATCH v4 08/10] cg: support null pointers in ternary conditionals

Kris Van Hees kris.van.hees at oracle.com
Wed Apr 13 16:05:41 UTC 2022


On Tue, Apr 12, 2022 at 11:59:07AM +0100, Nick Alcock wrote:
> This lets you compare ternaries with NULL without risking a dereference.
> 
> (Some of the alloca tests can sometimes do this.)
> 
> Signed-off-by: Nick Alcock <nick.alcock at oracle.com>

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

> ---
>  libdtrace/dt_cg.c | 6 ++++++
>  1 file changed, 6 insertions(+)
> 
> diff --git a/libdtrace/dt_cg.c b/libdtrace/dt_cg.c
> index efb640426d85..12b84842d2d4 100644
> --- a/libdtrace/dt_cg.c
> +++ b/libdtrace/dt_cg.c
> @@ -3253,6 +3253,10 @@ dt_cg_ternary_op(dt_node_t *dnp, dt_irlist_t *dlp, dt_regset_t *drp)
>  	 * dn_right).
>  	 */
>  	if (dt_node_is_string(dnp)) {
> +		uint_t lbl_null = dt_irlist_label(dlp);
> +
> +		emit(dlp,  BPF_BRANCH_IMM(BPF_JEQ, dnp->dn_reg, 0, lbl_null));
> +
>  		/*
>  		 * At this point, dnp->dn_reg holds a pointer to the string we
>  		 * need to copy.  But we want to copy it into a tstring which
> @@ -3269,6 +3273,8 @@ dt_cg_ternary_op(dt_node_t *dnp, dt_irlist_t *dlp, dt_regset_t *drp)
>  		dt_cg_memcpy(dlp, drp, dnp->dn_reg, BPF_REG_0,
>  			     yypcb->pcb_hdl->dt_options[DTRACEOPT_STRSIZE]);
>  
> +		emitl(dlp,  lbl_null,
> +			    BPF_NOP());
>  		dt_cg_tstring_free(yypcb, dnp->dn_left);
>  		dt_cg_tstring_free(yypcb, dnp->dn_right);
>  	}
> -- 
> 2.35.1



More information about the DTrace-devel mailing list