From 8ece1cf484120964b18d0e61ba8c27a2057d1f86 Mon Sep 17 00:00:00 2001 From: Tim Wojtulewicz Date: Thu, 24 Sep 2020 10:18:44 -0700 Subject: [PATCH] Make Sessions::NextPacket call packet_mgr, fix fuzzer code to do the same --- src/Sessions.cc | 82 +----------------------------------- src/Sessions.h | 2 +- src/fuzzers/packet-fuzzer.cc | 4 +- 3 files changed, 5 insertions(+), 83 deletions(-) diff --git a/src/Sessions.cc b/src/Sessions.cc index 21dac57bff..7b5d7458b0 100644 --- a/src/Sessions.cc +++ b/src/Sessions.cc @@ -77,87 +77,9 @@ void NetSessions::Done() { } -void NetSessions::NextPacket(double t, const Packet* pkt) +void NetSessions::NextPacket(double t, Packet* pkt) { - EncapsulationStack* encapsulation = nullptr; - auto it = pkt->key_store.find("encap"); - if ( it != pkt->key_store.end() ) - encapsulation = std::any_cast(*it); - - bool dumped_packet = false; - - if ( pkt->hdr_size > pkt->cap_len ) - { - Weird("truncated_link_frame", pkt); - return; - } - - uint32_t caplen = pkt->cap_len - pkt->hdr_size; - - if ( pkt->l3_proto == L3_IPV4 ) - { - if ( caplen < sizeof(struct ip) ) - { - Weird("truncated_IP", pkt); - return; - } - - if ( ! encapsulation ) - { - const struct ip* ip = (const struct ip*) (pkt->data + pkt->hdr_size); - IP_Hdr ip_hdr(ip, false); - DoNextPacket(t, pkt, &ip_hdr, encapsulation); - } - else - { - const IP_Hdr* ip_hdr; - auto it = pkt->key_store.find("encap_inner_ip"); - if ( it != pkt->key_store.end() ) - ip_hdr = std::any_cast(*it); - else - { - IP_Hdr pkt_ip = pkt->IP(); - ip_hdr = &pkt_ip; - } - - DoNextPacket(t, pkt, ip_hdr, encapsulation); - } - } - - else if ( pkt->l3_proto == L3_IPV6 ) - { - if ( caplen < sizeof(struct ip6_hdr) ) - { - Weird("truncated_IP", pkt); - return; - } - - if ( ! encapsulation ) - { - IP_Hdr ip_hdr((const struct ip6_hdr*) (pkt->data + pkt->hdr_size), false, caplen); - DoNextPacket(t, pkt, &ip_hdr, encapsulation); - } - else - { - const IP_Hdr* ip_hdr = nullptr; - auto it = pkt->key_store.find("encap_inner_ip"); - if ( it != pkt->key_store.end() ) - ip_hdr = std::any_cast(*it); - else - { - IP_Hdr pkt_ip = pkt->IP(); - ip_hdr = &pkt_ip; - } - - DoNextPacket(t, pkt, ip_hdr, encapsulation); - } - } - - else - { - Weird("unknown_packet_type", pkt); - return; - } + packet_mgr->ProcessPacket(pkt); } void NetSessions::DoNextPacket(double t, const Packet* pkt, const IP_Hdr* ip_hdr, diff --git a/src/Sessions.h b/src/Sessions.h index 3286c70123..812b26dc04 100644 --- a/src/Sessions.h +++ b/src/Sessions.h @@ -50,7 +50,7 @@ public: // Main entry point for packet processing. [[deprecated("Remove in v4.1. Do not call this method directly. Packet processing should start with a call to packet_mgr->ProcessPacket().")]] - void NextPacket(double t, const Packet* pkt); + void NextPacket(double t, Packet* pkt); void Done(); // call to drain events before destructing diff --git a/src/fuzzers/packet-fuzzer.cc b/src/fuzzers/packet-fuzzer.cc index e771f4502e..e0c5590b86 100644 --- a/src/fuzzers/packet-fuzzer.cc +++ b/src/fuzzers/packet-fuzzer.cc @@ -2,7 +2,7 @@ #include "iosource/Packet.h" #include "Event.h" -#include "Sessions.h" +#include "packet_analysis/Manager.h" #include "FuzzBuffer.h" #include "fuzzer-setup.h" @@ -32,7 +32,7 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) try { - zeek::sessions->NextPacket(timestamp, &pkt); + zeek::packet_mgr->ProcessPacket(&pkt); } catch ( binpac::Exception const &e ) {