Index | Thread | Search

From:
Christian Ludwig <christian_ludwig@genua.de>
Subject:
btrace: Parse unset arguments to 0
To:
"tech@openbsd.org" <tech@openbsd.org>
Date:
Fri, 12 Jan 2024 15:45:53 +0000

Download raw body.

Thread
Reading unset arguments from a static tracepoint crashes btrace.
Set them to "0" instead.

---
 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]);
-- 
2.34.1