]> The Tcpdump Group git mirrors - tcpdump/commitdiff
Free up lists we get from pcap_findalldevs().
authorGuy Harris <[email protected]>
Mon, 21 Sep 2015 22:35:42 +0000 (15:35 -0700)
committerGuy Harris <[email protected]>
Mon, 21 Sep 2015 22:35:42 +0000 (15:35 -0700)
That means we need to make a copy of a name we get from the list.

tcpdump.c

index a0c627c66361cb9cc2f2fd3f76fbc31db2fc9c98..cebc1f2dc0c65662e5bc782e0c03b97b275664c9 100644 (file)
--- 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