From 65e9a7c31cc68bdb1fb3e1412b0a56260265c608 Mon Sep 17 00:00:00 2001 From: Victor Julien Date: Fri, 15 May 2020 09:57:42 +0200 Subject: [PATCH] smb: fix 'dangling' files in lossy sessions 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. --- rust/src/smb/smb.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/rust/src/smb/smb.rs b/rust/src/smb/smb.rs index 1bff8b2691..d7b71f8fa8 100644 --- a/rust/src/smb/smb.rs +++ b/rust/src/smb/smb.rs @@ -1160,11 +1160,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; } -- 2.47.2