diff mbox series

[v6,13/21] fuzz: add configure flag --enable-fuzzing

Message ID 20191129213424.6290-14-alxndr@bu.edu (mailing list archive)
State New, archived
Headers show
Series Add virtual device fuzzing support | expand

Commit Message

Alexander Bulekov Nov. 29, 2019, 9:34 p.m. UTC
Signed-off-by: Alexander Bulekov <alxndr@bu.edu>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
---
 configure | 39 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)

Comments

Philippe Mathieu-Daudé Jan. 3, 2020, 4:48 p.m. UTC | #1
On 11/29/19 10:34 PM, Oleinik, Alexander wrote:
> Signed-off-by: Alexander Bulekov <alxndr@bu.edu>
> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
> ---
>   configure | 39 +++++++++++++++++++++++++++++++++++++++
>   1 file changed, 39 insertions(+)
> 
> diff --git a/configure b/configure
> index 6099be1d84..5fb2494a8e 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"
> @@ -633,6 +634,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
> @@ -1539,6 +1549,10 @@ for opt do
>     ;;
>     --disable-plugins) plugins="no"
>     ;;
> +  --enable-fuzzing) fuzzing=yes
> +  ;;
> +  --disable-fuzzing) fuzzing=no
> +  ;;
>     *)
>         echo "ERROR: unknown option $opt"
>         echo "Try '$0 --help' for more information"
> @@ -6018,6 +6032,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
>   
> @@ -6599,6 +6622,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
> @@ -7435,6 +7459,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"
> +  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
> @@ -7538,6 +7572,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

I'd use '= "yes"' here to stay consistent.
Anyway:
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>

> +    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
>
diff mbox series

Patch

diff --git a/configure b/configure
index 6099be1d84..5fb2494a8e 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"
@@ -633,6 +634,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
@@ -1539,6 +1549,10 @@  for opt do
   ;;
   --disable-plugins) plugins="no"
   ;;
+  --enable-fuzzing) fuzzing=yes
+  ;;
+  --disable-fuzzing) fuzzing=no
+  ;;
   *)
       echo "ERROR: unknown option $opt"
       echo "Try '$0 --help' for more information"
@@ -6018,6 +6032,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
 
@@ -6599,6 +6622,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
@@ -7435,6 +7459,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"
+  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
@@ -7538,6 +7572,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