]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
smb: fix 'dangling' files in lossy sessions
authorVictor Julien <victor@inliniac.net>
Fri, 15 May 2020 07:57:42 +0000 (09:57 +0200)
committerVictor Julien <victor@inliniac.net>
Fri, 16 Oct 2020 09:17:48 +0000 (11:17 +0200)
In case of lossy connections the SMB state would properly clean up
transactions, including file transactions. However for files the
state was never set to 'truncated', leading to files to stay 'active'.

This would lead these files staying in the SMB's state. In long running
sessions with lots of files this would lead to performance and memory
use issues.

This patch cleans truncates the file that was being transmitted when
a file transaction is being closed.

(cherry picked from commit 65e9a7c31cc68bdb1fb3e1412b0a56260265c608)

rust/src/smb/smb.rs

index def2b23b6718eb7faf463b92ece42add8b7d5ee8..5dd9c77b85f7e290471010634be45fe5b529b210 100644 (file)
@@ -1157,11 +1157,13 @@ impl SMBState {
     {
         let mut post_gap_txs = false;
         for tx in &mut self.transactions {
-            if let Some(SMBTransactionTypeData::FILE(ref f)) = tx.type_data {
+            if let Some(SMBTransactionTypeData::FILE(ref mut f)) = tx.type_data {
                 if f.post_gap_ts > 0 {
                     if self.ts > f.post_gap_ts {
                         tx.request_done = true;
                         tx.response_done = true;
+                        let (files, flags) = self.files.get(f.direction);
+                        f.file_tracker.trunc(files, flags);
                     } else {
                         post_gap_txs = true;
                     }