build: Add KCOV kernel code coverage for fuzzing
authorHauke Mehrtens <hauke.mehrtens@intel.com>
Wed, 12 Feb 2020 10:49:01 +0000 (11:49 +0100)
committerHauke Mehrtens <hauke@hauke-m.de>
Sat, 22 Feb 2020 15:34:57 +0000 (16:34 +0100)
The adds an option to activate KCOV (Code coverage for fuzzing).

Signed-off-by: Hauke Mehrtens <hauke.mehrtens@intel.com>
Reviewed-by: Alexandru Ardelean <ardeleanalex@gmail.com>
config/Config-kernel.in

index ed75dd5..5e677e6 100644 (file)
@@ -172,6 +172,39 @@ config KERNEL_KASAN_INLINE
 
 endchoice
 
+config KERNEL_KCOV
+       bool "Compile the kernel with code coverage for fuzzing"
+       select KERNEL_DEBUG_FS
+       help
+         KCOV exposes kernel code coverage information in a form suitable
+         for coverage-guided fuzzing (randomized testing).
+
+         If RANDOMIZE_BASE is enabled, PC values will not be stable across
+         different machines and across reboots. If you need stable PC values,
+         disable RANDOMIZE_BASE.
+
+         For more details, see Documentation/kcov.txt.
+
+config KERNEL_KCOV_ENABLE_COMPARISONS
+       bool "Enable comparison operands collection by KCOV"
+       depends on KERNEL_KCOV
+       help
+         KCOV also exposes operands of every comparison in the instrumented
+         code along with operand sizes and PCs of the comparison instructions.
+         These operands can be used by fuzzing engines to improve the quality
+         of fuzzing coverage.
+
+config KERNEL_KCOV_INSTRUMENT_ALL
+       bool "Instrument all code by default"
+       depends on KERNEL_KCOV
+       default y if KERNEL_KCOV
+       help
+         If you are doing generic system call fuzzing (like e.g. syzkaller),
+         then you will want to instrument the whole kernel and you should
+         say y here. If you are doing more targeted fuzzing (like e.g.
+         filesystem fuzzing with AFL) then you will want to enable coverage
+         for more specific subsets of files, and should say n here.
+
 config KERNEL_TASKSTATS
        bool "Compile the kernel with task resource/io statistics and accounting"
        default n