From b56b04f84c08ef7c7ba7f1aae7c624cc3fcaae6e Mon Sep 17 00:00:00 2001 From: Victor Julien Date: Fri, 10 Feb 2017 19:58:27 +0100 Subject: [PATCH] afl: pass a packet queue to decoder calls --- src/decode-afl.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/decode-afl.c b/src/decode-afl.c index 22faadd943..16b3ab87e4 100644 --- a/src/decode-afl.c +++ b/src/decode-afl.c @@ -62,6 +62,8 @@ int DecoderParseDataFromFile(char *filename, DecoderFunc Decoder) { DecodeThreadVars *dtv = DecodeThreadVarsAlloc(&tv); DecodeRegisterPerfCounters(dtv, &tv); StatsSetupPrivate(&tv); + PacketQueue pq; + memset(&pq, 0, sizeof(pq)); #ifdef AFLFUZZ_PERSISTANT_MODE while (__AFL_LOOP(1000)) { @@ -84,7 +86,13 @@ int DecoderParseDataFromFile(char *filename, DecoderFunc Decoder) { Packet *p = PacketGetFromAlloc(); if (p != NULL) { PacketSetData(p, buffer, size); - (void) Decoder (&tv, dtv, p, buffer, size, NULL); + (void) Decoder (&tv, dtv, p, buffer, size, &pq); + while (1) { + Packet *extra_p = PacketDequeue(&pq); + if (unlikely(extra_p == NULL)) + break; + PacketFree(extra_p); + } PacketFree(p); } fclose(fp); @@ -122,6 +130,8 @@ int DecoderParseDataFromFileSerie(char *fileprefix, DecoderFunc Decoder) DecodeThreadVars *dtv = DecodeThreadVarsAlloc(&tv); DecodeRegisterPerfCounters(dtv, &tv); StatsSetupPrivate(&tv); + PacketQueue pq; + memset(&pq, 0, sizeof(pq)); char filename[256]; snprintf(filename, sizeof(filename), "dump/%s.%u", fileprefix, cnt); @@ -135,7 +145,13 @@ int DecoderParseDataFromFileSerie(char *fileprefix, DecoderFunc Decoder) Packet *p = PacketGetFromAlloc(); if (p != NULL) { PacketSetData(p, buffer, size); - (void) Decoder (&tv, dtv, p, buffer, size, NULL); + (void) Decoder (&tv, dtv, p, buffer, size, &pq); + while (1) { + Packet *extra_p = PacketDequeue(&pq); + if (unlikely(extra_p == NULL)) + break; + PacketFree(extra_p); + } PacketFree(p); } fclose(fp);