Nmap Development mailing list archives

Re: [nmap-svn] r23129 - nmap-exp/david/nmap-ipv6/libdnet-stripped/src


From: David Fifield <david () bamsoftware com>
Date: Wed, 11 May 2011 11:28:15 -0700

On Sun, May 08, 2011 at 08:24:03PM -0700, David Fifield wrote:
On Sun, May 08, 2011 at 08:21:24PM -0700, commit-mailer () insecure org wrote:
Author: david
Date: Sun May  8 20:21:24 2011
New Revision: 23129

Log:
Use 4-byte sockaddr alignment, not 8-byte, in rt_msghdr.

4 bytes seems to be the right number on OS X, despite Unix Network
Programming that states 8 bytes.

Modified:
   nmap-exp/david/nmap-ipv6/libdnet-stripped/src/route-bsd.c

Modified: nmap-exp/david/nmap-ipv6/libdnet-stripped/src/route-bsd.c
==============================================================================
--- nmap-exp/david/nmap-ipv6/libdnet-stripped/src/route-bsd.c       (original)
+++ nmap-exp/david/nmap-ipv6/libdnet-stripped/src/route-bsd.c       Sun May  8 20:21:24 2011
@@ -43,8 +43,14 @@
 
 #include "dnet.h"
 
+/* Unix Network Programming, 3rd edition says that sockaddr structures in
+   rt_msghdr should be padded so their addresses start on a multiple of
+   sizeof(u_long). But on 64-bit Mac OS X 10.6 at least, this is false. Apple's
+   netstat code uses 4-byte padding, not 8-byte. This is relevant for IPv6
+   addresses, for which sa_len == 28.
+   http://www.opensource.apple.com/source/network_cmds/network_cmds-329.2.2/netstat.tproj/route.c */
 #define ROUNDUP(a) \
-   ((a) > 0 ? (1 + (((a) - 1) | (sizeof(long) - 1))) : sizeof(long))
+   ((a) > 0 ? (1 + (((a) - 1) | (sizeof(uint32_t) - 1))) : sizeof(uint32_t))
 
 #ifdef HAVE_SOCKADDR_SA_LEN
 #define NEXTSA(s) \

I spent a few hours tracking this down to make routes work in the IPv6
branch. I am not sure this patch is universally right, because every
source that I've found, except for Apple's source code, says that this
rounding should be to sizeof(unsigned long), which on this platform is 8
bytes. But 8 bytes definitely doesn't work for me, and 4 bytes does.

Daniel Roethlisberger kindly did some tests and found that 4-byte
rounding is definitely wrong on 64-bit FreeBSD. So I think we will have
to make this detectable by the configuration program.

David Fifield
_______________________________________________
Sent through the nmap-dev mailing list
http://cgi.insecure.org/mailman/listinfo/nmap-dev
Archived at http://seclists.org/nmap-dev/


Current thread: