From: Christian Ludwig Subject: Re: btrace: Parse unset arguments to 0 To: Martin Pieuchot Cc: "tech@openbsd.org" Date: Tue, 23 Jan 2024 11:11:31 +0100 Hi, On Sun, Jan 21, 2024 at 07:38:45PM -0300 Martin Pieuchot wrote: > 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. Makes sense. > Here's your fix adapted, ok? Works like a charm. Thank you. > 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) {