Wireshark-bugs: [Wireshark-bugs] [Bug 2017] VoIP trace crashes Wireshark when specific RTP Playe
Date: Mon, 7 Jan 2008 07:40:38 +0000 (GMT)
http://bugs.wireshark.org/bugzilla/show_bug.cgi?id=2017 jyoung@xxxxxxx changed: What |Removed |Added ---------------------------------------------------------------------------- Attachment #1327 is|0 |1 obsolete| | Attachment #1328 is|0 |1 obsolete| | Attachment #1344| |review_for_checkin? Flag| | ------- Comment #28 from jyoung@xxxxxxx 2008-01-07 07:40 GMT ------- Created an attachment (id=1344) --> (http://bugs.wireshark.org/bugzilla/attachment.cgi?id=1344&action=view) Bug 2017 fix - option 1 version 2 - after g_free() set pointer to NULL OK, there's more than one bug here... There's the problem of the stale pointer that can cause Wireshark to crash but there's also a more subtle "state" problem when RTP_packet_draw() is called multiple times during "TAP" processing. Under certain circumstances the gtk/voip_calls.c function RTP_packet_draw() may be invoked multiple times during "TAP" processing. If and when this happens, there is a chance the rtp_listinfo->pt_str item will have a stale pointer. A subsequent call to RTP_packet_draw() MAY attempt to use and subsequently g_free() the stale pointer. This can lead to bizarre text labels in various GUI fields, to the outright crashing of Wireshark. The newly attached patch does two things. It sets the rtp_listinfo->pt_str item to NULL following the g_free(). It also augments the immediately preceeding use of the rtp_listinfo->pt_str in the 'g_strdup_printf("%s (%s) %s",' call to print the text "<MISSING>" is and when the rtp_listinfo->pt_str is NULL. This patch appears to resolve the crash problem that initiated the creation of this bug. But it is now obvious that there is another bug with the way RTP_packet_draw() interacts with "TAP" processing. For this bug to surface it appears some type of timing related event must happen. On a "slow" computer, the RTP_packet_draw() function may sometimes return without having completed all it's work. It appears that RTP_packet_draw() can be called multiple times until it completes its work. RTP_packet_draw() is most likely to be called multiple times when the "Refiltering statistics on" window is displayed. Running Wireshark in valgrind makes this bug appear because Wireshark runs so slow. In valgrind the "Refiltering statistics on" always would appear when opening the Voip Calls window. But it was not nearly so easy to reproduce the bug running Wireshark in gdb. Putting various watchpoints and breakpoints in gdb would occasionally, but not consistantly, cause RTP_packet_draw() to run multiple times. But when RTP_packet_draw() ran mutiple times it appeared that the "Refiltering statistics on" also appeared. So I set about figuring out how to could get the "TAP" processing mechnism to want to display the "Refiltering statistics on" window while running Wireshark in gdb. It turns out it is easy, one simply has to set a breakpoint on "retap_packet". So to get multiple RTP_packet_draw() calls in gdb on my linux system I do the following: 1: Apply the newly uploaded patch and rebuild Wireshark. > patch -p0 <bug2017.option1.v2.fix.patch > make 2: Start gdb: > libtool --mode=execute gdb --args ./wireshark 3: Set a gdb breakpoint for retap_packet and run wireshark: > (gdb) b retap_packet > Breakpoint 1 at 0x8070997: file file.c, line 1849. > (gdb) run > Starting program: /home/jyoung/projects/wireshark/.libs/lt-wireshark > [Thread debugging using libthread_db enabled] > [New Thread 1112738464 (LWP 30595)] 4: Open of the problem trace file (I've been using the smaller pcap file (#1313: Subset of initial trace file - call #2). 5: Once ths file is read in open the "Voip Calls" window (Statistics -> Voip Calls). Once you select this item, the gdb breakpoint should trigger. > [Switching to Thread 1112738464 (LWP 30595)] > > Breakpoint 1, retap_packet (cf=0x81b32e0, fdata=0x8b02bc8, > pseudo_header=0xbfd91004, pd=0xbfd81004 "", argsp=0x0) at file.c:1849 >1849 edt = epan_dissect_new(num_tap_filters != 0, FALSE); >(gdb) At this point Wireshark will have started displaying the "Voip Calls" window but there will NOT (yet) be any "Refiltering statistics on" window displayed. 6: Allow Wireshark to continue running. > (gdb) c > Continuing. > > Breakpoint 1, retap_packet (cf=0x81b32e0, fdata=0x8b02c18, > pseudo_header=0xbfd91004, pd=0xbfd81004 "", argsp=0x0) at file.c:1849 > 1849 edt = epan_dissect_new(num_tap_filters != 0, FALSE); > (gdb) This will cause Wireshark to stop the second time that "retap_packet" is called. At this point the "Refiltering statistics on" should be displayed. 7: Now allow Wireshark to continue, but this time we will let gdb ignore the next 9999 calls to "retap_packet". > (gdb) c 10000 > Will ignore next 9999 crossings of breakpoint 1. Continuing. This should be enough calls to allow TAP processing to complete. The overhead of gdb keeping up with the retap_packet breakpoint appears to be enough to make the RTP_packet_draw() to be called several times and which should make the use of the NULLed rtp_listinfo->pt_str pointer evident. 7: Look to see if NULLed rtp_listinfo->pt_str was used To see if the NULLed rtp_listinfo->pt_str was used look open "Graph Analysis" window for the call. If the NULLed rtp_listinfo->pt_str was referenced, the codec field for one of the entries will have the text "(<MISSING>)". Interestingly, the actual generated "Graph Alaysis" report varies. If RTP_packet_draw() runs once, then call graph report has an apparently consistent look and all the codec values will have "(g711U)". But if RTP_packet_draw() runs multiple times, then some graph components will have been created multiple times and some of the codec entries will have "(<MISSING>)". At this time I believe the newly uploaded patch should be applied to prevent the stale pointer related crashes. Perhaps a NEW bug should be opened to deal with the "state" problems associated with RTP_packet_draw() when it called multiple times during TAP processing. -- Configure bugmail: http://bugs.wireshark.org/bugzilla/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are the assignee for the bug, or are watching the assignee.
- Prev by Date: [Wireshark-bugs] [Bug 1123] Bloat of the preferences file ESP settings!
- Next by Date: [Wireshark-bugs] [Bug 2170] New: Wireshark fails to restart after setting the preferences for SCCP
- Previous by thread: [Wireshark-bugs] [Bug 2017] VoIP trace crashes Wireshark when specific RTP Player buttons are clicked
- Next by thread: [Wireshark-bugs] [Bug 2017] VoIP trace crashes Wireshark when specific RTP Player buttons are clicked
- Index(es):