Skip to content

Commit

Permalink
Merge pull request #73 from Wenzel/fix/havoc_find_diffs
Browse files Browse the repository at this point in the history
fuzzer: fix find_diffs comparison
  • Loading branch information
Wenzel authored Jan 3, 2024
2 parents af7e989 + ee599d7 commit 38be982
Show file tree
Hide file tree
Showing 6 changed files with 17 additions and 16 deletions.
13 changes: 7 additions & 6 deletions kafl_fuzzer/common/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import string
import logging
from shutil import copyfile
from typing import Optional, Tuple

import psutil

Expand Down Expand Up @@ -78,16 +79,16 @@ def atomic_write(filename, data):
os.chmod(f.name, 0o644)
os.rename(f.name, filename)

def read_binary_file(filename):
def read_binary_file(filename) -> bytes:
with open(filename, 'rb') as f:
return f.read()

def find_diffs(data_a, data_b):
first_diff = 0
last_diff = 0
def find_diffs(data_a: bytes, data_b: bytes) -> Tuple[Optional[int], Optional[int]]:
first_diff = None
last_diff = None
for i in range(min(len(data_a), len(data_b))):
if data_a[i] != data_b:
if first_diff == 0:
if data_a[i] != data_b[i]:
if first_diff is None:
first_diff = i
last_diff = i
return first_diff, last_diff
Expand Down
4 changes: 2 additions & 2 deletions kafl_fuzzer/manager/node.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,11 @@ def __init__(self, config, payload, bitmap, node_struct, write=True):
self.set_state("initial", write=False)

@staticmethod
def get_metadata(workdir, node_id):
def get_metadata(workdir, node_id) -> bytes:
return msgpack.unpackb(read_binary_file(QueueNode.__get_metadata_filename(workdir, node_id)), strict_map_key=False)

@staticmethod
def get_payload(workdir, node_struct):
def get_payload(workdir, node_struct) -> bytes:
return read_binary_file(QueueNode.__get_payload_filename(workdir, node_struct['info']['exit_reason'], node_struct['id']))

@staticmethod
Expand Down
2 changes: 1 addition & 1 deletion kafl_fuzzer/technique/havoc.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ def mutate_seq_havoc_array(data, func, max_iterations, resize=False):
data = handler(data)[:KAFL_MAX_FILE]
func(data)

def mutate_seq_splice_array(data, func, max_iterations, resize=False):
def mutate_seq_splice_array(data: bytes, func, max_iterations, resize=False):
global location_corpus
havoc_rounds = 4
splice_rounds = max_iterations//havoc_rounds
Expand Down
4 changes: 2 additions & 2 deletions kafl_fuzzer/technique/havoc_handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -220,15 +220,15 @@ def havoc_perform_byte_seq_extra2(data):
pass


def havoc_splicing(data, files):
def havoc_splicing(data: bytes, files):
if len(data) < 2 or files is None:
return data

rand.shuffle(files)
retry_limit = 64

for file in files[:retry_limit]:
file_data = read_binary_file(file)
file_data: bytes = read_binary_file(file)
if len(file_data) < 2:
continue

Expand Down
6 changes: 3 additions & 3 deletions kafl_fuzzer/worker/state_logic.py
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ def process_kickstart(self, kick_len):
self.init_stage_info(metadata)
self.handle_kickstart(kick_len, metadata)

def process_node(self, payload, metadata):
def process_node(self, payload: bytes, metadata):
self.init_stage_info(metadata)

if metadata["state"]["name"] == "initial":
Expand Down Expand Up @@ -263,7 +263,7 @@ def handle_redqueen(self, payload, metadata):
self.__perform_redqueen(payload, metadata)
self.redqueen_time += time.time() - redqueen_start_time

def handle_havoc(self, payload, metadata):
def handle_havoc(self, payload: bytes, metadata):
havoc_afl = True
havoc_splice = True
havoc_radamsa = self.config.radamsa
Expand Down Expand Up @@ -499,7 +499,7 @@ def __perform_radamsa(self, payload_array, metadata):
self.stage_update_label("radamsa")
radamsa.mutate_seq_radamsa_array(payload_array, self.execute, radamsa_amount)

def __perform_havoc(self, payload_array, metadata, use_splicing):
def __perform_havoc(self, payload_array: bytes, metadata, use_splicing):
perf = metadata["performance"]
havoc_amount = havoc.havoc_range(self.HAVOC_MULTIPLIER / perf)

Expand Down
4 changes: 2 additions & 2 deletions kafl_fuzzer/worker/worker.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,8 +81,8 @@ def handle_busy(self):
self.conn.send_ready()

def handle_node(self, msg):
meta_data = QueueNode.get_metadata(self.config.workdir, msg["task"]["nid"])
payload = QueueNode.get_payload(self.config.workdir, meta_data)
meta_data: bytes = QueueNode.get_metadata(self.config.workdir, msg["task"]["nid"])
payload: bytes = QueueNode.get_payload(self.config.workdir, meta_data)

# fixme: determine globally based on all seen regulars
t_dyn = self.t_soft + 1.2 * meta_data["info"]["performance"]
Expand Down

0 comments on commit 38be982

Please sign in to comment.