diff mbox series

[v8,17/21] fuzz: add configure flag --enable-fuzzing

Message ID 20200129053357.27454-18-alxndr@bu.edu
State New
Headers show
Series [v8,01/21] softmmu: split off vl.c:main() into main.c | expand

Commit Message

Alexander Bulekov Jan. 29, 2020, 5:34 a.m. UTC
Signed-off-by: Alexander Bulekov <alxndr@bu.edu>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
 configure | 39 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)

Comments

Darren Kenny Feb. 5, 2020, 1:19 p.m. UTC | #1
On Wed, Jan 29, 2020 at 05:34:25AM +0000, Bulekov, Alexander wrote:
>Signed-off-by: Alexander Bulekov <alxndr@bu.edu>
>Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
>Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>

Reviewed-by: Darren Kenny <darren.kenny@oracle.com>

>---
> configure | 39 +++++++++++++++++++++++++++++++++++++++
> 1 file changed, 39 insertions(+)
>
>diff --git a/configure b/configure
>index 08c3a1c1f0..1a1e57eb61 100755
>--- a/configure
>+++ b/configure
>@@ -504,6 +504,7 @@ debug_mutex="no"
> libpmem=""
> default_devices="yes"
> plugins="no"
>+fuzzing="no"
>
> supported_cpu="no"
> supported_os="no"
>@@ -634,6 +635,15 @@ int main(void) { return 0; }
> EOF
> }
>
>+write_c_fuzzer_skeleton() {
>+    cat > $TMPC <<EOF
>+#include <stdint.h>
>+#include <sys/types.h>
>+int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
>+int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; }
>+EOF
>+}
>+
> if check_define __linux__ ; then
>   targetos="Linux"
> elif check_define _WIN32 ; then
>@@ -1540,6 +1550,10 @@ for opt do
>   ;;
>   --disable-containers) use_containers="no"
>   ;;
>+  --enable-fuzzing) fuzzing=yes
>+  ;;
>+  --disable-fuzzing) fuzzing=no
>+  ;;
>   *)
>       echo "ERROR: unknown option $opt"
>       echo "Try '$0 --help' for more information"
>@@ -5992,6 +6006,15 @@ EOF
>   fi
> fi
>
>+##########################################
>+# checks for fuzzer
>+if test "$fuzzing" = "yes" ; then
>+  write_c_fuzzer_skeleton
>+  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address,fuzzer" ""; then
>+      have_fuzzer=yes
>+  fi
>+fi
>+
> ##########################################
> # check for libpmem
>
>@@ -6576,6 +6599,7 @@ echo "libpmem support   $libpmem"
> echo "libudev           $libudev"
> echo "default devices   $default_devices"
> echo "plugin support    $plugins"
>+echo "fuzzing support   $fuzzing"
>
> if test "$supported_cpu" = "no"; then
>     echo
>@@ -7400,6 +7424,16 @@ fi
> if test "$sheepdog" = "yes" ; then
>   echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
> fi
>+if test "$fuzzing" = "yes" ; then
>+  if test "$have_fuzzer" = "yes"; then
>+    FUZZ_LDFLAGS=" -fsanitize=address,fuzzer"
>+    FUZZ_CFLAGS=" -fsanitize=address,fuzzer"
>+    CFLAGS=" -fsanitize=address,fuzzer-no-link"
>+  else
>+    error_exit "Your compiler doesn't support -fsanitize=address,fuzzer"
>+    exit 1
>+  fi
>+fi
>
> if test "$plugins" = "yes" ; then
>     echo "CONFIG_PLUGIN=y" >> $config_host_mak
>@@ -7502,6 +7536,11 @@ if test "$libudev" != "no"; then
>     echo "CONFIG_LIBUDEV=y" >> $config_host_mak
>     echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak
> fi
>+if test "$fuzzing" != "no"; then
>+    echo "CONFIG_FUZZ=y" >> $config_host_mak
>+    echo "FUZZ_CFLAGS=$FUZZ_CFLAGS" >> $config_host_mak
>+    echo "FUZZ_LDFLAGS=$FUZZ_LDFLAGS" >> $config_host_mak
>+fi
>
> if test "$edk2_blobs" = "yes" ; then
>   echo "DECOMPRESS_EDK2_BLOBS=y" >> $config_host_mak
>-- 
>2.23.0
>
diff mbox series

Patch

diff --git a/configure b/configure
index 08c3a1c1f0..1a1e57eb61 100755
--- a/configure
+++ b/configure
@@ -504,6 +504,7 @@  debug_mutex="no"
 libpmem=""
 default_devices="yes"
 plugins="no"
+fuzzing="no"
 
 supported_cpu="no"
 supported_os="no"
@@ -634,6 +635,15 @@  int main(void) { return 0; }
 EOF
 }
 
+write_c_fuzzer_skeleton() {
+    cat > $TMPC <<EOF
+#include <stdint.h>
+#include <sys/types.h>
+int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
+int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; }
+EOF
+}
+
 if check_define __linux__ ; then
   targetos="Linux"
 elif check_define _WIN32 ; then
@@ -1540,6 +1550,10 @@  for opt do
   ;;
   --disable-containers) use_containers="no"
   ;;
+  --enable-fuzzing) fuzzing=yes
+  ;;
+  --disable-fuzzing) fuzzing=no
+  ;;
   *)
       echo "ERROR: unknown option $opt"
       echo "Try '$0 --help' for more information"
@@ -5992,6 +6006,15 @@  EOF
   fi
 fi
 
+##########################################
+# checks for fuzzer
+if test "$fuzzing" = "yes" ; then
+  write_c_fuzzer_skeleton
+  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address,fuzzer" ""; then
+      have_fuzzer=yes
+  fi
+fi
+
 ##########################################
 # check for libpmem
 
@@ -6576,6 +6599,7 @@  echo "libpmem support   $libpmem"
 echo "libudev           $libudev"
 echo "default devices   $default_devices"
 echo "plugin support    $plugins"
+echo "fuzzing support   $fuzzing"
 
 if test "$supported_cpu" = "no"; then
     echo
@@ -7400,6 +7424,16 @@  fi
 if test "$sheepdog" = "yes" ; then
   echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
 fi
+if test "$fuzzing" = "yes" ; then
+  if test "$have_fuzzer" = "yes"; then
+    FUZZ_LDFLAGS=" -fsanitize=address,fuzzer"
+    FUZZ_CFLAGS=" -fsanitize=address,fuzzer"
+    CFLAGS=" -fsanitize=address,fuzzer-no-link"
+  else
+    error_exit "Your compiler doesn't support -fsanitize=address,fuzzer"
+    exit 1
+  fi
+fi
 
 if test "$plugins" = "yes" ; then
     echo "CONFIG_PLUGIN=y" >> $config_host_mak
@@ -7502,6 +7536,11 @@  if test "$libudev" != "no"; then
     echo "CONFIG_LIBUDEV=y" >> $config_host_mak
     echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak
 fi
+if test "$fuzzing" != "no"; then
+    echo "CONFIG_FUZZ=y" >> $config_host_mak
+    echo "FUZZ_CFLAGS=$FUZZ_CFLAGS" >> $config_host_mak
+    echo "FUZZ_LDFLAGS=$FUZZ_LDFLAGS" >> $config_host_mak
+fi
 
 if test "$edk2_blobs" = "yes" ; then
   echo "DECOMPRESS_EDK2_BLOBS=y" >> $config_host_mak