On Tue, Mar 10, 2020 at 06:25:10PM +0100, Martijn van Duren wrote: > So I did some last minute testing of my own and apparently I misread. > A varbindlist means a new sequence of varbinds, while the code assumes > a list of varbinds. > > Code below actually works and also gives the additional varbinds to > the trap handle "command". > > Now actually asking for OKs. :-)
OK jan@ > On 3/10/20 1:43 PM, Jan Klemkow wrote: > > On Tue, Mar 10, 2020 at 01:13:46PM +0100, Martijn van Duren wrote: > >> On 3/10/20 10:21 AM, Jan Klemkow wrote: > >>> On Tue, Mar 10, 2020 at 12:27:20AM +0100, Martijn van Duren wrote: > >>>> Looking at RFC1157 section 4.1.6, an snmpv1 trap should also contain a > >>>> varbindlist. > >>>> > >>>> Could you test the diff below? > >>> > >>> Is also OK for me and the current call path seems to be clean. > >>> But, shouldn't we set iter to NULL anyway? > >> > >> If we state that traphandler_parse must initialize *vbinds, then not > >> setting it allows us to differentiate between undefined behaviour > >> (initialized to garbage) and no varbindlist. The first one will only > >> show its head if someone screws up a refactor. > >> But if you feel strongly about it we can initialize it. > > > > I don't feel strong about it. Commit your change and I fine with it. > > > > OK jan@ > > > >>>> On 3/9/20 11:38 PM, Jan Klemkow wrote: > >>>>> Hi, > >>>>> > >>>>> The following diff fixes the use of the uninitialized pointer iter > >>>>> in trapcmd_exec(). > >>>>> > >>>>> iter is just initialized in traphandler_parse() if vers is SNMP_V2. In > >>>>> all other cases iter stays uninitialized and may dereferenced in > >>>>> trapcmd_exec(). > >>>>> > >>>>> OK? > >>>>> > >>>>> bye, > >>>>> Jan > > Index: traphandler.c > =================================================================== > RCS file: /cvs/src/usr.sbin/snmpd/traphandler.c,v > retrieving revision 1.15 > diff -u -p -r1.15 traphandler.c > --- traphandler.c 24 Oct 2019 12:39:27 -0000 1.15 > +++ traphandler.c 10 Mar 2020 17:23:51 -0000 > @@ -232,10 +232,13 @@ traphandler_parse(char *buf, size_t n, s > > switch (vers) { > case SNMP_V1: > - if (ober_scanf_elements(elm, "{oSddd", > - trapoid, >ype, &etype, uptime) == -1) > + if (ober_scanf_elements(elm, "{oSddde", > + trapoid, >ype, &etype, uptime, &elm) == -1) > goto done; > traphandler_v1translate(trapoid, gtype, etype); > + if (elm->be_type != BER_TYPE_SEQUENCE) > + goto done; > + *vbinds = elm->be_sub; > break; > > case SNMP_V2: >