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