1
0
mirror of https://github.com/nmap/nmap.git synced 2025-12-06 04:31:29 +00:00

Fix rt_msghdr padding on NetBSD.

NetBSD uses a fixed 64-bit padding, unlike OS X (32-bit), and unlike
other platforms (sizeof(unsigned long)). There is an RT_ROUNDUP macro
that does the right alignment; use that when available.

http://ftp.netbsd.org/pub/NetBSD/NetBSD-current/src/lib/libc/net/getifaddrs.c
http://fxr.watson.org/fxr/source/net/route.h?v=NETBSD#L270

Rounding to 4 bytes was breaking with IPv6 addresses, which are 28
bytes. The pointer was being advanced by 28 instead of 32. Compare to
r29739, somewhat similar.

Reported by Fredrik Pettai.
http://seclists.org/nmap-dev/2013/q1/384
This commit is contained in:
david
2013-06-01 16:28:44 +00:00
parent bf1de31d07
commit 02cb2931aa
3 changed files with 31 additions and 0 deletions

View File

@@ -1,5 +1,7 @@
# Nmap Changelog ($Id$); -*-text-*-
o Fixed IPv6 routing table alignment on NetBSD.
o [NSE] Added http-phpmyadmin-dir-traversal by Alexey Meshcheryakov.
o Added a service probe for Erlang distribution nodes.

View File

@@ -1887,3 +1887,26 @@ index 4fe059c..184c077 100644
/* XXX - why must this happen before SIOCSIFADDR? */
if (addr_btos(entry->intf_addr.addr_bits,
&ifr.ifr_addr) == 0) {
o Use the RT_ROUNDUP preprocessor macro for 64-bit rt_msghdr alignment
on NetBSD.
diff --git a/libdnet-stripped/src/route-bsd.c b/libdnet-stripped/src/route-bsd.c
index 44e7dd2..47f3705 100644
--- a/libdnet-stripped/src/route-bsd.c
+++ b/libdnet-stripped/src/route-bsd.c
@@ -47,8 +47,14 @@
#include "dnet.h"
+#ifdef RT_ROUNDUP
+/* NetBSD defines this macro rounding to 64-bit boundaries.
+ http://fxr.watson.org/fxr/ident?v=NETBSD;i=RT_ROUNDUP */
+#define ROUNDUP(a) RT_ROUNDUP(a)
+#else
#define ROUNDUP(a) \
((a) > 0 ? (1 + (((a) - 1) | (RT_MSGHDR_ALIGNMENT - 1))) : RT_MSGHDR_ALIGNMENT)
+#endif
#ifdef HAVE_SOCKADDR_SA_LEN
#define NEXTSA(s) \

View File

@@ -47,8 +47,14 @@
#include "dnet.h"
#ifdef RT_ROUNDUP
/* NetBSD defines this macro rounding to 64-bit boundaries.
http://fxr.watson.org/fxr/ident?v=NETBSD;i=RT_ROUNDUP */
#define ROUNDUP(a) RT_ROUNDUP(a)
#else
#define ROUNDUP(a) \
((a) > 0 ? (1 + (((a) - 1) | (RT_MSGHDR_ALIGNMENT - 1))) : RT_MSGHDR_ALIGNMENT)
#endif
#ifdef HAVE_SOCKADDR_SA_LEN
#define NEXTSA(s) \