X-Git-Url: https://git.tcpdump.org/libpcap/blobdiff_plain/10d7a3c17283fb3f97753a3f291468af774e871f..09b51d326c38ea8e10ce4da09c09d50e08c5aeb8:/pcap-snit.c diff --git a/pcap-snit.c b/pcap-snit.c index 77cb07f9..3f4e69d7 100644 --- a/pcap-snit.c +++ b/pcap-snit.c @@ -53,7 +53,6 @@ #include #include -#include #include #include #include @@ -140,6 +139,9 @@ pcap_read_snit(pcap_t *p, int cnt, pcap_handler callback, u_char *user) /* * loop through each snapshot in the chunk + * + * This assumes that a single buffer of packets will have + * <= INT_MAX packets, so the packet count doesn't overflow. */ n = 0; ep = bp + cc; @@ -332,12 +334,16 @@ pcap_activate_snit(pcap_t *p) if (fd < 0 && errno == EACCES) p->fd = fd = open(dev, O_RDONLY); if (fd < 0) { - if (errno == EACCES) + if (errno == EACCES) { err = PCAP_ERROR_PERM_DENIED; - else + snprintf(p->errbuf, PCAP_ERRBUF_SIZE, + "Attempt to open %s failed with EACCES - root privileges may be required", + dev); + } else { err = PCAP_ERROR; - pcap_fmt_errmsg_for_errno(p->errbuf, PCAP_ERRBUF_SIZE, - errno, "%s", dev); + pcap_fmt_errmsg_for_errno(p->errbuf, PCAP_ERRBUF_SIZE, + errno, "%s", dev); + } goto bad; } @@ -460,7 +466,7 @@ pcap_create_interface(const char *device _U_, char *ebuf) { pcap_t *p; - p = pcap_create_common(ebuf, sizeof (struct pcap_snit)); + p = PCAP_CREATE_COMMON(ebuf, struct pcap_snit); if (p == NULL) return (NULL);