From: Martin Pieuchot Subject: Re: btrace: Parse unset arguments to 0 To: Christian Ludwig Cc: "tech@openbsd.org" Date: Sun, 21 Jan 2024 19:38:45 -0300 On 12/01/24(Fri) 15:45, Christian Ludwig wrote: > Reading unset arguments from a static tracepoint crashes btrace. > Set them to "0" instead. Thanks! I would prefer if we could place the fix inside builtin_arg(). The rational is that both `dt_dtpis' and `dt_args' are indexed by the probe number and are not independent. Here's your fix adapted, ok? Index: btrace.c =================================================================== RCS file: /cvs/src/usr.sbin/btrace/btrace.c,v diff -u -p -r1.81 btrace.c --- btrace.c 10 Nov 2023 18:56:21 -0000 1.81 +++ btrace.c 21 Jan 2024 22:35:33 -0000 @@ -797,13 +797,18 @@ const char * builtin_arg(struct dt_evt *dtev, enum bt_argtype dat) { static char buf[sizeof("18446744073709551615")]; /* UINT64_MAX */ - unsigned int argn; + struct dtioc_probe_info *dtpi; struct dtioc_arg_info *dtai; const char *argtype, *fmt; + unsigned int argn; long value; - dtai = dt_args[dtev->dtev_pbn - 1]; argn = dat - B_AT_BI_ARG0; + dtpi = &dt_dtpis[dtev->dtev_pbn - 1]; + if (dtpi == NULL || argn >= dtpi->dtpi_nargs) + return "0"; + + dtai = dt_args[dtev->dtev_pbn - 1]; argtype = dtai[argn].dtai_argtype; if (strncmp(argtype, "int", DTNAMESIZE) == 0) {