]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
fixing PacketManager::encode_new() valgrind bug
authorJosh <jrosenba@cisco.com>
Wed, 24 Sep 2014 18:02:58 +0000 (14:02 -0400)
committerJosh <jrosenba@cisco.com>
Wed, 24 Sep 2014 18:02:58 +0000 (14:02 -0400)
src/main/snort.cc
src/protocols/packet_manager.cc
src/protocols/packet_manager.h

index 441a8666d712dec6070e0adcf5cb63b9bd729e0e..2bd8fade5b07e5124ed15763330b223b2dd10e09 100644 (file)
@@ -913,7 +913,7 @@ void snort_thread_init(const char* intf)
     DAQ_New(snort_conf, intf);
     DAQ_Start();
 
-    s_packet = PacketManager::encode_new();
+    s_packet = PacketManager::encode_new(false);
     CodecManager::thread_init();
     FileAPIPostInit();
 
index 60554bd88d87c1e317fa5127eaae0398c5b63575..6724d19fba9d7379c231d07a80f7267a95b3a5cd 100644 (file)
@@ -101,21 +101,33 @@ static inline void push_layer(Packet *p,
 // Initialization and setup
 //-------------------------------------------------------------------------
 
-Packet* PacketManager::encode_new()
+Packet* PacketManager::encode_new(bool packet_data)
 {
     Packet* p = (Packet*)SnortAlloc(sizeof(*p));
-    uint8_t* b = (uint8_t*)SnortAlloc(sizeof(*p->pkth) + Codec::PKT_MAX + SPARC_TWIDDLE);
     Layer* lyr = new Layer[CodecManager::max_layers];
 
-    if ( !p || !b || !lyr)
+    if ( !p || !lyr)
         FatalError("encode_new() => Failed to allocate packet\n");
 
-    p->pkth = (DAQ_PktHdr_t*)b;
-    b += sizeof(*p->pkth);
-    b += SPARC_TWIDDLE;
-    p->pkt = b;
-    p->layers = lyr;
+    if (!packet_data)
+    {
+        p->pkt = nullptr;
+        p->pkth = nullptr;
+    }
+    else
+    {
+        uint8_t* b = (uint8_t*)SnortAlloc(sizeof(*p->pkth) + Codec::PKT_MAX + SPARC_TWIDDLE);
+
+        if (!b)
+            FatalError("encode_new() => Failed to allocate packet\n");
 
+        p->pkth = (DAQ_PktHdr_t*)b;
+        b += sizeof(*p->pkth);
+        b += SPARC_TWIDDLE;
+        p->pkt = b;
+    }
+
+    p->layers = lyr;
     return p;
 }
 
@@ -124,7 +136,7 @@ void PacketManager::encode_delete(Packet* p)
     if (p)
     {
         if(p->pkth)
-            free((void*)p->pkth);  // cast away const!
+            free((void*)p->pkth);
 
         if(p->layers)
             delete[] p->layers;
index bf18280964d00f833d826b5f0adb30c3612055a0..d42f288d11fc818678013ffe46d964bfc2c8842b 100644 (file)
@@ -62,7 +62,7 @@ public:
     static void decode(Packet*, const struct _daq_pkthdr*, const uint8_t*);
 
     // allocate a Packet for later formatting (cloning)
-    static Packet* encode_new(void);
+    static Packet* encode_new(bool allocate_packet_data = true);
     // release the allocated Packet
     static void encode_delete(Packet*);