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