]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
Merge pull request #381 in SNORT/snort3 from bug_fixes1 to master
authorRuss Combs (rucombs) <rucombs@cisco.com>
Wed, 30 Mar 2016 20:54:00 +0000 (16:54 -0400)
committerRuss Combs (rucombs) <rucombs@cisco.com>
Wed, 30 Mar 2016 20:54:00 +0000 (16:54 -0400)
Squashed commit of the following:

commit c5e9690c300e1d28fca5e5fcfa96c25e6a08d200
Author: Steve Chew <stechew@cisco.com>
Date:   Wed Mar 30 15:58:16 2016 -0400

    Updates based on reviews.

commit 98cad5e2a1ac5b49cfed171b2366d0307c852a4b
Author: Steve Chew <stechew@cisco.com>
Date:   Wed Mar 30 13:43:27 2016 -0400

    Bug fixes for problems found while investigating protocol usage.

src/protocols/layer.cc
src/protocols/protocol_ids.h
src/service_inspectors/ftp_telnet/pp_ftp.cc
src/service_inspectors/sip/sip_dialog.cc
src/target_based/sftarget_reader.cc
src/target_based/snort_protocols.h

index ccabd9ec818e030679d52e097776fc15d7a970de..2fc572575f96b950264b3f9307cbf2cff9243fa3 100644 (file)
@@ -20,7 +20,6 @@
 #include "layer.h"
 
 #include <netinet/in.h>
-#include <limits>
 #include "protocols/layer.h"
 #include "protocols/protocol_ids.h"
 #include "protocols/packet.h"
@@ -238,9 +237,7 @@ bool set_inner_ip_api(const Packet* const p,
     if (curr_layer < 0 || curr_layer >= p->num_layers)
         return false;
 
-    const uint16_t proto = p->layers[curr_layer].prot_id;
-    const uint8_t ip_proto_max = std::numeric_limits<uint8_t>::max();
-    if ( (proto <= ip_proto_max) && is_ip6_extension((uint8_t)proto) )
+    if (is_ip6_extension(p->layers[curr_layer].prot_id))
     {
         const ip::IP6Extension* const ip6_ext =
             reinterpret_cast<const ip::IP6Extension*>(p->layers[curr_layer].start);
index c5e4f3624e43eee0cdfc0f88a43aa2adb012d374..497dcbc69ad97286872c44d87cf2efff9d5793ca 100644 (file)
@@ -92,8 +92,11 @@ constexpr uint16_t ETHERTYPE_PPP = 0x880B;
 constexpr uint16_t ETHERTYPE_EAPOL = 0x888e;
 constexpr uint16_t ETHERTYPE_FPATH = 0x8903;
 
-inline bool is_ip6_extension(const uint8_t proto)
+inline bool is_ip6_extension(const uint16_t proto)
 {
+    if(proto > UINT8_MAX)
+        return false;
+
     switch (proto)
     {
     case IPPROTO_ID_HOPOPTS:
index c778f9fd8243853a18c091681fd87d951128b3d7..57a82757f55fcbc9ba8ea77c0d4522d5778646c0 100644 (file)
@@ -1090,8 +1090,8 @@ static int do_stateful_checks(FTP_SESSION* session, Packet* p,
                                 stream.ignore_session(
                                     &session->clientIP, session->clientPort,
                                     &session->serverIP, session->serverPort,
-                                    p->type(), FtpDataFlowData::flow_id,
-                                    SSN_DIR_BOTH);
+                                    p->type(), SSN_DIR_BOTH, 
+                                    FtpDataFlowData::flow_id);
                             }
                         }
                     }
@@ -1162,8 +1162,8 @@ static int do_stateful_checks(FTP_SESSION* session, Packet* p,
                             stream.ignore_session(
                                 &session->clientIP, session->clientPort,
                                 &session->serverIP, session->serverPort,
-                                p->type(), FtpDataFlowData::flow_id,
-                                SSN_DIR_BOTH);
+                                p->type(), SSN_DIR_BOTH, 
+                                FtpDataFlowData::flow_id);
                         }
                     }
                 }
index 805e3915d142e0ddb76e575134c20ae473579387..13fc18879ac131e4e741f96082b6748da416da23 100644 (file)
@@ -419,7 +419,7 @@ static int SIP_ignoreChannels(SIP_DialogData* dialog, Packet* p, SIP_PROTO_CONF*
         else
         {
             stream.ignore_session(&mdataA->maddress, mdataA->mport, &mdataB->maddress,
-                mdataB->mport, p->type(), SipFlowData::flow_id, SSN_DIR_BOTH);
+                mdataB->mport, p->type(), SSN_DIR_BOTH, SipFlowData::flow_id);
         }
         sip_stats.ignoreChannels++;
         mdataA = mdataA->nextM;
index 1285a15b8d1cc9b8111d0761bc1a3474cebffada..8f59d89097839733c070952a8679d4787e2da905 100644 (file)
@@ -217,7 +217,7 @@ static void PrintHostAttributeEntry(HostAttributeEntry* host)
     for (i=0, app = host->services; app; app = app->next,i++)
     {
         DebugFormat(DEBUG_ATTRIBUTE, "\tService #%d:\n", i);
-        DebugFormat(DEBUG_ATTRIBUTE, "\t\tIPProtocol: %s\tPort: %s\tProtocol %s\n",
+        DebugFormat(DEBUG_ATTRIBUTE, "\t\tIPProtocol: %d\tPort: %d\tProtocol %d\n",
             app->ipproto, app->port, app->protocol);
     }
     if (i==0)
@@ -227,12 +227,12 @@ static void PrintHostAttributeEntry(HostAttributeEntry* host)
     for (i=0, app = host->clients; app; app = app->next,i++)
     {
         DebugFormat(DEBUG_ATTRIBUTE, "\tClient #%d:\n", i);
-        DebugFormat(DEBUG_ATTRIBUTE, "\t\tIPProtocol: %s\tProtocol %s\n",
+        DebugFormat(DEBUG_ATTRIBUTE, "\t\tIPProtocol: %d\tProtocol %d\n",
             app->ipproto, app->protocol);
 
         if (app->fields & APPLICATION_ENTRY_PORT)
         {
-            DebugFormat(DEBUG_ATTRIBUTE, "\t\tPort: %s\n", app->port);
+            DebugFormat(DEBUG_ATTRIBUTE, "\t\tPort: %d\n", app->port);
         }
     }
     if (i==0)
index 326310fc850ff02b2e89f3de3a9cac5283c99dd6..9acf0f60eee7f8edcedd97d429e4cda240d316c4 100644 (file)
@@ -32,6 +32,7 @@
 // other protos are added dynamically as used
 enum SnortProtocols
 {
+    //  The is_*_protocol functions depend on the order of these enums.
     SNORT_PROTO_IP = 1,
     SNORT_PROTO_ICMP,
     SNORT_PROTO_TCP,
@@ -48,7 +49,7 @@ inline bool is_builtin_protocol(int16_t proto)
 { return proto < SNORT_PROTO_MAX; }
 
 inline bool is_service_protocol(int16_t proto)
-{ return !is_network_protocol(proto); }
+{ return proto > SNORT_PROTO_UDP; }
 
 void InitializeProtocolReferenceTable(void);
 void FreeProtoocolReferenceTable(void);