[DTrace-devel] [PATCH] cg: do not perform runtime bounds checking on arrays of size 0 or 1

Eugene Loh eugene.loh at oracle.com
Thu Nov 30 20:51:59 UTC 2023


Reviewed-by: Eugene Loh <eugene.loh at oracle.com>
but the earlier patch had a test.  So should this patch have a 
corresponding test?

On 11/22/23 15:58, Kris Van Hees via DTrace-devel wrote:
> Commit c7d73146 "parser: do not bounds-check arrays of size 0 or 1"
> already disabled compile time bounds checking but there are cases
> where the bounds checking was done at runtime instead.  Those also
> need to ignore arrays of size 0 or 1, for the same reason.
>
> Signed-off-by: Kris Van Hees <kris.van.hees at oracle.com>
> ---
>   libdtrace/dt_cg.c | 14 ++++++++++----
>   1 file changed, 10 insertions(+), 4 deletions(-)
>
> diff --git a/libdtrace/dt_cg.c b/libdtrace/dt_cg.c
> index 843ac165..79ee76fe 100644
> --- a/libdtrace/dt_cg.c
> +++ b/libdtrace/dt_cg.c
> @@ -3849,11 +3849,17 @@ dt_cg_arithmetic_op(dt_node_t *dnp, dt_irlist_t *dlp, dt_regset_t *drp,
>   
>   		elem_size = ctf_type_size(ctfp, r.ctr_contents);
>   
> -		emit(dlp,  BPF_BRANCH_IMM(BPF_JLT, dnp->dn_right->dn_reg, r.ctr_nelems * elem_size, L1));
> +		/*
> +		 * Arrays of size 0 or 1 should not cause bounds checking as
> +		 * they are usually an anchor for dynamically sized arrays.
> +		 */
> +		if (r.ctr_nelems > 1) {
> +			emit(dlp,  BPF_BRANCH_IMM(BPF_JLT, dnp->dn_right->dn_reg, r.ctr_nelems * elem_size, L1));
>   
> -		/* Report out-of-bounds fault on the index. */
> -		emit(dlp,  BPF_ALU64_IMM(BPF_DIV, dnp->dn_right->dn_reg, elem_size));
> -		dt_cg_probe_error(yypcb, DTRACEFLT_BADINDEX, DT_ISREG, dnp->dn_right->dn_reg);
> +			/* Report out-of-bounds fault on the index. */
> +			emit(dlp,  BPF_ALU64_IMM(BPF_DIV, dnp->dn_right->dn_reg, elem_size));
> +			dt_cg_probe_error(yypcb, DTRACEFLT_BADINDEX, DT_ISREG, dnp->dn_right->dn_reg);
> +		}
>   
>   		emitl(dlp, L1,
>   			   BPF_ALU64_REG(op, dnp->dn_left->dn_reg, dnp->dn_right->dn_reg));



More information about the DTrace-devel mailing list