Guy Harris wrote:
> 
> On Thu, May 02, 2002 at 04:31:24PM +0000, didier wrote:
> > As a quick fix (plen +16 overflow to 0),
> 
> Overflowing to 0 means it's 2^32-16; that's a *REALLY* big DSI packet,
> and it's not going to fit in memory.
> 
> I suspect that's a malformed packet (or not a DSI packet at all).  Some
> other dissectors doing reassembly put in checks to suppress reassembly
> for very large packets.
It's a write unreassembled packet (Saul mailed me a capture) so plen is
actually data and yes it's 2^32 -16, leading to an infinite loop.

> 
> > but the way dsi handles unreassembled packets is, ... sub optimal.
> 
> Protocols running over TCP sometimes require reassembly to be correctly
> dissected.
> 
> A mechanism might be useful to handle too-large packets by having the
> TCP reassembly code
> 
>         reassemble part of the packet, stopping at the end of a segment
>         (with some upper limit, maybe a megabyte or so, and stopping at
>         the end of the segment that takes you up to or past that limit);
> 
>         for subsequent segments, telling the subdissector (via stuff in
>         the "packet_info" structure) that the first N bytes of that
>         packet are a continuation of the most recent packet, and having
>         those subdissectors display that stuff as such and start
>         dissecting regular data after those N bytes, if there are any
>         left.
> 
> Really Large reassembled packets are, I suspect, usually "write"
> operations containing large chunks of data at the end, so this would
> probably do the right thing in most cases.
It's the case with DSI (read and write packets are the only packets
fragmented with an ethernet like MTU).

Didier


Reply via email to