[Winpcap-bugs] RE: Crash in pcap_open when using incorrect flag
Mark Bednarczyk
voytechs at yahoo.com
Thu Aug 9 18:49:45 GMT 2007
I found the bug. Its in pcap-new.c. You will get a core dump under the
following conditions:
1) You specify invalid device name to pcap_open AND
2) You specify any of the WIN32 specific flags such as
PCAP_OPENFLAG_NOCAPTURE_LOCAL or PCAP_OPENFLAG_MAX_RESPONSIVENESS.
In the code below you can see, that if pcap_open_live fails to open a device
at the top, the flag dependent if statements below it, use the 'fp' ptr
without checking if its NULL. Which in this case is NULL, because
pcap_open_live failed. Thus a crash in the if statement itself (fp->adapter)
where fp == NULL.
So have to check for NULL too.
if (fp != NULL && !PacketSetLoopbackBehavior(fp->adapter,
NPF_DISABLE_LOOPBACK))
...
Or better yet return immediately after the pcap_open_live if its null.
Source from pcap-new.c:
#ifdef WIN32
//
// these flags are supported on Windows only
//
fp = pcap_open_live(name, snaplen, (flags &
PCAP_OPENFLAG_PROMISCUOUS), read_timeout, errbuf);
/* disable loopback capture if requested */
if(flags & PCAP_OPENFLAG_NOCAPTURE_LOCAL)
{
if(!PacketSetLoopbackBehavior(fp->adapter,
NPF_DISABLE_LOOPBACK))
{
snprintf(errbuf, PCAP_ERRBUF_SIZE,
"Unable to disable the capture of loopback packets.");
pcap_close(fp);
return NULL;
}
}
/* set mintocopy to zero if requested */
if(flags & PCAP_OPENFLAG_MAX_RESPONSIVENESS)
{
if(!PacketSetMinToCopy(fp->adapter, 0))
{
snprintf(errbuf, PCAP_ERRBUF_SIZE,
"Unable to set max responsiveness.");
pcap_close(fp);
return NULL;
}
}
#endif //WIN32
So in my original report of the problem, its just not any flag value above
8, it's a value that gets a bitwise hit on one of the PCAP_OPENFLAG_* flags.
And you have to have misspelled device name. Which in my test rigs (jUnit
test cases) I do all these things on purpose.
Cheers,
mark...
More information about the Winpcap-bugs
mailing list