Skip to content

Commit 4a8b07b

Browse files
committed
VMF 4.1.0 Release
1 parent 553708b commit 4a8b07b

File tree

161 files changed

+6840
-1828
lines changed

Some content is hidden

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

161 files changed

+6840
-1828
lines changed

CMakeLists.txt

+4-1
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,9 @@ set(CMAKE_CXX_COMPILER g++)
4646
# Use address sanitizer?
4747
#add_compile_options(-fsanitize=address)
4848
#add_link_options(-fsanitize=address)
49+
#Or if those flags don't work, then use these:
50+
#set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer -fsanitize=address")
51+
#set (CMAKE_LINKER_FLAGS "${CMAKE_LINKER_FLAGS} -fno-omit-frame-pointer -fsanitize=address")
4952

5053
# Add debug info?
5154
#add_link_options(-g)
@@ -55,7 +58,7 @@ set(CMAKE_CXX_COMPILER g++)
5558
set(CMAKE_EXPORT_COMPILE_COMMANDS True)
5659

5760
#############################################################
58-
project(VMF VERSION 4.0.0
61+
project(VMF VERSION 4.1.0
5962
LANGUAGES CXX )
6063
#############################################################
6164

README.md

+3
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
### Upgrading from an Earlier Release of VMF?
1313
See [migration-4.0.0.md](docs/migration-4.0.0.md) for a list of the API changes in VMF 4.0.0.
1414

15+
***Note: VMF is compatible with compiler instrumentation from AFL++ 4.10c or earlier, due to an update in the forkserver interface that was introduced in 4.20c. VMF will be updated in a future release to fix this compatibility issue.***
16+
1517
### VMF Compatibility
1618

1719
As of now, VMF can be run in Docker and on the following distributions of Linux:
@@ -23,6 +25,7 @@ As of now, VMF can be run in Docker and on the following distributions of Linux:
2325
- Ubuntu 20.04, and 22.04
2426

2527
VMF depends on several open source projects, but uses a "batteries-included" philosophy to dependencies where practical.
28+
2629
The sources of particular versions of these dependencies live inside of the VMF tree.
2730
For more information about VMF's included package, and other required dependencies, see
2831
[External Projects](docs/external_projects.md)

docs/configuration.md

+3-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
## Introduction
44

5-
The VMF configuration file is contained in one or more YAML file. These YAML files provides a structure to the configuration of the fuzzer and its modules. Each top level YAML section (i.e. `vmfFramework`) must be contained within a single file, but otherwise the configuration parameters may be split into multiple files, as desired. Note that all of the examples provided with VMF put the System Under Test (SUT) specific parameters into one file, and the other configuration sections in a second file. See [getting_started.md](/docs/getting_started.md) for more information on our example configuration files and their organization.
5+
The VMF configuration file is contained in one or more YAML file. These YAML files provides a structure to the configuration of the fuzzer and its modules. Each top level YAML section (i.e. `vmfFramework`) must be contained within a single file, but otherwise the configuration parameters may be split into multiple files, as desired. Note that all of the examples provided with VMF put the System Under Test (SUT) specific parameters into one file, and the other configuration sections in a second file. See [getting_started.md](getting_started.md) for more information on our example configuration files and their organization.
66

77
## Top level sections
88

@@ -28,6 +28,8 @@ StatsOutput:
2828
IterativeController:
2929
corpusUpdateRateMins: 30
3030
corpusInitialUpdateMins: 10
31+
batchSize: 1000
32+
3133

3234
#Config options for the storage module
3335
SimpleStorage:

docs/coremodules/core_modules_configuration.md

+101-4
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,16 @@ Executor and Feedback modules
2222
* [`AFLFavoredFeedback`](#section-aflfavoredfeedback)
2323

2424
Output modules
25+
* [`ComputeStats`](#section-computestats)
2526
* [`CorpusMinimization`](#section-corpusminimization)
27+
* [`CSVMetadataOutput`](#section-csvmetadataoutput)
28+
* [`LoggerMetadataOutput`](#section-loggermetadataoutput)
2629
* [`SaveCorpusOutput`](#section-savecorpusoutput)
2730
* [`StatsOutput`](#section-statsoutput)
2831

2932
Controller modules
3033
* [`Parameters Common to All Controller Modules`](#section-parameters-common-to-all-controller-modules)
34+
* [`AnalysisController`](#section-analysiscontroller)
3135
* [`IterativeController`](#section-iterativecontroller)
3236
* [`NewCoverageController`](#section-newcoveragecontroller)
3337
* [`RunOnceController`](#section-runoncecontroller)
@@ -530,6 +534,25 @@ AFLFavoredFeedback:
530534
sizeWeight: 1.0 # sizeWeight should be 0.0-10.0 (0.0 will remove this factor. Must be nonnegative.)
531535
speedWeight: 5.0 # speedWeight should be 0.0-10.0 (0.0 will remove this factor. Must be nonnegative.)
532536
```
537+
## <a id="ComputeStats"></a>Section: `ComputeStats`
538+
539+
Configuration information specific to the ComputeStats module, which computes statistics using the information in storage.
540+
541+
### `ComputeStats.statsRateInSeconds`
542+
543+
Value type: `<int>`
544+
545+
Status: Optional
546+
547+
Default value: 1
548+
549+
Usage: This parameter specifies how often the module should compute statistics, in seconds. Note that a few of the total test case statistics have to be counted on every pass through the fuzzing loop, because they rely on directly observing new test cases on storage. This parameter controls the rate of computing the remaining statistics.
550+
551+
### Configuration example
552+
```yaml
553+
ComputeStats:
554+
statsRateInSeconds: 10
555+
```
533556

534557
## <a id="CorpusMinimization"></a>Section: `CorpusMinimization`
535558

@@ -550,6 +573,56 @@ Usage: This parameter specifies how often the module is scheduled, in minutes. I
550573
SaveCorpusOutput:
551574
frequencyInMinutes: 30
552575
```
576+
## <a id="CSVMetadataOutput"></a>Section: `CSVMetadataOutput`
577+
578+
Configuration information specific to the CSVMetadataOutput module, which periodically writes the numeric values in metadata to a CSV file.
579+
580+
### `CSVMetadataOutput.outputRateInSeconds`
581+
582+
Value type: `<int>`
583+
584+
Status: Optional
585+
586+
Default value: 5
587+
588+
Usage: This parameter specifies how often (in seconds) the metadata values should be written to the CSV file
589+
590+
### `CSVMetadataOutput.outputFileName`
591+
592+
Value type: `<string>`
593+
594+
Status: Optional
595+
596+
Default value: "metadata.csv"
597+
598+
Usage: This parameter specifies the filename of the CSV output file. The directory used is the VMF output directory (vmfFramework.outputBaseDir).
599+
600+
### Configuration example
601+
```yaml
602+
CSVMetadataOutput:
603+
outputFileName: "Test_3.CSV"
604+
outputRateInSeconds: 1
605+
```
606+
607+
## <a id="LoggerMetadataOutput"></a>Section: `LoggerMetadataOutput`
608+
609+
Configuration information specific to the LoggerMetadataOutput module, which periodically writes the numeric values in metadata to the VMF Logger.
610+
611+
### `LoggerMetadataOutput.outputRateInSeconds`
612+
613+
Value type: `<int>`
614+
615+
Status: Optional
616+
617+
Default value: 5
618+
619+
Usage: This parameter specifies how often (in seconds) the metadata values should be written to the Logger.
620+
621+
### Configuration example
622+
```yaml
623+
LoggerMetadataOutput:
624+
outputRateInSeconds: 60
625+
```
553626

554627
## <a id="SaveCorpusOutput"></a>Section: `SaveCorpusOutput`
555628

@@ -603,23 +676,44 @@ StatsOutput:
603676
```
604677

605678
## <a id="ControllerCommonParameters"></a>Section: `Parameters Common to All Controller Modules`
606-
Parameters that are common to all Controller Modules (these parameters are supported by the base ControllerModule class). Each of these parameters is only relevant for distributed fuzzing, and will have no effect on standalone execution.
679+
680+
Parameters that are common to all core Controller Modules (these parameters are supported by the base ControllerModulePattern class). Note that some are relevant ONLY for distributed fuzzing and will have no effect on standalone execution.
681+
682+
### `controller.keepAllSeeds`
683+
684+
Value type: `<bool>`
685+
686+
Status: Optional
687+
688+
Default value: true
689+
690+
Usage: If set to true, all seed testcases will be saved and inserted into the fuzzing queue regardless of their coverage or quality. If set to false, only testcases that the feedback module decides to keep (eg have new coverage) will be kept. When set to true, more care should be given to seed redundancy and quality.
607691

608692
### `controller.corpusInitialUpdateMins`
609693

610694
Value type: `<int>`
611695

612-
Status: Optional
696+
Status: Optional - Distributed fuzzing only
613697

614698
Default value: 5
615699

616700
Usage: This sets the minimum number of minutes that must pass before the controller will perform the first corpus update. Do not configure this parameter to be smaller than 5min unless you are using a very small number of VMFs.
617701

702+
### `controller.batchSize`
703+
704+
Value type: `<int>`
705+
706+
Status: Optional - Distributed fuzzing only
707+
708+
Default value: 1000
709+
710+
Usage: This sets a maximum number of new test cases that will be pulled in from the server at once. All the test cases will eventually be pulled in, but this parameter limits how many get pulled in at once (in order to limit the RAM usage by VMF). When this value is too large, VMF will use an excessive amount of RAM (with resulting slow downs, consequently this value may need to be set to be smaller if the test cases are large).
711+
618712
### `controller.corpusUpdateRateMins`
619713

620714
Value type: `<int>`
621715

622-
Status: Optional
716+
Status: Optional - Distributed fuzzing only
623717

624718
Default value: 5
625719

@@ -629,12 +723,15 @@ Usage: This sets a minimum rate for the controller to retrieve subsequent corpus
629723

630724
Value type: `<list of strings>`
631725

632-
Status: Optional
726+
Status: Optional - Distributed fuzzing only
633727

634728
Default value: ["RAN_SUCCESSFULLY"]
635729

636730
Usage: This parameter controls which test case tags are retrieved by the controller. The default value is ["RAN_SUCCESSFULLY"], which will retrieve only the test cases ran succesfully (i.e. didn't hang or crash). This is the correct value if you are using VMF Core Modules in your fuzzer.
637731

732+
## <a id="AnalysisController"></a>Section: `AnalysisController`
733+
The AnalysisController does not support any custom configuration parameters.
734+
638735
## <a id="IterativeController"></a>Section: `IterativeController`
639736
Configuration information specific to the IterativeController.
640737
### `IterativeController.runTimeInMinutes`

0 commit comments

Comments
 (0)