$NetBSD: patch-ai,v 1.2 2012/08/23 13:10:52 is Exp $

--- src/if.c.orig	2006-04-02 14:29:42.000000000 +0000
+++ src/if.c
@@ -99,7 +99,7 @@ static	int	dl_addrlen;
 
 static unsigned char *bpfBuffer;	/* Packet filter buffer */
 static int bpfLength = 0;		/* Packet filter buffer length */
-static int bpfSize = 0;		        /* Number of unread bytes in buffer */
+int bpfSize = 0;		        /* Number of unread bytes in buffer */
 static int bpfOffset = 0;		/* Current offset in bpfBuffer */
 #endif
 
@@ -152,7 +152,7 @@ getHWaddr(int sock, char const *ifname, 
     const struct sockaddr_dl *sdl;
     struct ifconf ifc;
     struct ifreq ifreq, *ifr;
-    int i;
+    int i,l;
     int found = 0;
 
     ifc.ifc_len = sizeof(inbuf);
@@ -164,10 +164,12 @@ getHWaddr(int sock, char const *ifname, 
     ifreq.ifr_name[0] = '\0';
     for (i = 0; i < ifc.ifc_len; ) {
 	ifr = (struct ifreq *)((caddr_t)ifc.ifc_req + i);
-	i += sizeof(ifr->ifr_name) +
-		    (ifr->ifr_addr.sa_len > sizeof(struct sockaddr)
-		    ? ifr->ifr_addr.sa_len
-		    : sizeof(struct sockaddr));
+	
+	l = sizeof(*ifr);
+	if (sizeof(ifr->ifr_name) + ifr->ifr_addr.sa_len > l) 
+		l = sizeof(ifr->ifr_name) + ifr->ifr_addr.sa_len;
+	i += l;
+
 	if (ifr->ifr_addr.sa_family == AF_LINK) {
 	    sdl = (const struct sockaddr_dl *) &ifr->ifr_addr;
 	    if ((sdl->sdl_type == IFT_ETHER) &&
