Subject: racoon broken in -current: grab_myaddrs and SIOCGIFCONF
To: Matthew Grooms <mgrooms@shrew.net>
From: Greg Troxel <gdt@ir.bbn.com>
List: tech-net
Date: 08/29/2007 10:20:23
I have found the problem.  Is racoon working for anyone on -current
without a listen statement?  Am I really the only one who uses it?

in grabmyaddr.c:grab_myaddrs, the code iterates over the returned
addresses.  There's something wrong with length calculations and perhaps
padding (not sure if kernel or racoon), and thus racoon isn't processing
any of the actual addresses.

See _IFREQ_LEN, which does not pad to alignment boundaries.  But the
kernel doesn't seem to need to pad.

The most suspicious thing is length 17 on the sockaddr_dl.

at the top of the while:

                plog(LLV_ERROR, LOCATION, NULL,
                     "get_myaddrs: ifr %p name %s family %d len %d ssi %d\n",
                     ifr,
                     ifr->ifr_name,
                     ifr->ifr_addr.sa_family,
                     ifr->ifr_addr.sa_len,
                     sizeof(struct ifreq));




2007-08-29 10:08:37: ERROR: grabmyaddrs top
2007-08-29 10:08:37: ERROR: grabmyaddrs before SIOCIFCONF
2007-08-29 10:08:37: ERROR: get_myaddrs: ifr 0x80ef800 name wm0 family 18 len 17 ssi 144
2007-08-29 10:08:37: ERROR: Unknown AF 18
2007-08-29 10:08:37: ERROR: get_myaddrs: ifr 0x80ef890 
2007-08-29 10:08:37: ERROR: get_myaddrs: ifr 0x80ef890 name MESS family 0 len 0 ssi 144