mirror of
https://git.freebsd.org/ports.git
synced 2025-05-25 15:36:35 -04:00
52 lines
1.7 KiB
C
52 lines
1.7 KiB
C
--- misc/pcap.c.orig 2015-08-03 10:14:29 UTC
|
|
+++ misc/pcap.c
|
|
@@ -631,13 +631,12 @@ getinterfaces (int *howmany)
|
|
static struct interface_info mydevs[1024];
|
|
int numinterfaces = 0;
|
|
int sd;
|
|
- int len;
|
|
+ size_t n;
|
|
char *p;
|
|
char buf[10240];
|
|
struct ifconf ifc;
|
|
struct ifreq *ifr;
|
|
struct sockaddr_in *sin;
|
|
- char *bufp;
|
|
|
|
/* Dummy socket for ioctl. */
|
|
sd = socket (AF_INET, SOCK_DGRAM, 0);
|
|
@@ -655,12 +654,8 @@ getinterfaces (int *howmany)
|
|
log_legacy_write
|
|
("getinterfaces: SIOCGIFCONF claims you have no network interfaces!");
|
|
|
|
- len = sizeof (struct ifmap);
|
|
-
|
|
- for (bufp = buf; bufp && *bufp && (bufp < (buf + ifc.ifc_len));
|
|
- bufp += sizeof (ifr->ifr_name) + len)
|
|
+ for (ifr = (struct ifreq *) buf; (char *) ifr < buf + ifc.ifc_len; )
|
|
{
|
|
- ifr = (struct ifreq *) bufp;
|
|
sin = (struct sockaddr_in *) &ifr->ifr_addr;
|
|
memcpy (&(mydevs[numinterfaces].addr), (char *) &(sin->sin_addr),
|
|
sizeof (struct in_addr));
|
|
@@ -670,6 +665,7 @@ getinterfaces (int *howmany)
|
|
strncpy (mydevs[numinterfaces].name, ifr->ifr_name, 63);
|
|
mydevs[numinterfaces].name[63] = '\0';
|
|
numinterfaces++;
|
|
+ mydevs[numinterfaces].name[0] = '\0';
|
|
if (numinterfaces == 1023)
|
|
{
|
|
log_legacy_write
|
|
@@ -677,7 +673,11 @@ getinterfaces (int *howmany)
|
|
" Things may not work right.");
|
|
break;
|
|
}
|
|
- mydevs[numinterfaces].name[0] = '\0';
|
|
+ n = offsetof(struct ifreq, ifr_addr) + ifr->ifr_addr.sa_len;
|
|
+ if (n < sizeof(*ifr))
|
|
+ ifr++;
|
|
+ else
|
|
+ ifr = (struct ifreq *)((char *)ifr + n);
|
|
}
|
|
|
|
// If output parameter given, set value
|