From: Guy Harris Date: Mon, 21 Sep 2015 22:35:42 +0000 (-0700) Subject: Free up lists we get from pcap_findalldevs(). X-Git-Tag: tcpdump-4.8.0~117 X-Git-Url: https://git.tcpdump.org/tcpdump/commitdiff_plain/0501579a69b85ae7a3f060f416a787723d080728?ds=inline Free up lists we get from pcap_findalldevs(). That means we need to make a copy of a name we get from the list. --- diff --git a/tcpdump.c b/tcpdump.c index a0c627c6..cebc1f2d 100644 --- a/tcpdump.c +++ b/tcpdump.c @@ -885,20 +885,18 @@ main(int argc, char **argv) if (pcap_findalldevs(&devpointer, ebuf) < 0) error("%s", ebuf); - else { - /* - * Look for the devnum-th entry - * in the list of devices - * (1-based). - */ - for (i = 0; - i < devnum-1 && devpointer != NULL; - i++, devpointer = devpointer->next) - ; - if (devpointer == NULL) - error("Invalid adapter index"); - } - device = devpointer->name; + /* + * Look for the devnum-th entry in the + * list of devices (1-based). + */ + for (i = 0; + i < devnum-1 && devpointer != NULL; + i++, devpointer = devpointer->next) + ; + if (devpointer == NULL) + error("Invalid adapter index"); + device = strdup(devpointer->name); + pcap_freealldevs(devpointer); break; } #endif /* HAVE_PCAP_FINDALLDEVS */ @@ -1292,8 +1290,11 @@ main(int argc, char **argv) */ if (device == NULL) { #ifdef HAVE_PCAP_FINDALLDEVS - if (pcap_findalldevs(&devpointer, ebuf) >= 0 && devpointer != NULL) - device = devpointer->name; + if (pcap_findalldevs(&devpointer, ebuf) >= 0 && + devpointer != NULL) { + device = strdup(devpointer->name); + pcap_freealldevs(devpointer); + } #else /* HAVE_PCAP_FINDALLDEVS */ device = pcap_lookupdev(ebuf); #endif