diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml index 96da3cf624..c6231c628d 100644 --- a/.github/workflows/build_and_test.yml +++ b/.github/workflows/build_and_test.yml @@ -221,6 +221,15 @@ jobs: - name: Format Check run: ./scripts/fmt_all.sh check + md-links-check: + runs-on: ubuntu-24.04 + steps: + - uses: actions/checkout@v4 + - name: Run Markdown Link checks + uses: gaurav-nelson/github-action-markdown-link-check@v1 + with: + config-file: '.github/workflows/md-config.json' + fuzzers-preflight: runs-on: ubuntu-24.04 steps: diff --git a/.github/workflows/md-config.json b/.github/workflows/md-config.json new file mode 100644 index 0000000000..21f2e4b3d8 --- /dev/null +++ b/.github/workflows/md-config.json @@ -0,0 +1,8 @@ +{ + "ignorePatterns": [ + { + "pattern": "^https://crates.io" + } + ], + "aliveStatusCodes": [0, 200] +} \ No newline at end of file diff --git a/README.md b/README.md index 8cbe7af564..e382d10682 100644 --- a/README.md +++ b/README.md @@ -93,7 +93,7 @@ cargo make run as long as the fuzzer directory has `Makefile.toml` file. -The best-tested fuzzer is [`./fuzzers/libfuzzer_libpng`](./fuzzers/libfuzzer_libpng), a multicore libfuzzer-like fuzzer using LibAFL for a libpng harness. +The best-tested fuzzer is [`./fuzzers/libpng/libfuzzer_libpng`](./fuzzers/libpng/libfuzzer_libpng), a multicore libfuzzer-like fuzzer using LibAFL for a libpng harness. ## Resources diff --git a/docs/src/design/metadata.md b/docs/src/design/metadata.md index d3a989d4c9..f340d9ca33 100644 --- a/docs/src/design/metadata.md +++ b/docs/src/design/metadata.md @@ -27,7 +27,7 @@ Metadata objects are primarly intended to be used inside [`SerdeAnyMap`](https:/ With these maps, the user can retrieve instances by type (and name). Internally, the instances are stored as SerdeAny trait objects. -Structs that want to have a set of metadata must implement the [`HasMetadata`](https://docs.rs/libafl/latest/libafl/state/trait.HasMetadata.html) trait. +Structs that want to have a set of metadata must implement the [`HasMetadata`](https://docs.rs/libafl/latest/libafl/common/trait.HasMetadata.html) trait. By default, Testcase and State implement it and hold a SerdeAnyMap testcase. diff --git a/docs/src/design/migration-0.11.md b/docs/src/design/migration-0.11.md index 8a2bdab0cf..c236bdbafe 100644 --- a/docs/src/design/migration-0.11.md +++ b/docs/src/design/migration-0.11.md @@ -12,7 +12,7 @@ Some cross-platform things in bolts include * ShMem: A cross-platform (Windows, Linux, Android, MacOS) shared memory implementation * LLMP: A fast, lock-free IPC mechanism via SharedMap * Core_affinity: A maintained version of `core_affinity` that can be used to get core information and bind processes to cores -* Rands: Fast random number generators for fuzzing (like [RomuRand](http://www.romu-random.org/)) +* Rands: Fast random number generators for fuzzing (like [RomuRand](https://www.romu-random.org/)) * MiniBSOD: get and print information about the current process state including important registers. * Tuples: Haskel-like compile-time tuple lists * Os: OS specific stuff like signal handling, windows exception handling, pipes, and helpers for `fork` diff --git a/docs/src/getting_started/crates.md b/docs/src/getting_started/crates.md index cbb61d2694..f6e29ecfd7 100644 --- a/docs/src/getting_started/crates.md +++ b/docs/src/getting_started/crates.md @@ -51,7 +51,7 @@ In it, you'll find highlights like: The sugar crate abstracts away most of the complexity of LibAFL's API. Instead of high flexibility, it aims to be high-level and easy-to-use. It is not as flexible as stitching your fuzzer together from each individual component, but allows you to build a fuzzer with minimal lines of code. -To see it in action, take a look at the [`libfuzzer_stb_image_sugar` example fuzzer](https://github.com/AFLplusplus/LibAFL/tree/main/fuzzers/libfuzzer_stb_image_sugar). +To see it in action, take a look at the [`libfuzzer_stb_image_sugar` example fuzzer](https://github.com/AFLplusplus/LibAFL/tree/main/fuzzers/stb/libfuzzer_stb_image_sugar). ### [`libafl_derive`](https://github.com/AFLplusplus/LibAFL/tree/main/libafl_derive) diff --git a/docs/src/message_passing/spawn_instances.md b/docs/src/message_passing/spawn_instances.md index 2f8301c308..0c532848dd 100644 --- a/docs/src/message_passing/spawn_instances.md +++ b/docs/src/message_passing/spawn_instances.md @@ -4,7 +4,7 @@ Multiple fuzzer instances can be spawned using different ways. ## Manually, via a TCP port -The straightforward way to do Multi-Threading is to use the [`LlmpRestartingEventManager`](https://docs.rs/libafl/latest/libafl/events/llmp/struct.LlmpRestartingEventManager.html), specifically to use [`setup_restarting_mgr_std`](https://docs.rs/libafl/latest/libafl/events/llmp/fn.setup_restarting_mgr_std.html). +The straightforward way to do Multi-Threading is to use the [`LlmpRestartingEventManager`](https://docs.rs/libafl/latest/libafl/events/llmp/restarting/struct.LlmpRestartingEventManager.html), specifically to use [`setup_restarting_mgr_std`](https://docs.rs/libafl/latest/libafl/events/llmp/restarting/fn.setup_restarting_mgr_std.html). It abstracts away all the pesky details about restarts on crash handling (for in-memory fuzzers) and multi-threading. With it, every instance you launch manually tries to connect to a TCP port on the local machine. diff --git a/docs/src/tutorial/intro.md b/docs/src/tutorial/intro.md index 8eea4288db..a0b46df45d 100644 --- a/docs/src/tutorial/intro.md +++ b/docs/src/tutorial/intro.md @@ -5,4 +5,4 @@ > This section is under construction. > Please check back later (or open a PR) > -> In the meantime, find the final Lain-based fuzzer in [the fuzzers folder](https://github.com/AFLplusplus/LibAFL/tree/main/fuzzers/tutorial) +> In the meantime, find the final Lain-based fuzzer in [the fuzzers folder](https://github.com/AFLplusplus/LibAFL/tree/main/fuzzers/others/tutorial) diff --git a/fuzzers/frida/frida_executable_libpng/README.md b/fuzzers/frida/frida_executable_libpng/README.md index fd3cae6bbd..54c45ddd1a 100644 --- a/fuzzers/frida/frida_executable_libpng/README.md +++ b/fuzzers/frida/frida_executable_libpng/README.md @@ -15,7 +15,7 @@ On unix platforms, you'll need [libc++](https://libcxx.llvm.org/) to build it. Alternatively you can run `cargo make run` and this command will automatically build and run the fuzzer ### Build For Android -When building for android using a cross-compiler, make sure you have a [_standalone toolchain_](https://developer.android.com/ndk/guides/standalone_toolchain), and then add the following: +When building for android using a cross-compiler, make sure you have a [_standalone toolchain_](https://developer.android.com/ndk/guides/other_build_systems), and then add the following: 1. In the ~/.cargo/config file add a target with the correct cross-compiler toolchain name (in this case aarch64-linux-android, but names may vary) `[target.aarch64-linux-android]` `linker="aarch64-linux-android-clang"` diff --git a/fuzzers/frida/frida_libpng/README.md b/fuzzers/frida/frida_libpng/README.md index d337f7ce08..648a702296 100644 --- a/fuzzers/frida/frida_libpng/README.md +++ b/fuzzers/frida/frida_libpng/README.md @@ -15,7 +15,7 @@ On unix platforms, you'll need [libc++](https://libcxx.llvm.org/) to build it. Alternatively you can run `cargo make run` and this command will automatically build and run the fuzzer ### Build For Android -When building for android using a cross-compiler, make sure you have a [_standalone toolchain_](https://developer.android.com/ndk/guides/standalone_toolchain), and then add the following: +When building for android using a cross-compiler, make sure you have a [_standalone toolchain_](https://developer.android.com/ndk/guides/other_build_systems), and then add the following: 1. In the ~/.cargo/config file add a target with the correct cross-compiler toolchain name (in this case aarch64-linux-android, but names may vary) `[target.aarch64-linux-android]` `linker="aarch64-linux-android-clang"` @@ -38,7 +38,7 @@ You can also fuzz libpng-1.6.37 on windows with frida mode ### To build it with visual studio 1. Install clang for windows (make sure you add LLVM to the system path!) [https://github.com/llvm/llvm-project/releases/tag/llvmorg-12.0.1](https://github.com/llvm/llvm-project/releases/tag/llvmorg-12.0.1) -2. Download libpng-1.6.37[https://github.com/glennrp/libpng/archive/refs/tags/v1.6.37.tar.gz] and zlib [https://zlib.net/fossils/zlib-1.2.11.tar.gz] into this directory, and rename `zlib-1.2.11` directory to `zlib`. +2. Download [libpng-1.6.37](https://github.com/glennrp/libpng/archive/refs/tags/v1.6.37.tar.gz) and [zlib](https://zlib.net/fossils/zlib-1.2.11.tar.gz) into this directory, and rename `zlib-1.2.11` directory to `zlib`. 3. Build libpng1.6.37 - Open libpng-1.6.37/projects/vstudio/vstudio.sln diff --git a/libafl/src/common/nautilus/README.md b/libafl/src/common/nautilus/README.md index a052afad63..9f91e27329 100644 --- a/libafl/src/common/nautilus/README.md +++ b/libafl/src/common/nautilus/README.md @@ -3,7 +3,7 @@ Nautilus is a coverage guided, grammar-based mutator. You can use it to improve your test coverage and find more bugs. By specifying the grammar of semi-valid inputs, Nautilus is able to perform complex mutation and to uncover more interesting test cases. Many of the ideas behind the original fuzzer are documented in a paper published at NDSS 2019.

