From ee1156eb51e83077ca35b421e64edc3c5ae7ad81 Mon Sep 17 00:00:00 2001 From: dmiller Date: Thu, 5 Mar 2015 22:09:49 +0000 Subject: [PATCH] Fix a NULL pointer dereference in libdnet-stripped Reported and diagnosed by Gisle Vanem. Fixes #70 --- libdnet-stripped/NMAP_MODIFICATIONS | 18 ++++++++++++++++++ libdnet-stripped/src/intf-win32.c | 3 ++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/libdnet-stripped/NMAP_MODIFICATIONS b/libdnet-stripped/NMAP_MODIFICATIONS index fa62cb720..acbdf20ab 100644 --- a/libdnet-stripped/NMAP_MODIFICATIONS +++ b/libdnet-stripped/NMAP_MODIFICATIONS @@ -2032,3 +2032,21 @@ index 22c2d59..22c1e6a 100644 intf_close(intf); return (-1); } + +o Fix a crash on Windows 8.1 with certain down interfaces: + http://seclists.org/nmap-dev/2015/q1/282 + +diff --git a/libdnet-stripped/src/intf-win32.c b/libdnet-stripped/src/intf-win32.c +index 22c1e6a..3c09f9c 100644 +--- a/libdnet-stripped/src/intf-win32.c ++++ b/libdnet-stripped/src/intf-win32.c +@@ -262,7 +262,8 @@ _find_adapter_address(intf_t *intf, const char *device) + n = atoi(p); + + for (a = intf->iftable; a != NULL; a = a->Next) { +- if (intf->ifcombo[type].idx[n].ipv4 == a->IfIndex && ++ if ( intf->ifcombo[type].idx != NULL && ++ intf->ifcombo[type].idx[n].ipv4 == a->IfIndex && + intf->ifcombo[type].idx[n].ipv6 == a->Ipv6IfIndex) { + return a; + } diff --git a/libdnet-stripped/src/intf-win32.c b/libdnet-stripped/src/intf-win32.c index 22c1e6af7..3c09f9ca9 100644 --- a/libdnet-stripped/src/intf-win32.c +++ b/libdnet-stripped/src/intf-win32.c @@ -262,7 +262,8 @@ _find_adapter_address(intf_t *intf, const char *device) n = atoi(p); for (a = intf->iftable; a != NULL; a = a->Next) { - if (intf->ifcombo[type].idx[n].ipv4 == a->IfIndex && + if ( intf->ifcombo[type].idx != NULL && + intf->ifcombo[type].idx[n].ipv4 == a->IfIndex && intf->ifcombo[type].idx[n].ipv6 == a->Ipv6IfIndex) { return a; }