Merge in SNORT/snort3 from ~STECHEW/snort3:daq_privptr_len_ioctl to master
Squashed commit of the following:
commit
46ce6c984ace2f8f753ac1f781da4469de259396
Author: Steve Chew <stechew@cisco.com>
Date: Sun Jun 11 23:56:06 2023 -0400
main: Update OopsHandler to get private data length to print private data during crash.
if (verdict == DAQ_VERDICT_BLOCK or verdict == DAQ_VERDICT_BLACKLIST)
p->active->send_reason_to_daq(*p);
- oops_handler->set_current_message(nullptr);
+ oops_handler->set_current_message(nullptr, nullptr);
p->pkth = nullptr; // No longer avail after finalize_message.
{
void Analyzer::process_daq_msg(DAQ_Msg_h msg, bool retry)
{
- oops_handler->set_current_message(msg);
+ oops_handler->set_current_message(msg, daq_instance);
memory::MemoryCap::free_space();
DAQ_Verdict verdict = DAQ_VERDICT_PASS;
}
break;
}
- oops_handler->set_current_message(nullptr);
+ oops_handler->set_current_message(nullptr, nullptr);
{
Profile profile(daqPerfStats);
daq_instance->finalize_message(msg, verdict);
HighAvailabilityManager::thread_term();
SideChannelManager::thread_term();
- oops_handler->set_current_message(nullptr);
+ oops_handler->set_current_message(nullptr, nullptr);
daq_instance->stop();
SFDAQ::set_local_instance(nullptr);
local_oops_handler = nullptr;
}
+void OopsHandler::set_current_message(DAQ_Msg_h cur_msg, snort::SFDAQInstance* daq_instance)
+{
+ msg = cur_msg;
+ priv_data_len = 0;
+
+ if (daq_instance)
+ {
+ DIOCTL_GetPrivDataLen ioctl_data = {cur_msg, 0};
+ if (DAQ_SUCCESS == daq_instance->ioctl(DIOCTL_GET_PRIV_DATA_LEN, &ioctl_data, sizeof(ioctl_data)))
+ {
+ priv_data_len = ioctl_data.priv_data_len;
+ }
+ }
+}
+
void OopsHandler::eternalize(int fd)
{
if (!msg)
ssp.printf("\n== Data (%u) ==\n", data_len);
ssp.hex_dump(data, data_len);
ssp.printf("\n");
+ if (priv_data_len)
+ {
+ memcpy(priv_data, daq_msg_get_priv_data(msg), std::min<size_t>(priv_data_len, sizeof(priv_data)));
+ ssp.printf("== Private Data (%u) ==\n", priv_data_len);
+ ssp.hex_dump(priv_data, priv_data_len);
+ }
}
#include <daq_common.h>
+#include "packet_io/sfdaq_instance.h"
+
class OopsHandler
{
public:
~OopsHandler() = default;
void tinit();
- void set_current_message(DAQ_Msg_h cm) { msg = cm; }
+ void set_current_message(DAQ_Msg_h, snort::SFDAQInstance*);
void tterm();
private:
size_t header_len = 0;
uint8_t data[UINT16_MAX] = { };
uint32_t data_len = 0;
+ uint8_t priv_data[UINT16_MAX] = { };
+ uint16_t priv_data_len = 0;
};
#endif
Swapper::~Swapper() = default;
void OopsHandler::tinit() { }
void OopsHandler::tterm() { }
+void OopsHandler::set_current_message(DAQ_Msg_h, snort::SFDAQInstance*) { }
uint16_t get_run_num() { return 0; }
void set_run_num(uint16_t) { }
void set_instance_id(unsigned) { }