components/nmap/patches/nmap-6.25-parfait.patch
author Jiri Sasek <Jiri.Sasek@Oracle.COM>
Wed, 27 Nov 2013 01:24:30 -0800
branchs11u1-sru
changeset 2835 30703b11b244
parent 2588 882be62c9698
permissions -rw-r--r--
17813159 Update samba to 3.6.20 release. 17621167 Update samba to 3.6.19 release or upper to address a known Winbindd issue 17790879 problem in UTILITY/SAMBA
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2588
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
     1
As part of the update of nmap to version 6.25, a 3PSC form was created:
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
     2
http://psarc.us.oracle.com/arc/PSARC/2012/376/nmap_6.25_3PSC_20121218.txt
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
     3
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
     4
To answer one of the questions, a Parfait code analysis of the nmap 6.25
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
     5
code was run. The results were reported upstream:
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
     6
http://seclists.org/nmap-dev/2012/q4/412
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
     7
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
     8
The nmap maintainers analyzed these results and responded:
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
     9
http://seclists.org/nmap-dev/2012/q4/504
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    10
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    11
This is the patch they generated, with just 'nmap-6.25/' prepended to
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    12
the filenames on the "^--- " and "+++ " diff lines.
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    13
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    14
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    15
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    16
From a632df5fbeecf6271aadbd3bcc1c927977a7ba2c Mon Sep 17 00:00:00 2001
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    17
From: David Fifield <[email protected]>
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    18
Date: Thu, 20 Dec 2012 22:22:49 -0800
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    19
Subject: [PATCH 1/4] Add an ncat_assert macro.
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    20
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    21
This is an assert that will remain even if NDEBUG is defined.
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    22
---
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    23
 ncat/util.h |    7 +++++++
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    24
 1 file changed, 7 insertions(+)
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    25
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    26
diff --git ncat/util.h ncat/util.h
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    27
index bf9b42e..18de755 100644
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    28
--- nmap-6.25/ncat/util.h
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    29
+++ nmap-6.25/ncat/util.h
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    30
@@ -127,6 +127,13 @@ void logdebug(const char *fmt, ...)
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    31
      __attribute__ ((format (printf, 1, 2)));
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    32
 
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    33
 /* handle errors */
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    34
+
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    35
+#define ncat_assert(expr) \
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    36
+do { \
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    37
+        if (!(expr)) \
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    38
+                bye("assertion failed: %s", #expr); \
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    39
+} while (0)
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    40
+
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    41
 void die(char *);
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    42
 
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    43
 void bye(const char *, ...)
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    44
-- 
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    45
1.7.10.4
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    46
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    47
From cf5b5e2f5fdd4f7744e91c097d0395736e0744ab Mon Sep 17 00:00:00 2001
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    48
From: David Fifield <[email protected]>
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    49
Date: Thu, 20 Dec 2012 22:32:03 -0800
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    50
Subject: [PATCH 2/4] Assert that get_fdinfo doesn't return NULL.
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    51
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    52
Resolves these Parfait reports
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    53
(http://seclists.org/nmap-dev/2012/q4/412).
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    54
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    55
Error: Null pointer dereference (CWE 476)
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    56
    Read from null pointer 'fdn'
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    57
         at line 328 of components/nmap/build/amd64/ncat/ncat_core.c in function 'blocking_fdinfo_send'.
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    58
           Function 'get_fdinfo' may return constant 'NULL' at line 615, called at line 366 in function 'ncat_broadcast'.
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    59
           Constant 'NULL' passed into function 'blocking_fdinfo_send', argument 'fdn', from call at line 367.
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    60
           Null pointer introduced at line 615 of components/nmap/build/amd64/ncat/util.c in function 'get_fdinfo'.
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    61
         at line 330 of components/nmap/build/amd64/ncat/ncat_core.c in function 'blocking_fdinfo_send'.
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    62
           Function 'get_fdinfo' may return constant 'NULL' at line 615, called at line 366 in function 'ncat_broadcast'.
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    63
           Constant 'NULL' passed into function 'blocking_fdinfo_send', argument 'fdn', from call at line 367.
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    64
           Null pointer introduced at line 615 of components/nmap/build/amd64/ncat/util.c in function 'get_fdinfo'.
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    65
Error: Null pointer dereference (CWE 476)
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    66
    Read from null pointer 'fdn'
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    67
         at line 946 of components/nmap/build/amd64/ncat/ncat_listen.c in function 'shutdown_sockets'.
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    68
           Function 'get_fdinfo' may return constant 'NULL' at line 615, called at line 945.
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    69
           Null pointer introduced at line 615 of components/nmap/build/amd64/ncat/util.c in function 'get_fdinfo'.
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    70
---
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    71
 ncat/ncat_core.c   |    1 +
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    72
 ncat/ncat_listen.c |    6 ++++--
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    73
 2 files changed, 5 insertions(+), 2 deletions(-)
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    74
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    75
diff --git ncat/ncat_core.c ncat/ncat_core.c
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    76
index e6cb16c..42cf389 100644
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    77
--- nmap-6.25/ncat/ncat_core.c
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    78
+++ nmap-6.25/ncat/ncat_core.c
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    79
@@ -364,6 +364,7 @@ int ncat_broadcast(fd_set *fds, const fd_list_t *fdlist, const char *msg, size_t
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    80
             continue;
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    81
 
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    82
         fdn = get_fdinfo(fdlist, i);
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    83
+        ncat_assert(fdn != NULL);
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    84
         if (blocking_fdinfo_send(fdn, msg, size) <= 0) {
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    85
             if (o.debug > 1)
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    86
                 logdebug("Error sending to fd %d: %s.\n", i, socket_strerror(socket_errno()));
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    87
diff --git ncat/ncat_listen.c ncat/ncat_listen.c
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    88
index 5a0b502..3e0a104 100644
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    89
--- nmap-6.25/ncat/ncat_listen.c
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    90
+++ nmap-6.25/ncat/ncat_listen.c
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    91
@@ -293,6 +293,7 @@ static int ncat_listen_stream(int proto)
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    92
                 FD_CLR(i, &master_readfds);
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    93
                 FD_CLR(i, &master_writefds);
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    94
                 fdi = get_fdinfo(&client_fdlist, i);
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    95
+                ncat_assert(fdi != NULL);
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    96
                 switch (ssl_handshake(fdi)) {
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    97
                 case NCAT_SSL_HANDSHAKE_COMPLETED:
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    98
                     /* Clear from sslpending_fds once ssl is established */
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
    99
@@ -535,7 +536,7 @@ int read_socket(int recv_fd)
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   100
     int nbytes, pending;
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   101
 
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   102
     fdn = get_fdinfo(&client_fdlist, recv_fd);
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   103
-    assert(fdn != NULL);
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   104
+    ncat_assert(fdn != NULL);
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   105
 
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   106
     nbytes = 0;
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   107
     do {
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   108
@@ -838,7 +839,7 @@ static void read_and_broadcast(int recv_fd)
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   109
     int pending;
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   110
 
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   111
     fdn = get_fdinfo(&client_fdlist, recv_fd);
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   112
-    assert(fdn);
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   113
+    ncat_assert(fdn != NULL);
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   114
 
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   115
     /* Loop while ncat_recv indicates data is pending. */
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   116
     do {
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   117
@@ -943,6 +944,7 @@ static void shutdown_sockets(int how)
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   118
             continue;
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   119
 
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   120
         fdn = get_fdinfo(&broadcast_fdlist, i);
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   121
+        ncat_assert(fdn != NULL);
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   122
         shutdown(fdn->fd, how);
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   123
     }
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   124
 }
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   125
-- 
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   126
1.7.10.4
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   127
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   128
From b7b822c8a0f4810d19d5b061c6fbaac0a2ad5723 Mon Sep 17 00:00:00 2001
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   129
From: David Fifield <[email protected]>
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   130
Date: Fri, 21 Dec 2012 12:22:30 -0800
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   131
Subject: [PATCH 3/4] Make PortList::mapPort return void.
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   132
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   133
Contrary to the doc comment, this function could never return false but
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   134
only cause a fatal error.
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   135
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   136
Resolves these Parfait reports
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   137
(http://seclists.org/nmap-dev/2012/q4/412).
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   138
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   139
Error: Null pointer dereference (CWE 476)
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   140
    Read from null pointer 'port'
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   141
         at line 344 of components/nmap/build/amd64/portlist.cc in function 'PortList::setServiceProbeResults(unsigned short, int, serviceprobestate, char const*, service_tunnel_type, char const*, char const*, char const*, char const*, char const*, char const*, std::vector<char const*, std::allocator<char const*> > const*, char const*)'.
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   142
           Function 'PortList::createPort(unsigned short, unsigned char)' may return constant 'NULL' at line 671, called at line 343.
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   143
           Null pointer introduced at line 671 in function 'PortList::createPort(unsigned short, unsigned char)'.
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   144
Error: Null pointer dereference (CWE 476)
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   145
    Write to null pointer 'current'
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   146
         at line 520 of components/nmap/build/amd64/portlist.cc in function 'PortList::setPortState(unsigned short, unsigned char, int)'.
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   147
           Function 'PortList::createPort(unsigned short, unsigned char)' may return constant 'NULL' at line 671, called at line 518.
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   148
           Null pointer introduced at line 671 in function 'PortList::createPort(unsigned short, unsigned char)'.
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   149
Error: Null pointer dereference (CWE 476)
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   150
    Write to null pointer 'answer'
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   151
         at line 880 of components/nmap/build/amd64/portlist.cc in function 'PortList::setStateReason(unsigned short, unsigned char, unsigned short, unsigned char, sockaddr_storage const*)'.
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   152
           Function 'PortList::createPort(unsigned short, unsigned char)' may return constant 'NULL' at line 671, called at line 877.
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   153
           Null pointer introduced at line 671 in function 'PortList::createPort(unsigned short, unsigned char)'.
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   154
         at line 885 of components/nmap/build/amd64/portlist.cc in function 'PortList::setStateReason(unsigned short, unsigned char, unsigned short, unsigned char, sockaddr_storage const*)'.
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   155
           Function 'PortList::createPort(unsigned short, unsigned char)' may return constant 'NULL' at line 671, called at line 877.
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   156
           Null pointer introduced at line 671 in function 'PortList::createPort(unsigned short, unsigned char)'.
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   157
---
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   158
 portlist.cc |   17 +++++------------
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   159
 portlist.h  |    2 +-
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   160
 2 files changed, 6 insertions(+), 13 deletions(-)
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   161
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   162
diff --git portlist.cc portlist.cc
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   163
index 0c8af80..cd40d04 100644
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   164
--- nmap-6.25/portlist.cc
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   165
+++ nmap-6.25/portlist.cc
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   166
@@ -629,8 +629,8 @@ Port *PortList::nextPort(const Port *cur, Port *next,
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   167
 }
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   168
 
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   169
 /* Convert portno and protocol into the internal indices used to index
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   170
-   port_list. Returns false on error, true otherwise. */
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   171
-bool PortList::mapPort(u16 *portno, u8 *protocol) const {
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   172
+   port_list. */
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   173
+void PortList::mapPort(u16 *portno, u8 *protocol) const {
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   174
   int mapped_portno, mapped_protocol;
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   175
 
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   176
   mapped_protocol = INPROTO2PORTLISTPROTO(*protocol);
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   177
@@ -638,7 +638,6 @@ bool PortList::mapPort(u16 *portno, u8 *protocol) const {
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   178
   if (*protocol == IPPROTO_IP)
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   179
     assert(*portno < 256);
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   180
   if(port_map[mapped_protocol]==NULL || port_list[mapped_protocol]==NULL) {
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   181
-    assert(0);
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   182
     fatal("%s(%i,%i): you're trying to access uninitialized protocol", __func__, *portno, *protocol);
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   183
   }
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   184
   mapped_portno = port_map[mapped_protocol][*portno];
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   185
@@ -648,14 +647,10 @@ bool PortList::mapPort(u16 *portno, u8 *protocol) const {
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   186
 
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   187
   *portno = mapped_portno;
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   188
   *protocol = mapped_protocol;
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   189
-
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   190
-  return true;
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   191
 }
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   192
 
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   193
 const Port *PortList::lookupPort(u16 portno, u8 protocol) const {
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   194
-  if (!mapPort(&portno, &protocol))
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   195
-    return NULL;
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   196
-
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   197
+  mapPort(&portno, &protocol);
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   198
   return port_list[protocol][portno];
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   199
 }
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   200
 
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   201
@@ -667,8 +662,7 @@ Port *PortList::createPort(u16 portno, u8 protocol) {
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   202
 
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   203
   mapped_portno = portno;
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   204
   mapped_protocol = protocol;
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   205
-  if (!mapPort(&mapped_portno, &mapped_protocol))
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   206
-    return NULL;
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   207
+  mapPort(&mapped_portno, &mapped_protocol);
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   208
 
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   209
   p = port_list[mapped_protocol][mapped_portno];
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   210
   if (p == NULL) {
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   211
@@ -688,8 +682,7 @@ int PortList::forgetPort(u16 portno, u8 protocol) {
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   212
 
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   213
   log_write(LOG_PLAIN, "Removed %d\n", portno);
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   214
 
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   215
-  if (!mapPort(&portno, &protocol))
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   216
-    return -1;
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   217
+  mapPort(&portno, &protocol);
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   218
 
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   219
   answer = port_list[protocol][portno];
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   220
   if (answer == NULL)
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   221
diff --git portlist.h portlist.h
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   222
index 8eaee1c..d7faf71 100644
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   223
--- nmap-6.25/portlist.h
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   224
+++ nmap-6.25/portlist.h
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   225
@@ -290,7 +290,7 @@ class PortList {
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   226
   bool hasOpenPorts() const;
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   227
 
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   228
  private:
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   229
-  bool mapPort(u16 *portno, u8 *protocol) const;
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   230
+  void mapPort(u16 *portno, u8 *protocol) const;
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   231
   /* Get Port structure from PortList structure.*/
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   232
   const Port *lookupPort(u16 portno, u8 protocol) const;
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   233
   Port *createPort(u16 portno, u8 protocol);
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   234
-- 
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   235
1.7.10.4
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   236
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   237
From 536eb67f24f9f101cd4aa1c82510ebbe8086923d Mon Sep 17 00:00:00 2001
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   238
From: David Fifield <[email protected]>
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   239
Date: Fri, 21 Dec 2012 13:09:56 -0800
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   240
Subject: [PATCH 4/4] Make ServiceNFO::currentprobe_timemsleft take a probe
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   241
 argument.
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   242
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   243
It seems that this function was usually called after having called
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   244
currentProbe outside the call to currentprobe_timemsleft, with the call
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   245
to currentProbe inside the function having the same result. This is a
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   246
bit tenuous, so make the probe we're talking about explicit.
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   247
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   248
Resolves these Parfait reports
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   249
(http://seclists.org/nmap-dev/2012/q4/412).
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   250
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   251
Error: Null pointer dereference (CWE 476)
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   252
    Read from null pointer 'ServiceNFO::currentProbe(this)'
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   253
         at line 1813 of components/nmap/build/amd64/service_scan.cc in function 'ServiceNFO::currentprobe_timemsleft(timeval const*)'.
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   254
           Function 'ServiceNFO::currentProbe()' may return constant 'NULL' at line 1707, called at line 1813.
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   255
           Null pointer introduced at line 1707 in function 'ServiceNFO::currentProbe()'.
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   256
---
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   257
 service_scan.cc |   25 ++++++++++++++-----------
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   258
 1 file changed, 14 insertions(+), 11 deletions(-)
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   259
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   260
diff --git service_scan.cc service_scan.cc
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   261
index b800665..9428a9a 100644
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   262
--- nmap-6.25/service_scan.cc
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   263
+++ nmap-6.25/service_scan.cc
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   264
@@ -191,7 +191,7 @@ public:
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   265
   // Number of milliseconds left to complete the present probe, or 0 if
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   266
   // the probe is already expired.  Timeval can omitted, it is just there 
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   267
   // as an optimization in case you have it handy.
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   268
-  int currentprobe_timemsleft(const struct timeval *now = NULL);
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   269
+  int probe_timemsleft(const ServiceProbe *probe, const struct timeval *now = NULL);
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   270
   enum serviceprobestate probe_state; // defined in portlist.h
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   271
   nsock_iod niod; // The IO Descriptor being used in this probe (or NULL)
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   272
   u16 portno; // in host byte order
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   273
@@ -1799,7 +1799,7 @@ void ServiceNFO::resetProbes(bool freefp) {
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   274
 }
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   275
 
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   276
 
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   277
-int ServiceNFO::currentprobe_timemsleft(const struct timeval *now) {
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   278
+int ServiceNFO::probe_timemsleft(const ServiceProbe *probe, const struct timeval *now) {
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   279
   int timeused, timeleft;
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   280
 
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   281
   if (now)
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   282
@@ -1810,7 +1810,11 @@ int ServiceNFO::currentprobe_timemsleft(const struct timeval *now) {
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   283
     timeused = TIMEVAL_MSEC_SUBTRACT(tv, currentprobe_exec_time);
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   284
   }
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   285
 
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   286
-  timeleft = currentProbe()->totalwaitms - timeused;
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   287
+  // Historically this function was always called with the assumption that
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   288
+  // probe == currentProbe(). Check that this remains the case.
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   289
+  assert(probe == currentProbe());
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   290
+
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   291
+  timeleft = probe->totalwaitms - timeused;
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   292
   return (timeleft < 0)? 0 : timeleft;
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   293
 }
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   294
 
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   295
@@ -1941,7 +1945,7 @@ static void adjustPortStateIfNecessary(ServiceNFO *svc) {
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   296
     probestring = probe->getProbeString(&probestringlen);
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   297
     assert(probestringlen > 0);
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   298
     // Now we write the string to the IOD
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   299
-    nsock_write(nsp, nsi, servicescan_write_handler, svc->currentprobe_timemsleft(), svc,
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   300
+    nsock_write(nsp, nsi, servicescan_write_handler, svc->probe_timemsleft(probe), svc,
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   301
 		(const char *) probestring, probestringlen);
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   302
     return 0;
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   303
   }
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   304
@@ -1967,7 +1971,7 @@ static void startNextProbe(nsock_pool nsp, nsock_iod nsi, ServiceGroup *SG,
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   305
       svc->currentprobe_exec_time = *nsock_gettimeofday();
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   306
       send_probe_text(nsp, nsi, svc, probe);
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   307
       nsock_read(nsp, nsi, servicescan_read_handler, 
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   308
-		 svc->currentprobe_timemsleft(nsock_gettimeofday()), svc);
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   309
+		 svc->probe_timemsleft(probe, nsock_gettimeofday()), svc);
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   310
     } else {
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   311
       // Should only happen if someone has a highly perverse nmap-service-probes
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   312
       // file.  Null scan should generally never be the only probe.
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   313
@@ -2016,7 +2020,7 @@ static void startNextProbe(nsock_pool nsp, nsock_iod nsi, ServiceGroup *SG,
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   314
 	send_probe_text(nsp, nsi, svc, probe);
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   315
 	// Now let us read any results
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   316
 	nsock_read(nsp, nsi, servicescan_read_handler, 
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   317
-		   svc->currentprobe_timemsleft(nsock_gettimeofday()), svc);
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   318
+		   svc->probe_timemsleft(probe, nsock_gettimeofday()), svc);
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   319
       }
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   320
     } else {
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   321
       // No more probes remaining!  Failed to match
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   322
@@ -2261,7 +2265,7 @@ static void servicescan_connect_handler(nsock_pool nsp, nsock_event nse, void *m
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   323
     svc->currentprobe_exec_time = *nsock_gettimeofday();
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   324
     send_probe_text(nsp, nsi, svc, probe);
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   325
     // Now let us read any results
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   326
-    nsock_read(nsp, nsi, servicescan_read_handler, svc->currentprobe_timemsleft(nsock_gettimeofday()), svc);
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   327
+    nsock_read(nsp, nsi, servicescan_read_handler, svc->probe_timemsleft(probe, nsock_gettimeofday()), svc);
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   328
   } else if (status == NSE_STATUS_TIMEOUT || status == NSE_STATUS_ERROR) {
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   329
       // This is not good.  The connect() really shouldn't generally
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   330
       // be timing out like that.  We'll mark this svc as incomplete
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   331
@@ -2421,13 +2425,12 @@ static void servicescan_read_handler(nsock_pool nsp, nsock_event nse, void *myda
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   332
       // to timeout.  For now I'll limit it to 4096 bytes just to
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   333
       // avoid reading megs from services like chargen.  But better
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   334
       // approach is needed.
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   335
-      if (svc->currentprobe_timemsleft() > 0 && readstrlen < 4096) { 
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   336
-	nsock_read(nsp, nsi, servicescan_read_handler, svc->currentprobe_timemsleft(), svc);
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   337
+      if (svc->probe_timemsleft(probe) > 0 && readstrlen < 4096) { 
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   338
+	nsock_read(nsp, nsi, servicescan_read_handler, svc->probe_timemsleft(probe), svc);
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   339
       } else {
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   340
 	// Failed -- lets go to the next probe.
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   341
 	if (readstrlen > 0)
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   342
-	  svc->addToServiceFingerprint(svc->currentProbe()->getName(), readstr, 
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   343
-				       readstrlen);
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   344
+	  svc->addToServiceFingerprint(probe->getName(), readstr, readstrlen);
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   345
 	startNextProbe(nsp, nsi, SG, svc, false);
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   346
       }
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   347
     }
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   348
-- 
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   349
1.7.10.4
882be62c9698 15953796 Upgrade nmap to 6.25
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff changeset
   350