Download raw body.
btrace: Parse unset arguments to 0
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) {
btrace: Parse unset arguments to 0