- +

Version 2.0 has added many improvements to this early prototype. diff --git a/libafl/src/executors/inprocess/mod.rs b/libafl/src/executors/inprocess/mod.rs index debc17fe02..72ea126c9c 100644 --- a/libafl/src/executors/inprocess/mod.rs +++ b/libafl/src/executors/inprocess/mod.rs @@ -33,8 +33,10 @@ use crate::{ inputs::UsesInput, observers::{ObserversTuple, UsesObservers}, state::{HasCorpus, HasCurrentTestcase, HasExecutions, HasSolutions, State, UsesState}, - Error, ExecutionProcessor, HasMetadata, HasScheduler, + Error, HasMetadata, }; +#[cfg(any(unix, feature = "std"))] +use crate::{ExecutionProcessor, HasScheduler}; /// The inner structure of `InProcessExecutor`. pub mod inner; diff --git a/libafl_bolts/README.md b/libafl_bolts/README.md index d29ef59208..0a638ac124 100644 --- a/libafl_bolts/README.md +++ b/libafl_bolts/README.md @@ -9,7 +9,7 @@ Some cross-platform things in bolts include (but are not limited to): * ShMem: A cross-platform (Windows, Linux, Android, MacOS) shared memory implementation * LLMP: A fast, lock-free IPC mechanism via SharedMap * Core_affinity: A maintained version of `core_affinity` that can be used to get core information and bind processes to cores -* Rands: Fast random number generators for fuzzing (like [RomuRand](http://www.romu-random.org/)) +* Rands: Fast random number generators for fuzzing (like [RomuRand](https://www.romu-random.org/)) * MiniBSOD: get and print information about the current process state including important registers. * Tuples: Haskel-like compile-time tuple lists * Os: OS specific stuff like signal handling, windows exception handling, pipes, and helpers for `fork` @@ -37,8 +37,8 @@ Some of the parts in this list may be hard, don't be afraid to open a PR if you #### License -Licensed under either of Apache License, Version -2.0 or MIT license at your option. +Licensed under either of Apache License, Version +2.0 or MIT license at your option.
diff --git a/libafl_qemu/libqasan/printf/README.md b/libafl_qemu/libqasan/printf/README.md index 76f8962d13..17f2cec37a 100644 --- a/libafl_qemu/libqasan/printf/README.md +++ b/libafl_qemu/libqasan/printf/README.md @@ -196,7 +196,6 @@ Running with the `--wait-for-keypress exit` option waits for the enter key after ## Projects Using printf - [turnkeyboard](https://github.com/mpaland/turnkeyboard) uses printf as log and generic tty (formatting) output. - printf is part of [embeddedartistry/libc](https://github.com/embeddedartistry/libc), a libc targeted for embedded systems usage. -- The [Hatchling Platform]( https://github.com/adrian3git/HatchlingPlatform) uses printf. (Just send me a mail/issue/PR to get *your* project listed here)