const uint8_t separator[] = {0x01, 0xD5, 0xCA, 0x7A};
SCInstance surifuzz;
AppProto forceLayer = 0;
+SC_ATOMIC_EXTERN(unsigned int, engine_stage);
int LLVMFuzzerInitialize(int *argc, char ***argv)
{
// otherwise overflows do not fail as they read the next packet
uint8_t * isolatedBuffer;
- if (size < HEADER_LEN) {
- return 0;
- }
-
if (alp_tctx == NULL) {
//Redirects logs to /dev/null
setenv("SC_LOG_OP_IFACE", "file", 0);
PostConfLoadedSetup(&surifuzz);
alp_tctx = AppLayerParserThreadCtxAlloc();
+ SC_ATOMIC_SET(engine_stage, SURICATA_RUNTIME);
+ }
+
+ if (size < HEADER_LEN) {
+ return 0;
}
if (data[0] >= ALPROTO_MAX) {
// only if we have some data
isolatedBuffer = malloc(alnext - albuffer);
if (isolatedBuffer == NULL) {
- return 0;
+ goto bail;
}
memcpy(isolatedBuffer, albuffer, alnext - albuffer);
(void) AppLayerParserParse(NULL, alp_tctx, f, f->alproto, flags, isolatedBuffer, alnext - albuffer);
flags |= STREAM_EOF;
isolatedBuffer = malloc(alsize);
if (isolatedBuffer == NULL) {
- return 0;
+ goto bail;
}
memcpy(isolatedBuffer, albuffer, alsize);
(void) AppLayerParserParse(NULL, alp_tctx, f, f->alproto, flags, isolatedBuffer, alsize);
free(isolatedBuffer);
}
+bail:
FLOWLOCK_UNLOCK(f);
FlowFree(f);
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size);
AppLayerProtoDetectThreadCtx *alpd_tctx = NULL;
+SC_ATOMIC_EXTERN(unsigned int, engine_stage);
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
{
AppProto alproto;
AppProto alproto2;
- if (size < HEADER_LEN) {
- return 0;
- }
-
if (alpd_tctx == NULL) {
//global init
InitGlobal();
AppLayerParserSetup();
AppLayerParserRegisterProtocolParsers();
alpd_tctx = AppLayerProtoDetectGetCtxThread();
+ SC_ATOMIC_SET(engine_stage, SURICATA_RUNTIME);
+ }
+
+ if (size < HEADER_LEN) {
+ return 0;
}
f = TestHelperBuildFlow(AF_INET, "1.2.3.4", "5.6.7.8", (uint16_t)((data[2] << 8) | data[3]),
ThreadVars *tv;
DecodeThreadVars *dtv;
+SC_ATOMIC_EXTERN(unsigned int, engine_stage);
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
{
extern uint16_t max_pending_packets;
max_pending_packets = 128;
PacketPoolInit();
+ SC_ATOMIC_SET(engine_stage, SURICATA_RUNTIME);
initialized = 1;
}
// FlowWorkerThreadData
void *fwd;
SCInstance surifuzz;
+SC_ATOMIC_EXTERN(unsigned int, engine_stage);
#include "confyaml.c"
return 0;
}
+ SC_ATOMIC_SET(engine_stage, SURICATA_RUNTIME);
initialized = 1;
}
// loop over packets
r = FPC_next(&pkts, &header, &pkt);
p = PacketGetFromAlloc();
- if (r <= 0 || header.ts.tv_sec >= INT_MAX - 3600) {
+ if (p == NULL || r <= 0 || header.ts.tv_sec >= INT_MAX - 3600) {
goto bail;
}
p->ts = SCTIME_FROM_TIMEVAL(&header.ts);
p->pkt_src = PKT_SRC_WIRE;
}
bail:
- PacketFree(p);
+ if (p != NULL) {
+ PacketFree(p);
+ }
FlowReset();
return 0;
//FlowWorkerThreadData
void *fwd;
SCInstance surifuzz;
+SC_ATOMIC_EXTERN(unsigned int, engine_stage);
#include "confyaml.c"
extern uint16_t max_pending_packets;
max_pending_packets = 128;
PacketPoolInit();
+ SC_ATOMIC_SET(engine_stage, SURICATA_RUNTIME);
initialized = 1;
}
// FlowWorkerThreadData
void *fwd;
SCInstance surifuzz;
+SC_ATOMIC_EXTERN(unsigned int, engine_stage);
#include "confyaml.c"
extern uint16_t max_pending_packets;
max_pending_packets = 128;
PacketPoolInit();
+ SC_ATOMIC_SET(engine_stage, SURICATA_RUNTIME);
initialized = 1;
}