On 2015/10/12 12:54, Kevin Reay wrote: > Small fix to tcpdump nfs packet printing. Crash occurs when > printing nfs request filename of malformed packet. > > parsefn() now passes snapend to filename print function > (attempting to print packet data so NULL isn't right). Also > check return value from fn_printn() and handle truncation. > > Behavior now matches upstream Linux version when parsing > malformed packet. > > From upstream fix Git commit > 6191f36146f5d286304e9b6e893477fe509d83ab > > I can provide pcap files that trigger crash if required. > > > Index: print-nfs.c > =================================================================== > RCS file: /cvs/src/usr.sbin/tcpdump/print-nfs.c,v > retrieving revision 1.19 > diff -u -p -r1.19 print-nfs.c > --- print-nfs.c 16 Jan 2015 06:40:21 -0000 1.19 > +++ print-nfs.c 12 Oct 2015 18:37:06 -0000 > @@ -381,9 +381,11 @@ parsefn(register const u_int32_t *dp) > cp = (u_char *)dp; > /* Update 32-bit pointer (NFS filenames padded to 32-bit boundaries) */ > dp += ((len + 3) & ~3) / sizeof(*dp); > - /* XXX seems like we should be checking the length */ > putchar('"'); > - (void) fn_printn(cp, len, NULL); > + if (fn_printn(cp, len, snapend)) { > + putchar('"'); > + goto trunc; > + } > putchar('"'); > > return (dp); > >
OK with me