]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
dce_rpc: create request memory leak fix
authorJITHENDIRAN EASWARAMURTHY KOUSALYA <jieaswar@cisco.com>
Wed, 8 Apr 2026 06:21:18 +0000 (11:51 +0530)
committerGitHub <noreply@github.com>
Wed, 8 Apr 2026 06:21:18 +0000 (11:51 +0530)
src/service_inspectors/dce_rpc/dce_smb.h
src/service_inspectors/dce_rpc/dce_smb2_commands.cc
src/service_inspectors/dce_rpc/dce_smb_module.cc

index 4ccd9a6031d4b2f8b27d6770d0d6c5eb5b557f2b..f2265daf3bb3b626bfd67a69c6f4b0b147f95439 100644 (file)
@@ -201,6 +201,7 @@ struct dce2SmbStats : public LruCacheLocalStats
     PegCount v2_crt_rtrkr_misng;
     PegCount v2_crt_req_ipc;
     PegCount v2_crt_tree_trkr_misng;
+    PegCount v2_crt_rtrkr_ins_fail;
     PegCount v2_wrt;
     PegCount v2_wrt_err_resp;
     PegCount v2_wrt_ignored;
index 3c75cd6de5536756225e1e7a28adfc38b15932e2..f18c1ff54c4107f4cf1c3d0e76881daa51faa6de 100644 (file)
@@ -376,7 +376,16 @@ static void DCE2_Smb2CreateRequest(DCE2_Smb2SsnData* ssd,
             auto rtracker = new DCE2_Smb2RequestTracker(file_name, name_len);
             rtracker->set_session_id(str->session_id);
             rtracker->set_tree_id(ttr->get_tid());
-            ssd->insertRtracker(mid, rtracker);
+            if (!ssd->insertRtracker(mid, rtracker))
+            {
+                dce2_smb_stats.v2_crt_rtrkr_ins_fail++;
+                SMB_DEBUG(dce_smb_trace, DEFAULT_TRACE_OPTION_ID, TRACE_ERROR_LEVEL,
+                    DetectionEngine::get_current_packet(),
+                    "%s_REQ: insert req tracker failed for mid %" PRIx64 "\n",
+                    smb2_command_string[SMB2_COM_CREATE], mid);
+                delete rtracker;
+                return;
+            }
             uint64_t file_id = 0;
             if (DCE2_IsSmb2DurableReconnect(smb_create_hdr, end, file_id))
             {
index 3e040225ac4661878c786b222fbb376223724008..9df39f070059e488fdbe6af3cea9d228b5aa2b4b 100644 (file)
@@ -105,6 +105,8 @@ static const PegInfo dce2_smb_pegs[] =
       "total number of SMBv2 create request packets ignored as share type is IPC" },
     { CountType::SUM, "v2_crt_tree_trkr_misng",
       "total number of SMBv2 create response packets ignored due to missing tree tracker" },
+    { CountType::SUM, "v2_crt_rtrkr_ins_fail",
+      "total number of SMBv2 create request packets failed due to request tracker insert failure" },
     { CountType::SUM, "v2_wrt", "total number of SMBv2 write packets seen" },
     { CountType::SUM, "v2_wrt_err_resp", "total number of SMBv2 write error response packets seen" },
     { CountType::SUM, "v2_wrt_ignored",