Wireshark-dev: Re: [Wireshark-dev] sigcomp - accessing state with a partial stateid >6 bytes

From: "Anders Broman" <a.broman@xxxxxxxxx>
Date: Tue, 5 Dec 2006 07:49:03 +0100
Checked in.
BR
Anders

-----Ursprungligt meddelande-----
Från: wireshark-dev-bounces@xxxxxxxxxxxxx
[mailto:wireshark-dev-bounces@xxxxxxxxxxxxx] För cco
Skickat: den 4 december 2006 10:25
Till: Developer support list for Wireshark
Ämne: Re: [Wireshark-dev] sigcomp - accessing state with a partial stateid
>6 bytes

On Wed, Nov 29, 2006 at 09:50:21AM +0100, cco wrote:
> On Tue, Nov 28, 2006 at 02:46:01PM +0100, Anders Broman (AL/EAB) wrote:
> >  
> > 
> > -----Original Message-----
> > From: wireshark-dev-bounces@xxxxxxxxxxxxx
> > [mailto:wireshark-dev-bounces@xxxxxxxxxxxxx] On Behalf Of cco
> > Sent: den 28 november 2006 11:56
> > To: Developer support list for Wireshark
> > Subject: [Wireshark-dev] sigcomp - accessing state with a partial state
> > id >6 bytes
> > 
> > >hi!
> > >
> > >it seems that wireshark fails to access a previous saved state when the
> > specified psi is longer than 6 bytes. and yes, >the state was saved at
> > END-MESSAGE(); at least this is what the debug message reports.
> > >
> > >here is the scenario:
> > 
> > >1. sigcomp pkt with bytecode is recv. sucessful decompression,
> > END-MESSAGE makes a state create request. state is saved >(it seems that
> > only the first six bytes of the state id are kept; no idea why) 2.
> > sigcomp packet tries to access prev. >saved state with a partial state
> > id. partial state id is longer than 6 bytes and wireshark fails. since
> > one of the 
> > >peers is able to decompress it I suspect there is a problem in
> > wireshark.
> > >
> > >thanks!
> > >bye now!
> > >cristian
> > 
> > Hi,
> > Wireshark will save the state id with the minimum access length in it's
> > hash table.
> > I guess that later when that state of 6 bytes is compareth with a state
> > of 8 bytes the comparison fails.
> > 
> > I think that ought to be changed to save the full 20 bytes state id and
> > the minimum access length
> > And the comparisson should then be made on the actual state id length
> > used, if greater then minimum length.
> 
> cristian: yes, this would be "Signaling Compression (RFC 3320)" compliant.
> 
> > 
> > I currently have little time to work on this you might want to file a
> > bugzilla report on this 
> > preferably with an example trace.
> 
> cristian: o.k. I will try that.

cristian: hi again. here is a patch (for the svn version) which tries to
fix this behaviour. compiled and tested it against the dumps that
contain sigcomp packets accessing state with partial state id > 6 bytes.
seems to work now.

however pls. have a look.

(off-topic?) after patching and compiling (svn) wireshark on my debian
notebook, when trying to access "Preferences" from gui, wireshark
coredumped. here is a bt:

(gdb) bt
#0  0x080f70a6 in pcap_findalldevs ()
#1  0x080f719d in pcap_findalldevs ()
#2  0x08062d94 in get_interface_list_findalldevs (err=0xbfb8b2ec,
err_str=0xbfb8b2f0
"P\237\"\b\uffff\uffff\uffff\uffff\uffff\uffff\uffff\uffff<\uffff\uffff\ufff
f\uffff\uffffN\uffff") at capture-pcap-util.c:271
#3  0x080a3da1 in capture_prefs_show () at capture_prefs.c:119
#4  0x08083ea0 in prefs_cb (w=0x8518148, dummy=0x0) at prefs_dlg.c:614
#5  0xb6b382a3 in gtk_item_factory_get_type () from
/usr/lib/libgtk-x11-2.0.so.0
#6  0xb675ae1b in g_cclosure_marshal_VOID__VOID () from
/usr/lib/libgobject-2.0.so.0
#7  0xb674d98b in g_closure_invoke () from /usr/lib/libgobject-2.0.so.0
#8  0xb675df2d in g_signal_chain_from_overridden () from
/usr/lib/libgobject-2.0.so.0
#9  0xb675f429 in g_signal_emit_valist () from /usr/lib/libgobject-2.0.so.0
#10 0xb675f5d9 in g_signal_emit () from /usr/lib/libgobject-2.0.so.0
#11 0xb6c431c2 in gtk_widget_activate () from /usr/lib/libgtk-x11-2.0.so.0
#12 0xb6b61a1b in gtk_menu_shell_activate_item () from
/usr/lib/libgtk-x11-2.0.so.0
#13 0xb6b61d38 in gtk_menu_shell_activate_item () from
/usr/lib/libgtk-x11-2.0.so.0
#14 0xb6b5799f in gtk_menu_reorder_child () from
/usr/lib/libgtk-x11-2.0.so.0
#15 0xb6b51900 in _gtk_marshal_BOOLEAN__BOXED () from
/usr/lib/libgtk-x11-2.0.so.0
#16 0xb674bf49 in g_value_set_boxed () from /usr/lib/libgobject-2.0.so.0
#17 0xb674d98b in g_closure_invoke () from /usr/lib/libgobject-2.0.so.0
#18 0xb675e56f in g_signal_chain_from_overridden () from
/usr/lib/libgobject-2.0.so.0
#19 0xb675f208 in g_signal_emit_valist () from /usr/lib/libgobject-2.0.so.0
#20 0xb675f5d9 in g_signal_emit () from /usr/lib/libgobject-2.0.so.0
#21 0xb6c433e4 in gtk_widget_activate () from /usr/lib/libgtk-x11-2.0.so.0
#22 0xb6b4fd2d in gtk_propagate_event () from /usr/lib/libgtk-x11-2.0.so.0
#23 0xb6b501a3 in gtk_main_do_event () from /usr/lib/libgtk-x11-2.0.so.0
#24 0xb69e3bfa in _gdk_events_queue () from /usr/lib/libgdk-x11-2.0.so.0
#25 0xb66d2731 in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0
#26 0xb66d57a6 in g_main_context_check () from /usr/lib/libglib-2.0.so.0
#27 0xb66d5b67 in g_main_loop_run () from /usr/lib/libglib-2.0.so.0
#28 0xb6b4f341 in gtk_main () from /usr/lib/libgtk-x11-2.0.so.0
#29 0x081a1180 in ?? ()
#30 0x00000001 in ?? ()
#31 0x00000001 in ?? ()

any idea what could be wrong?

thanks!
bye now!
cristian