suricata
fuzz_decodepcapfile.c
Go to the documentation of this file.
1/**
2 * @file
3 * @author Philippe Antoine <contact@catenacyber.fr>
4 * fuzz target for TMM_DECODEPCAPFILE
5 */
6
7#include "suricata-common.h"
8#include "suricata.h"
10#include "defrag.h"
11#include "tm-modules.h"
12#include "tm-threads.h"
13#include "source-pcap-file.h"
15#include "conf-yaml-loader.h"
16#include "util-time.h"
17#include "util-conf.h"
18
19int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size);
20
21static int initialized = 0;
23
24const char configNoChecksum[] = "\
25%YAML 1.1\n\
26---\n\
27pcap-file:\n\
28\n\
29 checksum-checks: no\n\
30";
31
34SC_ATOMIC_EXTERN(unsigned int, engine_stage);
35
36int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
37{
38 void *ptv = NULL;
39
40 if (initialized == 0) {
41 //Redirects logs to /dev/null
42 setenv("SC_LOG_OP_IFACE", "file", 0);
43 setenv("SC_LOG_FILE", "/dev/null", 0);
44
45 InitGlobal();
47
48 //redirect logs to /tmp
49 ConfigSetLogDirectory("/tmp/");
50 //disables checksums validation for fuzzing
52 abort();
53 }
54
56
60
62 "packetpool", "packetpool",
63 "packetpool", "packetpool",
64 "pktacqloop");
65 if (tv == NULL) {
66 return 0;
67 }
68 TmModule *tm_module = TmModuleGetByName("ReceivePcapFile");
69 if (tm_module == NULL) {
70 return 0;
71 }
72 TmSlotSetFuncAppend(tv, tm_module, "/tmp/fuzz.pcap");
73 tm_module = TmModuleGetByName("DecodePcapFile");
74 if (tm_module == NULL) {
75 return 0;
76 }
77 TmSlotSetFuncAppend(tv, tm_module, NULL);
79 (void)SC_ATOMIC_SET(tv->tm_slots->slot_next->slot_data, dtv);
80
81 extern uint32_t max_pending_packets;
84 SC_ATOMIC_SET(engine_stage, SURICATA_RUNTIME);
85
86 initialized = 1;
87 }
88
89 //rewrite buffer to a file as libpcap does not have buffer inputs
90 if (TestHelperBufferToFile("/tmp/fuzz.pcap", data, size) < 0) {
91 return 0;
92 }
93
94 if (tmm_modules[TMM_RECEIVEPCAPFILE].ThreadInit(tv, "/tmp/fuzz.pcap", &ptv) == TM_ECODE_OK && ptv != NULL) {
98 }
99
100 return 0;
101}
int SCConfYamlLoadString(const char *string, size_t len)
Load configuration from a YAML string.
const char configNoChecksum[]
DecodeThreadVars * dtv
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
ThreadVars * tv
SCInstance surifuzz
uint32_t max_pending_packets
Definition suricata.c:183
void RunModeInitializeThreadSettings(void)
Definition runmodes.c:954
@ RUNMODE_PCAP_FILE
Definition runmodes.h:30
void PcapFileGlobalInit(void)
Structure to hold thread specific data for all decode modules.
Definition decode.h:963
Per thread variable structure.
Definition threadvars.h:58
struct TmSlot_ * tm_slots
Definition threadvars.h:96
TmEcode(* ThreadDeinit)(ThreadVars *, void *)
Definition tm-modules.h:53
TmEcode(* PktAcqLoop)(ThreadVars *, void *, void *)
Definition tm-modules.h:58
TmEcode(* ThreadInit)(ThreadVars *, const void *, void **)
Definition tm-modules.h:51
struct TmSlot_ * slot_next
Definition tm-threads.h:62
int InitGlobal(void)
Global initialization common to all runmodes.
Definition suricata.c:2965
volatile uint8_t suricata_ctl_flags
Definition suricata.c:172
void SCRunmodeSet(SCRunMode run_mode)
Set the current run mode.
Definition suricata.c:284
int PostConfLoadedSetup(SCInstance *suri)
Definition suricata.c:2716
@ SURICATA_RUNTIME
Definition suricata.h:101
TmModule * TmModuleGetByName(const char *name)
get a tm module ptr by name
Definition tm-modules.c:46
TmModule tmm_modules[TMM_SIZE]
Definition tm-modules.c:29
@ TMM_RECEIVEPCAPFILE
@ TMM_DECODEPCAPFILE
@ TM_ECODE_OK
void TmSlotSetFuncAppend(ThreadVars *tv, TmModule *tm, const void *data)
Appends a new entry to the slots.
Definition tm-threads.c:658
ThreadVars * TmThreadCreatePacketHandler(const char *name, const char *inq_name, const char *inqh_name, const char *outq_name, const char *outqh_name, const char *slots)
Creates and returns a TV instance for a Packet Processing Thread. This function doesn't support custo...
void PacketPoolInit(void)
#define SC_ATOMIC_EXTERN(type, name)
wrapper for referencing an atomic variable declared on another file.
#define SC_ATOMIC_SET(name, val)
Set the value for the atomic variable.
TmEcode ConfigSetLogDirectory(const char *name)
Definition util-conf.c:33
void TimeModeSetOffline(void)
Definition util-time.c:105
int TestHelperBufferToFile(const char *name, const uint8_t *data, size_t size)
writes the contents of a buffer into a file
void setenv(const char *name, const char *value, int overwrite)