Index | Thread | Search

From:
Dave Voutila <dv@sisu.io>
Subject:
Re: btrace: Parse unset arguments to 0
To:
Christian Ludwig <christian_ludwig@genua.de>
Cc:
tech@openbsd.org
Date:
Sun, 14 Jan 2024 22:04:42 -0500

Download raw body.

Thread
Christian Ludwig <christian_ludwig@genua.de> writes:

> [[S/MIME Signed Part:Undecided]]
> Reading unset arguments from a static tracepoint crashes btrace.
> Set them to "0" instead.

Do you have a simple btrace example? I believe there's an issue here,
but not sure I'm following how to trigger it.

>
> ---
>  usr.sbin/btrace/btrace.c | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/usr.sbin/btrace/btrace.c b/usr.sbin/btrace/btrace.c
> index 8ec7cbf37b2..ab4b10548b3 100644
> --- a/usr.sbin/btrace/btrace.c
> +++ b/usr.sbin/btrace/btrace.c
> @@ -1740,7 +1740,12 @@ ba2str(struct bt_arg *ba, struct dt_evt *dtev)
>  		str = buf;
>  		break;
>  	case B_AT_BI_ARG0 ... B_AT_BI_ARG9:
> -		str = builtin_arg(dtev, ba->ba_type);
> +		dtpi = &dt_dtpis[dtev->dtev_pbn - 1];
> +		if (dtpi != NULL &&
> +		    (ba->ba_type - B_AT_BI_ARG0) < dtpi->dtpi_nargs)
> +			str = builtin_arg(dtev, ba->ba_type);
> +		else
> +			str = "0";
>  		break;
>  	case B_AT_BI_RETVAL:
>  		snprintf(buf, sizeof(buf), "%ld", (long)dtev->dtev_retval[0]);