Skip to content

Commit 796ce20

Browse files
authored
ScheduledMutator Fix with_max_stack_pow (#3148)
* ScheduledMutator Fix with_max_stack_pow * Renamed StdScheduledMutator to HavocScheduledMutator * Added SingleChoiceScheduledMutator * Changed HavocScheduledMutator description * Added rename in migration * Missed renaming * cargo fmt fix * cargo fmt fix 2 * Clippy duplicate code and safer test * cargo fmt fix 3 * Removed my hallucination
1 parent 7ea4070 commit 796ce20

File tree

73 files changed

+354
-206
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

73 files changed

+354
-206
lines changed

MIGRATION.md

+1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
- `MultipartInput` is now implemented as key-value tuples in a `ListInput`. The interface slightly changed, all functionality is maintained.
1717
- Instead of names, `MultipartInput` uses generic `key`s (function names were changed accordingly).
1818
- If you don't need the keys to identify individual parts, consider using `ListInput` directly.
19+
- `StdScheduledMutator` has been renamed to `HavocScheduledMutator`.
1920

2021
## 0.14.1 -> 0.15.0
2122

docs/listings/baby_fuzzer/listing-06/src/main.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use libafl::{
1212
generators::RandPrintablesGenerator,
1313
inputs::{BytesInput, HasTargetBytes},
1414
monitors::SimpleMonitor,
15-
mutators::scheduled::{havoc_mutations, StdScheduledMutator},
15+
mutators::scheduled::{havoc_mutations, HavocScheduledMutator},
1616
observers::StdMapObserver,
1717
schedulers::QueueScheduler,
1818
stages::mutational::StdMutationalStage,
@@ -107,7 +107,7 @@ fn main() {
107107

108108
/* ANCHOR: mutational_stage */
109109
// Setup a mutational stage with a basic bytes mutator
110-
let mutator = StdScheduledMutator::new(havoc_mutations());
110+
let mutator = HavocScheduledMutator::new(havoc_mutations());
111111
let mut stages = tuple_list!(StdMutationalStage::new(mutator));
112112

113113
fuzzer

fuzzers/baby/baby_fuzzer/src/main.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use libafl::{
1414
fuzzer::{Fuzzer, StdFuzzer},
1515
generators::RandPrintablesGenerator,
1616
inputs::{BytesInput, HasTargetBytes},
17-
mutators::{havoc_mutations::havoc_mutations, scheduled::StdScheduledMutator},
17+
mutators::{havoc_mutations::havoc_mutations, scheduled::HavocScheduledMutator},
1818
observers::StdMapObserver,
1919
schedulers::QueueScheduler,
2020
stages::mutational::StdMutationalStage,
@@ -128,7 +128,7 @@ pub fn main() {
128128
.expect("Failed to generate the initial corpus");
129129

130130
// Setup a mutational stage with a basic bytes mutator
131-
let mutator = StdScheduledMutator::new(havoc_mutations());
131+
let mutator = HavocScheduledMutator::new(havoc_mutations());
132132
let mut stages = tuple_list!(StdMutationalStage::new(mutator));
133133

134134
fuzzer

fuzzers/baby/baby_fuzzer_custom_executor/src/main.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ use libafl::{
1515
fuzzer::{Fuzzer, StdFuzzer},
1616
generators::RandPrintablesGenerator,
1717
inputs::HasTargetBytes,
18-
mutators::{havoc_mutations::havoc_mutations, scheduled::StdScheduledMutator},
18+
mutators::{havoc_mutations::havoc_mutations, scheduled::HavocScheduledMutator},
1919
observers::StdMapObserver,
2020
schedulers::QueueScheduler,
2121
stages::{mutational::StdMutationalStage, AflStatsStage, CalibrationStage},
@@ -155,7 +155,7 @@ pub fn main() {
155155
.expect("Failed to generate the initial corpus");
156156

157157
// Setup a mutational stage with a basic bytes mutator
158-
let mutator = StdScheduledMutator::new(havoc_mutations());
158+
let mutator = HavocScheduledMutator::new(havoc_mutations());
159159
let mut stages = tuple_list!(
160160
calibration_stage,
161161
StdMutationalStage::new(mutator),

fuzzers/baby/baby_fuzzer_minimizing/src/main.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,8 @@ pub fn main() -> Result<(), Error> {
9797
.expect("Failed to generate the initial corpus");
9898

9999
// Setup a mutational stage with a basic bytes mutator
100-
let mutator = StdScheduledMutator::new(havoc_mutations());
101-
let minimizer = StdScheduledMutator::new(havoc_mutations());
100+
let mutator = HavocScheduledMutator::new(havoc_mutations());
101+
let minimizer = HavocScheduledMutator::new(havoc_mutations());
102102
let mut stages = tuple_list!(
103103
StdMutationalStage::new(mutator),
104104
StdTMinMutationalStage::new(minimizer, factory, 128)
@@ -124,7 +124,7 @@ pub fn main() -> Result<(), Error> {
124124

125125
let mut mgr = SimpleEventManager::new(mon);
126126

127-
let minimizer = StdScheduledMutator::new(havoc_mutations());
127+
let minimizer = HavocScheduledMutator::new(havoc_mutations());
128128
let mut stages = tuple_list!(StdTMinMutationalStage::new(
129129
minimizer,
130130
CrashFeedback::new(),

fuzzers/baby/baby_fuzzer_swap_differential/src/main.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ use libafl::{
1717
fuzzer::{Fuzzer, StdFuzzer},
1818
generators::RandPrintablesGenerator,
1919
inputs::{BytesInput, HasTargetBytes},
20-
mutators::{havoc_mutations::havoc_mutations, scheduled::StdScheduledMutator},
20+
mutators::{havoc_mutations::havoc_mutations, scheduled::HavocScheduledMutator},
2121
observers::StdMapObserver,
2222
schedulers::QueueScheduler,
2323
stages::mutational::StdMutationalStage,
@@ -262,7 +262,7 @@ pub fn main() {
262262
.expect("Failed to generate the initial corpus");
263263

264264
// Setup a mutational stage with a basic bytes mutator
265-
let mutator = StdScheduledMutator::new(havoc_mutations());
265+
let mutator = HavocScheduledMutator::new(havoc_mutations());
266266
let mut stages = tuple_list!(StdMutationalStage::new(mutator));
267267

268268
while state.solutions().is_empty() {

fuzzers/baby/baby_fuzzer_unicode/src/main.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use libafl::{
1414
fuzzer::{Fuzzer, StdFuzzer},
1515
inputs::{BytesInput, HasTargetBytes},
1616
mutators::{
17-
StdScheduledMutator, UnicodeCategoryRandMutator, UnicodeInput,
17+
HavocScheduledMutator, UnicodeCategoryRandMutator, UnicodeInput,
1818
UnicodeSubcategoryRandMutator,
1919
},
2020
observers::StdMapObserver,
@@ -128,7 +128,7 @@ pub fn main() {
128128
.unwrap();
129129

130130
// Setup a mutational stage with a basic bytes mutator
131-
let mutator = StdScheduledMutator::new(tuple_list!(
131+
let mutator = HavocScheduledMutator::new(tuple_list!(
132132
UnicodeCategoryRandMutator,
133133
UnicodeSubcategoryRandMutator,
134134
UnicodeSubcategoryRandMutator,

fuzzers/baby/backtrace_baby_fuzzers/c_code_with_fork_executor/src/main.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use libafl::{
1010
generators::RandPrintablesGenerator,
1111
inputs::{BytesInput, HasTargetBytes},
1212
monitors::SimpleMonitor,
13-
mutators::{havoc_mutations::havoc_mutations, scheduled::StdScheduledMutator},
13+
mutators::{havoc_mutations::havoc_mutations, scheduled::HavocScheduledMutator},
1414
observers::{BacktraceObserver, ConstMapObserver},
1515
schedulers::QueueScheduler,
1616
stages::mutational::StdMutationalStage,
@@ -118,7 +118,7 @@ pub fn main() {
118118
.expect("Failed to generate the initial corpus");
119119

120120
// Setup a mutational stage with a basic bytes mutator
121-
let mutator = StdScheduledMutator::new(havoc_mutations());
121+
let mutator = HavocScheduledMutator::new(havoc_mutations());
122122
let mut stages = tuple_list!(StdMutationalStage::new(mutator));
123123

124124
fuzzer

fuzzers/baby/backtrace_baby_fuzzers/c_code_with_inprocess_executor/src/main.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use libafl::{
1010
generators::RandPrintablesGenerator,
1111
inputs::{BytesInput, HasTargetBytes},
1212
monitors::SimpleMonitor,
13-
mutators::{havoc_mutations::havoc_mutations, scheduled::StdScheduledMutator},
13+
mutators::{havoc_mutations::havoc_mutations, scheduled::HavocScheduledMutator},
1414
observers::{BacktraceObserver, ConstMapObserver},
1515
schedulers::QueueScheduler,
1616
stages::mutational::StdMutationalStage,
@@ -103,7 +103,7 @@ pub fn main() {
103103
.expect("Failed to generate the initial corpus");
104104

105105
// Setup a mutational stage with a basic bytes mutator
106-
let mutator = StdScheduledMutator::new(havoc_mutations());
106+
let mutator = HavocScheduledMutator::new(havoc_mutations());
107107
let mut stages = tuple_list!(StdMutationalStage::new(mutator));
108108

109109
fuzzer

fuzzers/baby/backtrace_baby_fuzzers/command_executor/src/main.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ use libafl::{
1717
generators::RandPrintablesGenerator,
1818
inputs::{BytesInput, HasTargetBytes},
1919
monitors::SimpleMonitor,
20-
mutators::{havoc_mutations::havoc_mutations, scheduled::StdScheduledMutator},
20+
mutators::{havoc_mutations::havoc_mutations, scheduled::HavocScheduledMutator},
2121
observers::{get_asan_runtime_flags, AsanBacktraceObserver, StdMapObserver},
2222
schedulers::QueueScheduler,
2323
stages::mutational::StdMutationalStage,
@@ -129,7 +129,7 @@ pub fn main() {
129129
.expect("Failed to generate the initial corpus");
130130

131131
// Setup a mutational stage with a basic bytes mutator
132-
let mutator = StdScheduledMutator::new(havoc_mutations());
132+
let mutator = HavocScheduledMutator::new(havoc_mutations());
133133
let mut stages = tuple_list!(StdMutationalStage::new(mutator));
134134

135135
fuzzer

fuzzers/baby/backtrace_baby_fuzzers/forkserver_executor/src/main.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use libafl::{
1010
generators::RandPrintablesGenerator,
1111
inputs::BytesInput,
1212
monitors::SimpleMonitor,
13-
mutators::{havoc_mutations::havoc_mutations, scheduled::StdScheduledMutator},
13+
mutators::{havoc_mutations::havoc_mutations, scheduled::HavocScheduledMutator},
1414
observers::{AsanBacktraceObserver, ConstMapObserver, HitcountsMapObserver},
1515
schedulers::QueueScheduler,
1616
stages::mutational::StdMutationalStage,
@@ -110,7 +110,7 @@ pub fn main() {
110110
.expect("Failed to generate the initial corpus");
111111

112112
// Setup a mutational stage with a basic bytes mutator
113-
let mutator = StdScheduledMutator::new(havoc_mutations());
113+
let mutator = HavocScheduledMutator::new(havoc_mutations());
114114
let mut stages = tuple_list!(StdMutationalStage::new(mutator));
115115

116116
fuzzer

fuzzers/baby/backtrace_baby_fuzzers/rust_code_with_fork_executor/src/main.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use libafl::{
1212
generators::RandPrintablesGenerator,
1313
inputs::{BytesInput, HasTargetBytes},
1414
monitors::SimpleMonitor,
15-
mutators::{havoc_mutations::havoc_mutations, scheduled::StdScheduledMutator},
15+
mutators::{havoc_mutations::havoc_mutations, scheduled::HavocScheduledMutator},
1616
observers::{BacktraceObserver, StdMapObserver},
1717
schedulers::QueueScheduler,
1818
stages::mutational::StdMutationalStage,
@@ -131,7 +131,7 @@ pub fn main() {
131131
.expect("Failed to generate the initial corpus");
132132

133133
// Setup a mutational stage with a basic bytes mutator
134-
let mutator = StdScheduledMutator::new(havoc_mutations());
134+
let mutator = HavocScheduledMutator::new(havoc_mutations());
135135
let mut stages = tuple_list!(StdMutationalStage::new(mutator));
136136

137137
fuzzer

fuzzers/baby/backtrace_baby_fuzzers/rust_code_with_inprocess_executor/src/main.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use libafl::{
1212
generators::RandPrintablesGenerator,
1313
inputs::{BytesInput, HasTargetBytes},
1414
monitors::SimpleMonitor,
15-
mutators::{havoc_mutations::havoc_mutations, scheduled::StdScheduledMutator},
15+
mutators::{havoc_mutations::havoc_mutations, scheduled::HavocScheduledMutator},
1616
observers::{BacktraceObserver, StdMapObserver},
1717
schedulers::QueueScheduler,
1818
stages::mutational::StdMutationalStage,
@@ -124,7 +124,7 @@ pub fn main() {
124124
.expect("Failed to generate the initial corpus");
125125

126126
// Setup a mutational stage with a basic bytes mutator
127-
let mutator = StdScheduledMutator::new(havoc_mutations());
127+
let mutator = HavocScheduledMutator::new(havoc_mutations());
128128
let mut stages = tuple_list!(StdMutationalStage::new(mutator));
129129

130130
fuzzer

fuzzers/binary_only/frida_executable_libpng/src/fuzzer.rs

+8-5
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use libafl::{
1616
monitors::MultiMonitor,
1717
mutators::{
1818
havoc_mutations::havoc_mutations,
19-
scheduled::{tokens_mutations, StdScheduledMutator},
19+
scheduled::{tokens_mutations, HavocScheduledMutator},
2020
token_mutations::{I2SRandReplace, Tokens},
2121
},
2222
observers::{CanTrack, HitcountsMapObserver, StdMapObserver, TimeObserver},
@@ -194,7 +194,8 @@ unsafe fn fuzz(
194194
}
195195

196196
// Setup a basic mutator with a mutational stage
197-
let mutator = StdScheduledMutator::new(havoc_mutations().merge(tokens_mutations()));
197+
let mutator =
198+
HavocScheduledMutator::new(havoc_mutations().merge(tokens_mutations()));
198199

199200
// A minimization+queue policy to get testcasess from the corpus
200201
let scheduler =
@@ -323,7 +324,8 @@ unsafe fn fuzz(
323324
}
324325

325326
// Setup a basic mutator with a mutational stage
326-
let mutator = StdScheduledMutator::new(havoc_mutations().merge(tokens_mutations()));
327+
let mutator =
328+
HavocScheduledMutator::new(havoc_mutations().merge(tokens_mutations()));
327329

328330
// A minimization+queue policy to get testcasess from the corpus
329331
let scheduler =
@@ -373,7 +375,7 @@ unsafe fn fuzz(
373375
let tracing = ShadowTracingStage::new();
374376

375377
// Setup a randomic Input2State stage
376-
let i2s = StdMutationalStage::new(StdScheduledMutator::new(tuple_list!(
378+
let i2s = StdMutationalStage::new(HavocScheduledMutator::new(tuple_list!(
377379
I2SRandReplace::new()
378380
)));
379381

@@ -467,7 +469,8 @@ unsafe fn fuzz(
467469
}
468470

469471
// Setup a basic mutator with a mutational stage
470-
let mutator = StdScheduledMutator::new(havoc_mutations().merge(tokens_mutations()));
472+
let mutator =
473+
HavocScheduledMutator::new(havoc_mutations().merge(tokens_mutations()));
471474

472475
// A minimization+queue policy to get testcasess from the corpus
473476
let scheduler =

fuzzers/binary_only/frida_libpng/src/fuzzer.rs

+5-4
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use libafl::{
1616
monitors::MultiMonitor,
1717
mutators::{
1818
havoc_mutations::havoc_mutations,
19-
scheduled::{tokens_mutations, StdScheduledMutator},
19+
scheduled::{tokens_mutations, HavocScheduledMutator},
2020
token_mutations::{I2SRandReplace, Tokens},
2121
},
2222
observers::{CanTrack, HitcountsMapObserver, StdMapObserver, TimeObserver},
@@ -184,7 +184,7 @@ fn fuzz(options: &FuzzerOptions) -> Result<(), Error> {
184184
}
185185

186186
// Setup a basic mutator with a mutational stage
187-
let mutator = StdScheduledMutator::new(havoc_mutations().merge(tokens_mutations()));
187+
let mutator = HavocScheduledMutator::new(havoc_mutations().merge(tokens_mutations()));
188188

189189
// A minimization+queue policy to get testcasess from the corpus
190190
let scheduler =
@@ -221,8 +221,9 @@ fn fuzz(options: &FuzzerOptions) -> Result<(), Error> {
221221
let tracing = ShadowTracingStage::new();
222222

223223
// Setup a randomic Input2State stage
224-
let i2s =
225-
StdMutationalStage::new(StdScheduledMutator::new(tuple_list!(I2SRandReplace::new())));
224+
let i2s = StdMutationalStage::new(HavocScheduledMutator::new(tuple_list!(
225+
I2SRandReplace::new()
226+
)));
226227

227228
// In case the corpus is empty (on first run), reset
228229
if state.must_load_initial_inputs() {

fuzzers/binary_only/frida_windows_gdiplus/src/fuzzer.rs

+8-5
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ use libafl::{
2626
monitors::MultiMonitor,
2727
mutators::{
2828
havoc_mutations::havoc_mutations,
29-
scheduled::{tokens_mutations, StdScheduledMutator},
29+
scheduled::{tokens_mutations, HavocScheduledMutator},
3030
token_mutations::{I2SRandReplace, Tokens},
3131
},
3232
observers::{CanTrack, HitcountsMapObserver, StdMapObserver, TimeObserver},
@@ -177,7 +177,8 @@ unsafe fn fuzz(options: &FuzzerOptions) -> Result<(), Error> {
177177
}
178178

179179
// Setup a basic mutator with a mutational stage
180-
let mutator = StdScheduledMutator::new(havoc_mutations().merge(tokens_mutations()));
180+
let mutator =
181+
HavocScheduledMutator::new(havoc_mutations().merge(tokens_mutations()));
181182

182183
// A minimization+queue policy to get testcasess from the corpus
183184
let scheduler =
@@ -299,7 +300,8 @@ unsafe fn fuzz(options: &FuzzerOptions) -> Result<(), Error> {
299300
}
300301

301302
// Setup a basic mutator with a mutational stage
302-
let mutator = StdScheduledMutator::new(havoc_mutations().merge(tokens_mutations()));
303+
let mutator =
304+
HavocScheduledMutator::new(havoc_mutations().merge(tokens_mutations()));
303305

304306
// A minimization+queue policy to get testcasess from the corpus
305307
let scheduler =
@@ -347,7 +349,7 @@ unsafe fn fuzz(options: &FuzzerOptions) -> Result<(), Error> {
347349
let tracing = ShadowTracingStage::new();
348350

349351
// Setup a randomic Input2State stage
350-
let i2s = StdMutationalStage::new(StdScheduledMutator::new(tuple_list!(
352+
let i2s = StdMutationalStage::new(HavocScheduledMutator::new(tuple_list!(
351353
I2SRandReplace::new()
352354
)));
353355

@@ -439,7 +441,8 @@ unsafe fn fuzz(options: &FuzzerOptions) -> Result<(), Error> {
439441
}
440442

441443
// Setup a basic mutator with a mutational stage
442-
let mutator = StdScheduledMutator::new(havoc_mutations().merge(tokens_mutations()));
444+
let mutator =
445+
HavocScheduledMutator::new(havoc_mutations().merge(tokens_mutations()));
443446

444447
// A minimization+queue policy to get testcasess from the corpus
445448
let scheduler =

fuzzers/binary_only/fuzzbench_fork_qemu/src/fuzzer.rs

+5-3
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ use libafl::{
2424
inputs::{BytesInput, HasTargetBytes},
2525
monitors::SimpleMonitor,
2626
mutators::{
27-
havoc_mutations, token_mutations::I2SRandReplace, tokens_mutations, StdMOptMutator,
28-
StdScheduledMutator, Tokens,
27+
havoc_mutations, token_mutations::I2SRandReplace, tokens_mutations, HavocScheduledMutator,
28+
StdMOptMutator, Tokens,
2929
},
3030
observers::{CanTrack, ConstMapObserver, HitcountsMapObserver, TimeObserver},
3131
schedulers::{
@@ -308,7 +308,9 @@ fn fuzz(
308308
});
309309

310310
// Setup a randomic Input2State stage
311-
let i2s = StdMutationalStage::new(StdScheduledMutator::new(tuple_list!(I2SRandReplace::new())));
311+
let i2s = StdMutationalStage::new(HavocScheduledMutator::new(tuple_list!(
312+
I2SRandReplace::new()
313+
)));
312314

313315
// Setup a MOPT mutator
314316
let mutator = StdMOptMutator::new(

fuzzers/binary_only/fuzzbench_qemu/src/fuzzer.rs

+5-3
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ use libafl::{
2222
inputs::{BytesInput, HasTargetBytes},
2323
monitors::SimpleMonitor,
2424
mutators::{
25-
havoc_mutations, token_mutations::I2SRandReplace, tokens_mutations, StdMOptMutator,
26-
StdScheduledMutator, Tokens,
25+
havoc_mutations, token_mutations::I2SRandReplace, tokens_mutations, HavocScheduledMutator,
26+
StdMOptMutator, Tokens,
2727
},
2828
observers::{CanTrack, HitcountsMapObserver, TimeObserver, VariableMapObserver},
2929
schedulers::{
@@ -319,7 +319,9 @@ fn fuzz(
319319
});
320320

321321
// Setup a randomic Input2State stage
322-
let i2s = StdMutationalStage::new(StdScheduledMutator::new(tuple_list!(I2SRandReplace::new())));
322+
let i2s = StdMutationalStage::new(HavocScheduledMutator::new(tuple_list!(
323+
I2SRandReplace::new()
324+
)));
323325

324326
// Setup a MOPT mutator
325327
let mutator = StdMOptMutator::new(

0 commit comments

Comments
 (0)