]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
nfs: fix 'dangling' files in lossy sessions
authorVictor Julien <victor@inliniac.net>
Mon, 20 Jul 2020 12:49:59 +0000 (14:49 +0200)
committerVictor Julien <victor@inliniac.net>
Tue, 25 Aug 2020 12:49:26 +0000 (14:49 +0200)
In case of lossy connections the NFS 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 NFS'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.

Based on 65e9a7c31cc68bdb1fb3e1412b0a56260265c608

(cherry picked from commit 44d7dd02b34a678972aeeadc03b68ba267531333)

rust/src/nfs/nfs.rs

index f1c822a214c9f514a737730ef54fe31b8ce865e7..b68b57759a2fb023ca66291d3832bbf02c294ae5 100644 (file)
@@ -512,11 +512,13 @@ impl NFSState {
     {
         let mut post_gap_txs = false;
         for tx in &mut self.transactions {
-            if let Some(NFSTransactionTypeData::FILE(ref f)) = tx.type_data {
+            if let Some(NFSTransactionTypeData::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(tx.file_tx_direction);
+                        f.file_tracker.trunc(files, flags);
                     } else {
                         post_gap_txs = true;
                     }