| # Fuzzing |
| |
| Crosvm contains several [fuzz testing](https://en.wikipedia.org/wiki/Fuzzing) programs that are |
| intended to exercise specific subsets of the code with automatically generated inputs to help |
| uncover bugs that were not found by human-written unit tests. |
| |
| The source code for the fuzzer target programs can be found in [`fuzz/fuzz_targets`] in the crosvm |
| source tree. |
| |
| ## OSS-Fuzz |
| |
| Crosvm makes use of the OSS-Fuzz service, which automatically builds and runs fuzzers for many open |
| source projects. Once a crosvm change is committed and pushed to the main branch, it will be tested |
| automatically by [ClusterFuzz], and if new issues are found, a bug will be filed. |
| |
| - [crosvm oss-fuzz configuration] |
| - [crosvm oss-fuzz build status] |
| |
| ## Running fuzzers locally |
| |
| It can be useful to run a fuzzer in order to test new changes locally or to reproduce a bug filed by |
| ClusterFuzz. |
| |
| To build and run a specific fuzz target, install [`cargo fuzz`], then run it in the crosvm source |
| tree, specifying the desired fuzz target to run. If you have a testcase provided by the automated |
| fuzzing infrastructure in a bug report, you can add that file to the fuzzer command line to |
| reproduce the same fuzzer execution rather than using randomly generating inputs. |
| |
| ```sh |
| # Run virtqueue_fuzzer with randomly-generated input. |
| # This will run indefinitely; it can be stopped with Ctrl+C. |
| cargo +nightly fuzz run virtqueue_fuzzer |
| |
| # Run virtqueue_fuzzer with a specific input file from ClusterFuzz. |
| cargo +nightly fuzz run virtqueue_fuzzer clusterfuzz-testcase-minimized-... |
| ``` |
| |
| [clusterfuzz]: https://google.github.io/clusterfuzz/ |
| [crosvm oss-fuzz build status]: https://oss-fuzz-build-logs.storage.googleapis.com/index.html#crosvm |
| [crosvm oss-fuzz configuration]: https://github.com/google/oss-fuzz/tree/master/projects/crosvm |
| [`cargo fuzz`]: https://github.com/rust-fuzz/cargo-fuzz |
| [`fuzz/fuzz_targets`]: https://chromium.googlesource.com/crosvm/crosvm/+/refs/heads/main/fuzz/fuzz_targets/ |