Makefile: fix compilation dependency on macOS

On a clean tree, when running make, `mac/mach_excServer.c` and
`mac/mach_excUser.c` were not yet generated by the `mig` command.

They were therefore not included in `ARCH_SRCS` and therefore neither
in `SRCS` nor `OBJS` and then were not compiled and not included in the
final binary, which made the compilation fail.

A previous solution to avoid this problem was to run make twice so that
the generated .c files are correctly included in `ARCH_SRCS` at the
second run.

This patch explicitly adds thoses two files as object file targets when
building on macOS and then ajusts compilation targets to make everything build
correctly.

thanks to @shamatar for reporting the issue:
https://github.com/rust-fuzz/honggfuzz-rs/issues/35
1 file changed
tree: ddca5a050528ea573f8e333c8e2cee72d0c2881d
  1. android/
  2. docs/
  3. examples/
  4. hfuzz_cc/
  5. includes/
  6. libhfcommon/
  7. libhfnetdriver/
  8. libhfuzz/
  9. linux/
  10. mac/
  11. netbsd/
  12. posix/
  13. qemu_mode/
  14. socketfuzzer/
  15. third_party/
  16. tools/
  17. .gitattributes
  18. .gitignore
  19. .gitmodules
  20. arch.h
  21. CHANGELOG
  22. cmdline.c
  23. cmdline.h
  24. CONTRIBUTING
  25. COPYING
  26. display.c
  27. display.h
  28. Dockerfile
  29. fuzz.c
  30. fuzz.h
  31. honggfuzz.c
  32. honggfuzz.h
  33. input.c
  34. input.h
  35. Makefile
  36. mangle.c
  37. mangle.h
  38. README.md
  39. report.c
  40. report.h
  41. sanitizers.c
  42. sanitizers.h
  43. screenshot-honggfuzz-1.png
  44. socketfuzzer.c
  45. socketfuzzer.h
  46. subproc.c
  47. subproc.h
README.md

Description

A security oriented, feedback-driven, evolutionary, easy-to-use fuzzer with interesting analysis options. See the Usage document for a primer on Honggfuzz use.

Code

Features

  • It‘s multi-process and multi-threaded: there’s no need to run multiple copies of your fuzzer, as honggfuzz can unlock potential of all your available CPU cores with a single running instance. The file corpus is automatically shared and improved between all fuzzed processes.
  • It's blazingly fast when the persistent fuzzing mode) is used. A simple/empty LLVMFuzzerTestOneInput function can be tested with up to 1mo iterations per second on a relatively modern CPU (e.g. i7-6700K).
  • Has a solid track record of uncovered security bugs: the only (to the date) vulnerability in OpenSSL with the critical score mark was discovered by honggfuzz. See the Trophies paragraph for the summary of findings to the date.
  • Uses low-level interfaces to monitor processes (e.g. ptrace under Linux and NetBSD). As opposed to other fuzzers, it will discover and report hijacked/ignored signals from crashes (intercepted and potentially hidden by a fuzzed program).
  • Easy-to-use, feed it a simple corpus directory (can even be empty for the feedback-driven fuzzing), and it will work its way up, expanding it by utilizing feedback-based coverage metrics.
  • Supports several (more than any other coverage-based feedback-driven fuzzer) hardware-based (CPU: branch/instruction counting, Intel BTS, Intel PT) and software-based feedback-driven fuzzing modes. Also, see the new qemu mode for blackbox binary fuzzing.
  • Works (at least) under GNU/Linux, FreeBSD, NetBSD, Mac OS X, Windows/CygWin and Android.
  • Supports the persistent fuzzing mode (long-lived process calling a fuzzed API repeatedly). More on that can be found here.
  • It comes with the examples directory, consisting of real world fuzz setups for widely-used software (e.g. Apache HTTPS, OpenSSL, libjpeg etc.).
  • Provides a corpus minimization mode.


Requirements

  • Linux - The BFD library (libbfd-dev) and libunwind (libunwind-dev/libunwind8-dev), clang-5.0 or higher for software-based coverage modes
  • FreeBSD - gmake, clang-5.0 or newer
  • NetBSD - gmake, clang, capstone, libBlocksRuntime
  • Android - Android SDK/NDK. Also see this detailed doc on how to build and run it
  • Windows - CygWin
  • Darwin/OS X - Xcode 10.8+
  • if Clang/LLVM is used to compile honggfuzz - link it with the BlocksRuntime Library (libblocksruntime-dev)

Trophies

Honggfuzz has been used to find a few interesting security problems in major software packages; An incomplete list:

Projects utilizing or inspired-by Honggfuzz

Contact

This is NOT an official Google product