tcpdump mailing list archives

SV: segfault in pcap_snapshot


From: Karl Sjödahl <karlsjod01 () student kau se>
Date: Mon, 23 Feb 2004 00:21:08 +0100

Hi.
Ok it snuk in an error in my code when i wrote it in the mail (mailbox
aint same as the codebox..).
The line is as u said and checks if p = null.
p is an pcap_t *p.

Here is the code more specific:

pcap_t *p;
<snip>

p = pcap_open_live(device, BUFSIZ, PROMISC, 0, errbuf);
        if(p = NULL)
        {
                fprintf(stderr, "pcap_open_live() failed: %s\n",
errbuf);
                exit(EXIT_FAILURE);
        }

if(pcap_lookupnet(device, &local_net, &netmask, errbuf) == ERROR)
        {
                fprintf(stderr, "pcap_lookupnet() failed: %s\n",
errbuf);
                pcap_close(p);
                exit(EXIT_FAILURE);
        }
if(pcap_compile(p, &filter_code, TESTFILTER, 0, netmask) == ERROR)
        {
                fprintf(stderr, "pcap_compile() failed: %s\n",
pcap_geterr(p));
                pcap_close(p);
                exit(EXIT_FAILURE);
        }
        printf("After pcap_compile()n");
/* here the segfault is */
        if(pcap_setfilter(p, &filter_code) == ERROR)
        {
       fprintf(stderr, "pcap_setfilter() failed: %s\n", pcap_geterr(p));
                pcap_close(p);
                exit(EXIT_FAILURE);
        }
....


// Dunceor


-----Ursprungligt meddelande-----
Från: owner-tcpdump-workers () sandelman ottawa on ca
[mailto:owner-tcpdump-workers () sandelman ottawa on ca] För Guy Harris
Skickat: den 22 februari 2004 23:58
Till: Karl Sjödahl
Kopia: tcpdump-workers () tcpdump org
Ämne: Re: [tcpdump-workers] segfault in pcap_snapshot

On Sun, Feb 22, 2004 at 11:35:21PM +0100, Karl Sjödahl wrote:
if(pcap_open_live(device, BUFSIZ, PROMISC, 0, errbuf) == -1)
{
                      error handling
}

"pcap_open_live()" doesn't return an integer, it returns a "pcap_t *" on
success, and NULL on failure; the "pcap_t *" is what you have to use in
subsequent calls to "pcap_compile()", "pcap_setfilter()",
"pcap_dispatch()"/"pcap_loop()"/"pcap_next()", etc..

Thus, that call should be

        p = pcap_open_live(device, BUFSIZ, PROMISC, 0, errbuf);
        if (p == NULL
        {
                error handling
        }

and that "p" (which should be a "pcap_t *") is what should be used in
subsequent calls such as

if(pcap_compile(p, &filter_code, TESTFILTER, 0, netmask) == -1)
{
                      error handling    
}
if(pcap_setfilter(p, &filter_code) == -1)
{
                      error handling
}
-
This is the TCPDUMP workers list. It is archived at
http://www.tcpdump.org/lists/workers/index.html
To unsubscribe use
mailto:tcpdump-workers-request () tcpdump org?body=unsubscribe

---
Incoming mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.593 / Virus Database: 376 - Release Date: 2004-02-20
 

---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.593 / Virus Database: 376 - Release Date: 2004-02-20
 

-
This is the TCPDUMP workers list. It is archived at
http://www.tcpdump.org/lists/workers/index.html
To unsubscribe use mailto:tcpdump-workers-request () tcpdump org?body=unsubscribe


Current thread: