From: Shivani Bhardwaj Date: Fri, 5 Jul 2024 11:59:45 +0000 (+0530) Subject: src: remove truncate fn and glue code X-Git-Tag: suricata-8.0.0-beta1~1030 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f2de3e01cb48ebec86dc53c487ccea52711b7b3b;p=thirdparty%2Fsuricata.git src: remove truncate fn and glue code truncate fn is only active and used by dcerpc and smb parsers. In case stream depth is reached for any side, truncate fn is supposed to set the tx entity (request/response) in the same direction as complete so the other side is not forever waiting for data. However, whether the stream depth is reached is already checked by AppLayerParserGetStateProgress fn which is called by: - DetectTx - DetectEngineInspectBufferGeneric - AppLayerParserSetTransactionInspectId - OutputTxLog - AppLayerParserTransactionsCleanup and, in such a case, StateGetProgressCompletionStatus is returned for the respective direction. This fn following efc9a7a, always returns 1 as long as the direction is valid meaning that the progress for the current direction is marked complete. So, there is no need for the additional callback to mark the entities as done in case of depth or a gap. Remove all such glue code and callbacks for truncate fns. Bug 7044 --- diff --git a/rust/src/applayer.rs b/rust/src/applayer.rs index 46fbbd5560..187245917a 100644 --- a/rust/src/applayer.rs +++ b/rust/src/applayer.rs @@ -394,10 +394,6 @@ pub struct RustParser { pub flags: u32, - /// Function to handle the end of data coming on one of the sides - /// due to the stream reaching its 'depth' limit. - pub truncate: Option, - pub get_frame_id_by_name: Option, pub get_frame_name_by_id: Option, } @@ -458,7 +454,6 @@ pub type GetTxIteratorFn = unsafe extern "C" fn (ipproto: u8, alproto: AppPro pub type GetTxDataFn = unsafe extern "C" fn(*mut c_void) -> *mut AppLayerTxData; pub type GetStateDataFn = unsafe extern "C" fn(*mut c_void) -> *mut AppLayerStateData; pub type ApplyTxConfigFn = unsafe extern "C" fn (*mut c_void, *mut c_void, c_int, AppLayerTxConfig); -pub type TruncateFn = unsafe extern "C" fn (*mut c_void, u8); pub type GetFrameIdByName = unsafe extern "C" fn(*const c_char) -> c_int; pub type GetFrameNameById = unsafe extern "C" fn(u8) -> *const c_char; diff --git a/rust/src/applayertemplate/template.rs b/rust/src/applayertemplate/template.rs index e8cdc27dfe..43a8bf9400 100644 --- a/rust/src/applayertemplate/template.rs +++ b/rust/src/applayertemplate/template.rs @@ -427,7 +427,6 @@ pub unsafe extern "C" fn rs_template_register_parser() { get_state_data: rs_template_get_state_data, apply_tx_config: None, flags: APP_LAYER_PARSER_OPT_ACCEPT_GAPS, - truncate: None, get_frame_id_by_name: None, get_frame_name_by_id: None, }; diff --git a/rust/src/bittorrent_dht/bittorrent_dht.rs b/rust/src/bittorrent_dht/bittorrent_dht.rs index 61eefb9e29..f48cb3d2bf 100644 --- a/rust/src/bittorrent_dht/bittorrent_dht.rs +++ b/rust/src/bittorrent_dht/bittorrent_dht.rs @@ -282,7 +282,6 @@ pub unsafe extern "C" fn rs_bittorrent_dht_udp_register_parser() { get_state_data: rs_bittorrent_dht_get_state_data, apply_tx_config: None, flags: 0, - truncate: None, get_frame_id_by_name: None, get_frame_name_by_id: None, }; diff --git a/rust/src/dcerpc/dcerpc.rs b/rust/src/dcerpc/dcerpc.rs index 3a1af7df53..bb82ad33be 100644 --- a/rust/src/dcerpc/dcerpc.rs +++ b/rust/src/dcerpc/dcerpc.rs @@ -322,8 +322,6 @@ pub struct DCERPCState { pub tc_gap: bool, pub ts_ssn_gap: bool, pub tc_ssn_gap: bool, - pub ts_ssn_trunc: bool, /// true if Truncated in this direction - pub tc_ssn_trunc: bool, pub flow: Option<*const core::Flow>, state_data: AppLayerStateData, } @@ -354,8 +352,6 @@ impl DCERPCState { tx.call_id = call_id; tx.endianness = endianness; self.tx_id += 1; - tx.req_done = self.ts_ssn_trunc; - tx.resp_done = self.tc_ssn_trunc; if self.transactions.len() > unsafe { DCERPC_MAX_TX } { let mut index = self.tx_index_completed; for tx_old in &mut self.transactions.range_mut(self.tx_index_completed..) { @@ -1187,33 +1183,6 @@ pub unsafe extern "C" fn rs_dcerpc_state_transaction_free(state: *mut std::os::r dce_state.free_tx(tx_id); } -#[no_mangle] -pub unsafe extern "C" fn rs_dcerpc_state_trunc(state: *mut std::os::raw::c_void, direction: u8) { - let dce_state = cast_pointer!(state, DCERPCState); - match direction.into() { - Direction::ToServer => { - dce_state.ts_ssn_trunc = true; - for tx in &mut dce_state.transactions { - tx.req_done = true; - if let Some(flow) = dce_state.flow { - sc_app_layer_parser_trigger_raw_stream_reassembly(flow, Direction::ToServer as i32); - } - } - SCLogDebug!("dce_state.ts_ssn_trunc = true; txs {}", dce_state.transactions.len()); - } - Direction::ToClient => { - dce_state.tc_ssn_trunc = true; - for tx in &mut dce_state.transactions { - tx.resp_done = true; - if let Some(flow) = dce_state.flow { - sc_app_layer_parser_trigger_raw_stream_reassembly(flow, Direction::ToClient as i32); - } - } - SCLogDebug!("dce_state.tc_ssn_trunc = true; txs {}", dce_state.transactions.len()); - } - } -} - #[no_mangle] pub unsafe extern "C" fn rs_dcerpc_get_tx( vtx: *mut std::os::raw::c_void, tx_id: u64, @@ -1367,7 +1336,6 @@ pub unsafe extern "C" fn rs_dcerpc_register_parser() { get_state_data: rs_dcerpc_get_state_data, apply_tx_config: None, flags: APP_LAYER_PARSER_OPT_ACCEPT_GAPS, - truncate: None, get_frame_id_by_name: None, get_frame_name_by_id: None, }; diff --git a/rust/src/dcerpc/dcerpc_udp.rs b/rust/src/dcerpc/dcerpc_udp.rs index 2007c867bf..ab7f65cafb 100644 --- a/rust/src/dcerpc/dcerpc_udp.rs +++ b/rust/src/dcerpc/dcerpc_udp.rs @@ -374,7 +374,6 @@ pub unsafe extern "C" fn rs_dcerpc_udp_register_parser() { get_state_data: rs_dcerpc_udp_get_state_data, apply_tx_config: None, flags: 0, - truncate: None, get_frame_id_by_name: None, get_frame_name_by_id: None, }; diff --git a/rust/src/dhcp/dhcp.rs b/rust/src/dhcp/dhcp.rs index e43d4e863a..5b6f4b4a08 100644 --- a/rust/src/dhcp/dhcp.rs +++ b/rust/src/dhcp/dhcp.rs @@ -298,7 +298,6 @@ pub unsafe extern "C" fn rs_dhcp_register_parser() { get_state_data : rs_dhcp_get_state_data, apply_tx_config : None, flags : 0, - truncate : None, get_frame_id_by_name: None, get_frame_name_by_id: None, }; diff --git a/rust/src/dns/dns.rs b/rust/src/dns/dns.rs index ea12b43ac3..1c1358a9f3 100644 --- a/rust/src/dns/dns.rs +++ b/rust/src/dns/dns.rs @@ -995,7 +995,6 @@ pub unsafe extern "C" fn SCRegisterDnsUdpParser() { get_state_data: rs_dns_get_state_data, apply_tx_config: Some(apply_tx_config), flags: 0, - truncate: None, get_frame_id_by_name: Some(DnsFrameType::ffi_id_from_name), get_frame_name_by_id: Some(DnsFrameType::ffi_name_from_id), }; @@ -1041,7 +1040,6 @@ pub unsafe extern "C" fn SCRegisterDnsTcpParser() { get_state_data: rs_dns_get_state_data, apply_tx_config: Some(apply_tx_config), flags: APP_LAYER_PARSER_OPT_ACCEPT_GAPS, - truncate: None, get_frame_id_by_name: Some(DnsFrameType::ffi_id_from_name), get_frame_name_by_id: Some(DnsFrameType::ffi_name_from_id), }; diff --git a/rust/src/enip/enip.rs b/rust/src/enip/enip.rs index 26f11140dc..05ec13a670 100644 --- a/rust/src/enip/enip.rs +++ b/rust/src/enip/enip.rs @@ -612,7 +612,6 @@ pub unsafe extern "C" fn SCEnipRegisterParsers() { get_state_data: SCEnipTxGetState_data, apply_tx_config: None, flags: 0, - truncate: None, get_frame_id_by_name: Some(EnipFrameType::ffi_id_from_name), get_frame_name_by_id: Some(EnipFrameType::ffi_name_from_id), }; diff --git a/rust/src/http2/http2.rs b/rust/src/http2/http2.rs index 6a5b3936c9..2e41c2967a 100644 --- a/rust/src/http2/http2.rs +++ b/rust/src/http2/http2.rs @@ -1366,7 +1366,6 @@ pub unsafe extern "C" fn rs_http2_register_parser() { get_state_data: rs_http2_get_state_data, apply_tx_config: None, flags: 0, - truncate: None, get_frame_id_by_name: None, get_frame_name_by_id: None, }; diff --git a/rust/src/ike/ike.rs b/rust/src/ike/ike.rs index 2a5448ab27..df62c19cb4 100644 --- a/rust/src/ike/ike.rs +++ b/rust/src/ike/ike.rs @@ -424,7 +424,6 @@ pub unsafe extern "C" fn rs_ike_register_parser() { get_state_data: rs_ike_get_state_data, apply_tx_config: None, flags: 0, - truncate: None, get_frame_id_by_name: None, get_frame_name_by_id: None, }; diff --git a/rust/src/krb/krb5.rs b/rust/src/krb/krb5.rs index aceeb86d2b..51b215ca30 100644 --- a/rust/src/krb/krb5.rs +++ b/rust/src/krb/krb5.rs @@ -609,7 +609,6 @@ pub unsafe extern "C" fn rs_register_krb5_parser() { get_state_data : rs_krb5_get_state_data, apply_tx_config : None, flags : 0, - truncate : None, get_frame_id_by_name: None, get_frame_name_by_id: None, }; diff --git a/rust/src/modbus/modbus.rs b/rust/src/modbus/modbus.rs index 02e2bcfd03..0d0c73371e 100644 --- a/rust/src/modbus/modbus.rs +++ b/rust/src/modbus/modbus.rs @@ -407,7 +407,6 @@ pub unsafe extern "C" fn rs_modbus_register_parser() { get_state_data: rs_modbus_get_state_data, apply_tx_config: None, flags: 0, - truncate: None, get_frame_id_by_name: None, get_frame_name_by_id: None, }; diff --git a/rust/src/mqtt/mqtt.rs b/rust/src/mqtt/mqtt.rs index 1fa6280c6d..c52802625e 100644 --- a/rust/src/mqtt/mqtt.rs +++ b/rust/src/mqtt/mqtt.rs @@ -790,7 +790,6 @@ pub unsafe extern "C" fn SCMqttRegisterParser() { get_state_data: rs_mqtt_get_state_data, apply_tx_config: None, flags: 0, - truncate: None, get_frame_id_by_name: Some(MQTTFrameType::ffi_id_from_name), get_frame_name_by_id: Some(MQTTFrameType::ffi_name_from_id), }; diff --git a/rust/src/nfs/nfs.rs b/rust/src/nfs/nfs.rs index 19d8d93cec..d4b472e1f6 100644 --- a/rust/src/nfs/nfs.rs +++ b/rust/src/nfs/nfs.rs @@ -1989,7 +1989,6 @@ pub unsafe extern "C" fn rs_nfs_register_parser() { get_state_data: rs_nfs_get_state_data, apply_tx_config: None, flags: APP_LAYER_PARSER_OPT_ACCEPT_GAPS, - truncate: None, get_frame_id_by_name: Some(NFSFrameType::ffi_id_from_name), get_frame_name_by_id: Some(NFSFrameType::ffi_name_from_id), }; @@ -2067,7 +2066,6 @@ pub unsafe extern "C" fn rs_nfs_udp_register_parser() { get_state_data: rs_nfs_get_state_data, apply_tx_config: None, flags: 0, - truncate: None, get_frame_id_by_name: Some(NFSFrameType::ffi_id_from_name), get_frame_name_by_id: Some(NFSFrameType::ffi_name_from_id), }; diff --git a/rust/src/ntp/ntp.rs b/rust/src/ntp/ntp.rs index 3a06cfb8b1..ae723bbb21 100644 --- a/rust/src/ntp/ntp.rs +++ b/rust/src/ntp/ntp.rs @@ -300,7 +300,6 @@ pub unsafe extern "C" fn rs_register_ntp_parser() { get_state_data : rs_ntp_get_state_data, apply_tx_config : None, flags : 0, - truncate : None, get_frame_id_by_name: None, get_frame_name_by_id: None, }; diff --git a/rust/src/pgsql/pgsql.rs b/rust/src/pgsql/pgsql.rs index bd76346f80..1873be5a75 100644 --- a/rust/src/pgsql/pgsql.rs +++ b/rust/src/pgsql/pgsql.rs @@ -761,7 +761,6 @@ pub unsafe extern "C" fn rs_pgsql_register_parser() { get_state_data: rs_pgsql_get_state_data, apply_tx_config: None, flags: APP_LAYER_PARSER_OPT_ACCEPT_GAPS, - truncate: None, get_frame_id_by_name: None, get_frame_name_by_id: None, }; diff --git a/rust/src/quic/quic.rs b/rust/src/quic/quic.rs index 330b0f8d37..bc58afe219 100644 --- a/rust/src/quic/quic.rs +++ b/rust/src/quic/quic.rs @@ -508,7 +508,6 @@ pub unsafe extern "C" fn rs_quic_register_parser() { get_state_data: rs_quic_get_state_data, apply_tx_config: None, flags: 0, - truncate: None, get_frame_id_by_name: None, get_frame_name_by_id: None, }; diff --git a/rust/src/rdp/rdp.rs b/rust/src/rdp/rdp.rs index 2899f99c18..25b5ee381a 100644 --- a/rust/src/rdp/rdp.rs +++ b/rust/src/rdp/rdp.rs @@ -493,7 +493,6 @@ pub unsafe extern "C" fn rs_rdp_register_parser() { get_state_data: rs_rdp_get_state_data, apply_tx_config: None, flags: 0, - truncate: None, get_frame_id_by_name: None, get_frame_name_by_id: None, }; diff --git a/rust/src/rfb/rfb.rs b/rust/src/rfb/rfb.rs index c17455bc06..6e923cab55 100644 --- a/rust/src/rfb/rfb.rs +++ b/rust/src/rfb/rfb.rs @@ -860,7 +860,6 @@ pub unsafe extern "C" fn rs_rfb_register_parser() { get_state_data: rs_rfb_get_state_data, apply_tx_config: None, flags: 0, - truncate: None, get_frame_id_by_name: Some(RFBFrameType::ffi_id_from_name), get_frame_name_by_id: Some(RFBFrameType::ffi_name_from_id), }; diff --git a/rust/src/sip/sip.rs b/rust/src/sip/sip.rs index 6d38c8fd7e..38f76fb277 100755 --- a/rust/src/sip/sip.rs +++ b/rust/src/sip/sip.rs @@ -570,7 +570,6 @@ pub unsafe extern "C" fn rs_sip_register_parser() { get_state_data: rs_sip_get_state_data, apply_tx_config: None, flags: 0, - truncate: None, get_frame_id_by_name: Some(SIPFrameType::ffi_id_from_name), get_frame_name_by_id: Some(SIPFrameType::ffi_name_from_id), }; diff --git a/rust/src/smb/smb.rs b/rust/src/smb/smb.rs index 56e1685e30..0d35d6debb 100644 --- a/rust/src/smb/smb.rs +++ b/rust/src/smb/smb.rs @@ -2201,23 +2201,6 @@ pub unsafe extern "C" fn rs_smb_get_tx_data( return &mut tx.tx_data; } - -#[no_mangle] -pub unsafe extern "C" fn rs_smb_state_truncate( - state: *mut std::ffi::c_void, - direction: u8) -{ - let state = cast_pointer!(state, SMBState); - match direction.into() { - Direction::ToServer => { - state.trunc_ts(); - } - Direction::ToClient => { - state.trunc_tc(); - } - } -} - #[no_mangle] pub unsafe extern "C" fn rs_smb_state_get_event_info_by_id( event_id: std::os::raw::c_int, @@ -2327,7 +2310,6 @@ pub unsafe extern "C" fn rs_smb_register_parser() { get_state_data: rs_smb_get_state_data, apply_tx_config: None, flags: APP_LAYER_PARSER_OPT_ACCEPT_GAPS, - truncate: Some(rs_smb_state_truncate), get_frame_id_by_name: Some(SMBFrameType::ffi_id_from_name), get_frame_name_by_id: Some(SMBFrameType::ffi_name_from_id), }; diff --git a/rust/src/snmp/snmp.rs b/rust/src/snmp/snmp.rs index b4bb6321a3..4e1afd0566 100644 --- a/rust/src/snmp/snmp.rs +++ b/rust/src/snmp/snmp.rs @@ -406,7 +406,6 @@ pub unsafe extern "C" fn rs_register_snmp_parser() { get_state_data : rs_snmp_get_state_data, apply_tx_config : None, flags : 0, - truncate : None, get_frame_id_by_name: None, get_frame_name_by_id: None, }; diff --git a/rust/src/ssh/ssh.rs b/rust/src/ssh/ssh.rs index c1f08a904c..d5341a2cfb 100644 --- a/rust/src/ssh/ssh.rs +++ b/rust/src/ssh/ssh.rs @@ -464,7 +464,6 @@ pub unsafe extern "C" fn rs_ssh_register_parser() { get_state_data: rs_ssh_get_state_data, apply_tx_config: None, flags: 0, - truncate: None, get_frame_id_by_name: None, get_frame_name_by_id: None, }; diff --git a/rust/src/telnet/telnet.rs b/rust/src/telnet/telnet.rs index 2a63b73321..29b02a9b7f 100644 --- a/rust/src/telnet/telnet.rs +++ b/rust/src/telnet/telnet.rs @@ -537,7 +537,6 @@ pub unsafe extern "C" fn rs_telnet_register_parser() { get_state_data: rs_telnet_get_state_data, apply_tx_config: None, flags: APP_LAYER_PARSER_OPT_ACCEPT_GAPS, - truncate: None, get_frame_id_by_name: Some(TelnetFrameType::ffi_id_from_name), get_frame_name_by_id: Some(TelnetFrameType::ffi_name_from_id), diff --git a/rust/src/websocket/websocket.rs b/rust/src/websocket/websocket.rs index 26747525fb..ebbe901a53 100644 --- a/rust/src/websocket/websocket.rs +++ b/rust/src/websocket/websocket.rs @@ -366,7 +366,6 @@ pub unsafe extern "C" fn rs_websocket_register_parser() { get_state_data: rs_websocket_get_state_data, apply_tx_config: None, flags: 0, // do not accept gaps as there is no good way to resync - truncate: None, get_frame_id_by_name: Some(WebSocketFrameType::ffi_id_from_name), get_frame_name_by_id: Some(WebSocketFrameType::ffi_name_from_id), }; diff --git a/src/app-layer-parser.c b/src/app-layer-parser.c index 9053326843..cbd42c9015 100644 --- a/src/app-layer-parser.c +++ b/src/app-layer-parser.c @@ -83,8 +83,6 @@ typedef struct AppLayerParserProtoCtx_ void *(*LocalStorageAlloc)(void); void (*LocalStorageFree)(void *); - void (*Truncate)(void *, uint8_t); - /** get FileContainer reference from the TX. MUST return a non-NULL reference if the TX * has or may have files in the requested direction at some point. */ AppLayerGetFileState (*GetTxFiles)(void *, uint8_t); @@ -465,16 +463,6 @@ void AppLayerParserRegisterLogger(uint8_t ipproto, AppProto alproto) SCReturn; } -void AppLayerParserRegisterTruncateFunc(uint8_t ipproto, AppProto alproto, - void (*Truncate)(void *, uint8_t)) -{ - SCEnter(); - - alp_ctx.ctxs[FlowGetProtoMapping(ipproto)][alproto].Truncate = Truncate; - - SCReturn; -} - void AppLayerParserRegisterGetStateProgressFunc(uint8_t ipproto, AppProto alproto, int (*StateGetProgress)(void *alstate, uint8_t direction)) { diff --git a/src/app-layer-parser.h b/src/app-layer-parser.h index 540d4a2b06..18f5cce70f 100644 --- a/src/app-layer-parser.h +++ b/src/app-layer-parser.h @@ -182,8 +182,6 @@ void AppLayerParserRegisterGetTxFilesFunc( uint8_t ipproto, AppProto alproto, AppLayerGetFileState (*GetTxFiles)(void *, uint8_t)); void AppLayerParserRegisterLogger(uint8_t ipproto, AppProto alproto); void AppLayerParserRegisterLoggerBits(uint8_t ipproto, AppProto alproto, LoggerId bits); -void AppLayerParserRegisterTruncateFunc(uint8_t ipproto, AppProto alproto, - void (*Truncate)(void *, uint8_t)); void AppLayerParserRegisterGetStateProgressFunc(uint8_t ipproto, AppProto alproto, int (*StateGetStateProgress)(void *alstate, uint8_t direction)); void AppLayerParserRegisterTxFreeFunc(uint8_t ipproto, AppProto alproto, diff --git a/src/app-layer-register.c b/src/app-layer-register.c index c4441d9f7c..1e4986b361 100644 --- a/src/app-layer-register.c +++ b/src/app-layer-register.c @@ -183,10 +183,6 @@ int AppLayerRegisterParser(const struct AppLayerParser *p, AppProto alproto) } - if (p->Truncate) { - AppLayerParserRegisterTruncateFunc(p->ip_proto, alproto, p->Truncate); - } - if (p->GetFrameIdByName && p->GetFrameNameById) { AppLayerParserRegisterGetFrameFuncs( p->ip_proto, alproto, p->GetFrameIdByName, p->GetFrameNameById); diff --git a/src/app-layer-register.h b/src/app-layer-register.h index eda9628f98..78eff7d8e4 100644 --- a/src/app-layer-register.h +++ b/src/app-layer-register.h @@ -71,8 +71,6 @@ typedef struct AppLayerParser { uint32_t flags; - void (*Truncate)(void *state, uint8_t direction); - AppLayerParserGetFrameIdByNameFn GetFrameIdByName; AppLayerParserGetFrameNameByIdFn GetFrameNameById;