Nmap Development mailing list archives
RE: Surface pro 3 debug build
From: Peter Malecka <peter.malecka () me com>
Date: Thu, 12 Feb 2015 15:11:25 +0100
Dan, I believe that everything works just fine after applying the fix. While the error buffer contains some data, the function returns without an error.
From what I saw it seems that while enumerating the devices, wpcap encounters an issue opening a device – writes stuff to errbuf, skips the device and continues enumerating other devices.
After applying the fix I mentioned, everything seems to work just fine, and I am actually able to run “nmap
scanme.nmap.org” and get a meaningful output.
p_ifaces contains two entries:
- p_ifaces 0x02c22f70 {next=0x02c21170 {next=0x00000000 <NULL> name=0x02c22c60
"\\Device\\NPF_{77524534-162F-4DAE-91EC-9093F61CFE6E}" ...} ...} pcap_if *
+ next 0x02c21170 {next=0x00000000 <NULL> name=0x02c22c60
"\\Device\\NPF_{77524534-162F-4DAE-91EC-9093F61CFE6E}" ...} pcap_if *
+ name 0x02c30178 "\\Device\\NPF_{8506B6A6-4EE6-40B4-BA32-B20C01604203}" char *
+ description 0x02c22fa0 "Microsoft" char *
+ addresses 0x02c301c8 {next=0x00000000 <NULL> addr=0x02c301f8 {sa_family=2
sa_data=0x02c301fa "" } netmask=0x02c30290 {...} ...} pcap_addr *
flags 0 unsigned int
errbuf contains "failed to set hardware filter to non-promiscuous mode" – as a result of wpcap trying to open that
Wifi-Direct adapter and failing
pcap_findalldevs returned 0
That is an undocumented behaviour, but according to their documentation, you should only check errbuf when the return
value is -1. It does imply that the errbuf should be empty otherwise, but does not implicitly state that.
I think applying the fix does not break anything for existing users – since I copied the code from a sample and seems
to fix this issue. Also – should there be any other error there (while pcap_findalldevs returns -1 and the errbuf is
expected to be filled), having the errbuf set to NULL most likely cause a similar crash.
As for treating this as warning – I would not bother checking the errbuf when the function returns 0 (success), since
it may or may not be used and it may or may not contain meaningful data.
Peter
From: Daniel Miller [mailto:bonsaiviking () gmail com]
Sent: Thursday, February 12, 2015 2:42 PM
To: Peter Malecka; Nmap-dev
Subject: Re: Surface pro 3 debug build
Peter,
Thanks so much! This is really helpful information. Unfortunately, it still looks like this ends up making Nmap
unusable on this platform, since we just traded a crash (worst) for a fatal error (still bad). Can you see, while you
debug, whether the pcap_if_t structures (pcapdevs and p_ifaces) have any valid content in them after pcap_findalldevs
returns with error status? In other words, can we treat this error as a warning ("Can't enumerate all interfaces" or
something) and still make do with the interfaces that *are* supported? It's a long shot, but might be worthwhile to
check.
Dan
On Thu, Feb 12, 2015 at 4:26 AM, Peter Malecka <peter.malecka () me com <mailto:peter.malecka () me com> > wrote:
Daniel,
I poked around wpcap source, compiled it from soruce and debugged some more.
I found a possible issue there. When those wpcap functions are called, they sometimes have the errbuf argument set to
null. The documentation does not state that the argument can be null.
<http://www.tcpdump.org/manpages/pcap_findalldevs.3pcap.html>
http://www.tcpdump.org/manpages/pcap_findalldevs.3pcap.html
I tried fixing this issue for the --iflist command, and succeeded. I had to fix it in these 2 places:
intf-win32.c
char errbuf[PCAP_ERRBUF_SIZE];
if (pcap_findalldevs(&pcapdevs, errbuf) == -1) {
intf_close(intf);
return (-1);
}
tcpip.cc
char errbuf[PCAP_ERRBUF_SIZE];
if ((pcap_findalldevs(&p_ifaces, errbuf)) == -1) {
fatal("pcap_findalldevs() : Cannot retrieve pcap interfaces");
return NULL;
}
Note the new errbuf variable and how it is used in the pcap_findalldevs function instead of a null argument. There
might be more places where this causes issues.
On a sidenote: it was failing on the Microsoft Wifi direct virtual adapter. See attached the callstack from winpcap
debug (crash on strncpy to an empty errbuf).
Hope it helps.
Peter
From: Daniel Miller [mailto: <mailto:bonsaiviking () gmail com> bonsaiviking () gmail com]
Sent: Thursday, February 5, 2015 11:17 PM
To: Peter Malecka
Subject: Re: Surface pro 3 debug build
Peter,
Thank you so much! I will see what I can do from here.
Dan
On Thu, Feb 5, 2015 at 3:27 PM, Peter Malecka <peter.malecka () me com <mailto:peter.malecka () me com> > wrote:
Hi Dan,
I followed your instructions and ran the debugger in vs2013 (nmap --iflist).
Please find attached all the output I could generate now.
In the callstack.txt, there is the line and details of the wpcap call that failed (pcap_findalldevs(&p_ifaces, NULL)),
the rest is wpcap debug output. I cannot see any deeper without the wpcap pdb.
Hope it helps,
Peter
From: Daniel Miller [mailto: <mailto:bonsaiviking () gmail com> bonsaiviking () gmail com]
Sent: Thursday, February 5, 2015 6:02 PM
To: Peter Malecka
Cc: <mailto:dmiller () nmap org> dmiller () nmap org
Subject: Re: Surface pro 3 debug build
Peter,
Thanks for offering to help. I've gotten several offers, but no follow-up. We really need a backtrace of the actual
call that fails. Anything you can provide beyond that would be great, too. You can get the debug package here: <snip>
There are bug reporting instructions on WinPcap's web site which will probably help to create better debug output:
http://www.winpcap.org/bugs.htm
Thanks!
Dan
On Thu, Feb 5, 2015 at 6:38 AM, Peter Malecka <peter.malecka () me com <mailto:peter.malecka () me com> > wrote:
Hi Dan,
While looking at this issue on github ( https://github.com/nmap/nmap/issues/15 ), I found that you might be looking for
people to help you debug new builds.
Let me know if I can help.
Best,
Peter
_______________________________________________ Sent through the dev mailing list https://nmap.org/mailman/listinfo/dev Archived at http://seclists.org/nmap-dev/
Current thread:
- Re: Surface pro 3 debug build Daniel Miller (Feb 12)
- RE: Surface pro 3 debug build Peter Malecka (Feb 12)
- Re: Surface pro 3 debug build Daniel Miller (Feb 12)
- RE: Surface pro 3 debug build Peter Malecka (Feb 12)
