Index | Thread | Search

From:
Christian Ludwig <christian_ludwig@genua.de>
Subject:
Re: btrace: Parse unset arguments to 0
To:
Martin Pieuchot <mpi@openbsd.org>
Cc:
"tech@openbsd.org" <tech@openbsd.org>
Date:
Tue, 23 Jan 2024 11:11:31 +0100

Download raw body.

Thread
  • Martin Pieuchot:

    btrace: Parse unset arguments to 0

    • Christian Ludwig:

      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) {
    
  • Martin Pieuchot:

    btrace: Parse unset arguments to 0