]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
kerberos: fix against packet split in record size 4829/head
authorPhilippe Antoine <contact@catenacyber.fr>
Fri, 6 Mar 2020 09:45:23 +0000 (10:45 +0100)
committerJeff Lucovsky <jeff@lucovsky.org>
Thu, 16 Apr 2020 15:46:12 +0000 (11:46 -0400)
(cherry picked from commit 23f796a021cd4a0f2614418a5d2d40acefd56df3)

rust/src/krb/krb5.rs

index 1c87449a6a2b1d0642d55812ec643bd7ea0be6d7..4efb7719fe0570cc382e332418016b50a2cf188e 100644 (file)
@@ -527,7 +527,6 @@ pub extern "C" fn rs_krb5_parse_request_tcp(_flow: *const core::Flow,
                                        input_len: u32,
                                        _data: *const std::os::raw::c_void,
                                        _flags: u8) -> i32 {
-    if input_len < 4 { return -1; }
     let buf = build_slice!(input,input_len as usize);
     let state = cast_pointer!(state,KRB5State);
 
@@ -555,6 +554,10 @@ pub extern "C" fn rs_krb5_parse_request_tcp(_flow: *const core::Flow,
                     state.record_ts = record as usize;
                     cur_i = rem;
                 },
+                Err(nom::Err::Incomplete(_)) => {
+                    state.defrag_buf_ts.extend_from_slice(cur_i);
+                    return 0;
+                }
                 _ => {
                     SCLogDebug!("rs_krb5_parse_request_tcp: reading record mark failed!");
                     return 1;
@@ -585,7 +588,6 @@ pub extern "C" fn rs_krb5_parse_response_tcp(_flow: *const core::Flow,
                                        input_len: u32,
                                        _data: *const std::os::raw::c_void,
                                        _flags: u8) -> i32 {
-    if input_len < 4 { return -1; }
     let buf = build_slice!(input,input_len as usize);
     let state = cast_pointer!(state,KRB5State);
 
@@ -613,6 +615,10 @@ pub extern "C" fn rs_krb5_parse_response_tcp(_flow: *const core::Flow,
                     state.record_tc = record as usize;
                     cur_i = rem;
                 },
+                Err(nom::Err::Incomplete(_)) => {
+                    state.defrag_buf_tc.extend_from_slice(cur_i);
+                    return 0;
+                }
                 _ => {
                     SCLogNotice!("rs_krb5_parse_response_tcp: reading record mark failed!");
                     return 1;