]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
nfs4: fix write record handling
authorPhilippe Antoine <pantoine@oisf.net>
Fri, 17 Jun 2022 09:32:17 +0000 (11:32 +0200)
committerVictor Julien <vjulien@oisf.net>
Thu, 8 Sep 2022 11:27:51 +0000 (13:27 +0200)
Ticket: #5280

rust/src/nfs/nfs4.rs

index 95924df98a89b17ca5842bf30ab22367084ae6e2..d714ceadb8ec6bc467ed21a9c44a507ff161d362 100644 (file)
@@ -52,6 +52,11 @@ impl NFSState {
             fill_bytes = 4 - pad;
         }
 
+        // linux defines a max of 1mb. Allow several multiples.
+        if w.write_len == 0 || w.write_len > 16777216 {
+            return;
+        }
+
         let file_handle = fh.to_vec();
         let file_name = if let Some(name) = self.namemap.get(fh) {
             SCLogDebug!("WRITE name {:?}", name);
@@ -115,8 +120,8 @@ impl NFSState {
             }
         }
         self.ts_chunk_xid = r.hdr.xid;
-        let file_data_len = w.data.len() as u32 - fill_bytes as u32;
-        self.ts_chunk_left = w.write_len as u32 - file_data_len as u32;
+        debug_validate_bug_on!(w.data.len() as u32 > w.write_len);
+        self.ts_chunk_left = w.write_len as u32 - w.data.len()  as u32;
     }
 
     fn close_v4<'b>(&mut self, r: &RpcPacket<'b>, fh: &'b [u8]) {