From b4081f3ea2009f1c3b015237f2bcf12656ffa56f Mon Sep 17 00:00:00 2001 From: Jonathan Rudenberg Date: Mon, 15 Jan 2018 18:27:37 -0500 Subject: [PATCH] fuzz: disable all deps when building with oss-fuzz The fuzz targets are intended to be fast and only target systemd code, so they don't need to call out to any dependencies. They also shouldn't depend on shared libraries outside of libc, so we disable every dependency when compiling against oss-fuzz. This also simplifies the upstream build environment significantly. --- meson.build | 58 ++++++++++++++++++++++++--------------------- scripts/oss-fuzz.sh | 2 +- 2 files changed, 32 insertions(+), 28 deletions(-) diff --git a/meson.build b/meson.build index 784a138f2f..df79a54026 100644 --- a/meson.build +++ b/meson.build @@ -779,10 +779,11 @@ if not libcap.found() endif libmount = dependency('mount', - version : '>= 2.30') + version : '>= 2.30', + required : not ossfuzz) want_seccomp = get_option('seccomp') -if want_seccomp != 'false' +if want_seccomp != 'false' and not ossfuzz libseccomp = dependency('libseccomp', version : '>= 2.3.1', required : want_seccomp == 'true') @@ -795,7 +796,7 @@ conf.set10('HAVE_SECCOMP', have) m4_defines += have ? ['-DHAVE_SECCOMP'] : [] want_selinux = get_option('selinux') -if want_selinux != 'false' +if want_selinux != 'false' and not ossfuzz libselinux = dependency('libselinux', version : '>= 2.1.9', required : want_selinux == 'true') @@ -808,7 +809,7 @@ conf.set10('HAVE_SELINUX', have) m4_defines += have ? ['-DHAVE_SELINUX'] : [] want_apparmor = get_option('apparmor') -if want_apparmor != 'false' +if want_apparmor != 'false' and not ossfuzz libapparmor = dependency('libapparmor', required : want_apparmor == 'true') have = libapparmor.found() @@ -828,7 +829,7 @@ endif want_polkit = get_option('polkit') install_polkit = false install_polkit_pkla = false -if want_polkit != 'false' +if want_polkit != 'false' and not ossfuzz install_polkit = true libpolkit = dependency('polkit-gobject-1', @@ -841,7 +842,7 @@ endif conf.set10('ENABLE_POLKIT', install_polkit) want_acl = get_option('acl') -if want_acl != 'false' +if want_acl != 'false' and not ossfuzz libacl = cc.find_library('acl', required : want_acl == 'true') have = libacl.found() else @@ -852,7 +853,7 @@ conf.set10('HAVE_ACL', have) m4_defines += have ? ['-DHAVE_ACL'] : [] want_audit = get_option('audit') -if want_audit != 'false' +if want_audit != 'false' and not ossfuzz libaudit = dependency('audit', required : want_audit == 'true') have = libaudit.found() else @@ -862,7 +863,7 @@ endif conf.set10('HAVE_AUDIT', have) want_blkid = get_option('blkid') -if want_blkid != 'false' +if want_blkid != 'false' and not ossfuzz libblkid = dependency('blkid', required : want_blkid == 'true') have = libblkid.found() else @@ -872,7 +873,7 @@ endif conf.set10('HAVE_BLKID', have) want_kmod = get_option('kmod') -if want_kmod != 'false' +if want_kmod != 'false' and not ossfuzz libkmod = dependency('libkmod', version : '>= 15', required : want_kmod == 'true') @@ -884,7 +885,7 @@ endif conf.set10('HAVE_KMOD', have) want_pam = get_option('pam') -if want_pam != 'false' +if want_pam != 'false' and not ossfuzz libpam = cc.find_library('pam', required : want_pam == 'true') libpam_misc = cc.find_library('pam_misc', required : want_pam == 'true') have = libpam.found() and libpam_misc.found() @@ -897,7 +898,7 @@ conf.set10('HAVE_PAM', have) m4_defines += have ? ['-DHAVE_PAM'] : [] want_microhttpd = get_option('microhttpd') -if want_microhttpd != 'false' +if want_microhttpd != 'false' and not ossfuzz libmicrohttpd = dependency('libmicrohttpd', version : '>= 0.9.33', required : want_microhttpd == 'true') @@ -910,7 +911,7 @@ conf.set10('HAVE_MICROHTTPD', have) m4_defines += have ? ['-DHAVE_MICROHTTPD'] : [] want_libcryptsetup = get_option('libcryptsetup') -if want_libcryptsetup != 'false' +if want_libcryptsetup != 'false' and not ossfuzz libcryptsetup = dependency('libcryptsetup', version : '>= 1.6.0', required : want_libcryptsetup == 'true') @@ -922,7 +923,7 @@ endif conf.set10('HAVE_LIBCRYPTSETUP', have) want_libcurl = get_option('libcurl') -if want_libcurl != 'false' +if want_libcurl != 'false' and not ossfuzz libcurl = dependency('libcurl', version : '>= 7.32.0', required : want_libcurl == 'true') @@ -940,7 +941,7 @@ if want_libidn == 'true' and want_libidn2 == 'true' error('libidn and libidn2 cannot be requested simultaneously') endif -if want_libidn != 'false' and want_libidn2 != 'true' +if want_libidn != 'false' and want_libidn2 != 'true' and not ossfuzz libidn = dependency('libidn', required : want_libidn == 'true') have = libidn.found() @@ -950,7 +951,7 @@ else endif conf.set10('HAVE_LIBIDN', have) m4_defines += have ? ['-DHAVE_LIBIDN'] : [] -if not have and want_libidn2 != 'false' +if not have and want_libidn2 != 'false' and not ossfuzz # libidn is used for both libidn and libidn2 objects libidn = dependency('libidn2', required : want_libidn2 == 'true') @@ -962,7 +963,7 @@ conf.set10('HAVE_LIBIDN2', have) m4_defines += have ? ['-DHAVE_LIBIDN2'] : [] want_libiptc = get_option('libiptc') -if want_libiptc != 'false' +if want_libiptc != 'false' and not ossfuzz libiptc = dependency('libiptc', required : want_libiptc == 'true') have = libiptc.found() @@ -974,7 +975,7 @@ conf.set10('HAVE_LIBIPTC', have) m4_defines += have ? ['-DHAVE_LIBIPTC'] : [] want_qrencode = get_option('qrencode') -if want_qrencode != 'false' +if want_qrencode != 'false' and not ossfuzz libqrencode = dependency('libqrencode', required : want_qrencode == 'true') have = libqrencode.found() @@ -985,7 +986,7 @@ endif conf.set10('HAVE_QRENCODE', have) want_gcrypt = get_option('gcrypt') -if want_gcrypt != 'false' +if want_gcrypt != 'false' and not ossfuzz libgcrypt = cc.find_library('gcrypt', required : want_gcrypt == 'true') libgpg_error = cc.find_library('gpg-error', required : want_gcrypt == 'true') have = libgcrypt.found() and libgpg_error.found() @@ -1000,7 +1001,7 @@ endif conf.set10('HAVE_GCRYPT', have) want_gnutls = get_option('gnutls') -if want_gnutls != 'false' +if want_gnutls != 'false' and not ossfuzz libgnutls = dependency('gnutls', version : '>= 3.1.4', required : want_gnutls == 'true') @@ -1012,7 +1013,7 @@ endif conf.set10('HAVE_GNUTLS', have) want_elfutils = get_option('elfutils') -if want_elfutils != 'false' +if want_elfutils != 'false' and not ossfuzz libdw = dependency('libdw', required : want_elfutils == 'true') have = libdw.found() @@ -1023,7 +1024,7 @@ endif conf.set10('HAVE_ELFUTILS', have) want_zlib = get_option('zlib') -if want_zlib != 'false' +if want_zlib != 'false' and not ossfuzz libz = dependency('zlib', required : want_zlib == 'true') have = libz.found() @@ -1034,7 +1035,7 @@ endif conf.set10('HAVE_ZLIB', have) want_bzip2 = get_option('bzip2') -if want_bzip2 != 'false' +if want_bzip2 != 'false' and not ossfuzz libbzip2 = cc.find_library('bz2', required : want_bzip2 == 'true') have = libbzip2.found() @@ -1045,7 +1046,7 @@ endif conf.set10('HAVE_BZIP2', have) want_xz = get_option('xz') -if want_xz != 'false' +if want_xz != 'false' and not ossfuzz libxz = dependency('liblzma', required : want_xz == 'true') have = libxz.found() @@ -1056,7 +1057,7 @@ endif conf.set10('HAVE_XZ', have) want_lz4 = get_option('lz4') -if want_lz4 != 'false' +if want_lz4 != 'false' and not ossfuzz liblz4 = dependency('liblz4', required : want_lz4 == 'true') have = liblz4.found() @@ -1067,7 +1068,7 @@ endif conf.set10('HAVE_LZ4', have) want_xkbcommon = get_option('xkbcommon') -if want_xkbcommon != 'false' +if want_xkbcommon != 'false' and not ossfuzz libxkbcommon = dependency('xkbcommon', version : '>= 0.3.0', required : want_xkbcommon == 'true') @@ -1079,7 +1080,7 @@ endif conf.set10('HAVE_XKBCOMMON', have) want_glib = get_option('glib') -if want_glib != 'false' +if want_glib != 'false' and not ossfuzz libglib = dependency('glib-2.0', version : '>= 2.22.0', required : want_glib == 'true') @@ -1098,7 +1099,7 @@ endif conf.set10('HAVE_GLIB', have) want_dbus = get_option('dbus') -if want_dbus != 'false' +if want_dbus != 'false' and not ossfuzz libdbus = dependency('dbus-1', version : '>= 1.3.2', required : want_dbus == 'true') @@ -1110,6 +1111,9 @@ endif conf.set10('HAVE_DBUS', have) default_dnssec = get_option('default-dnssec') +if ossfuzz + default_dnssec = 'no' +endif if default_dnssec != 'no' and conf.get('HAVE_GCRYPT') == 0 message('default-dnssec cannot be set to yes or allow-downgrade when gcrypt is disabled. Setting default-dnssec to no.') default_dnssec = 'no' diff --git a/scripts/oss-fuzz.sh b/scripts/oss-fuzz.sh index b871d744b9..b0cd404ade 100755 --- a/scripts/oss-fuzz.sh +++ b/scripts/oss-fuzz.sh @@ -20,7 +20,7 @@ set -ex export LC_CTYPE=C.UTF-8 -meson $WORK -Doss-fuzz=true -Db_lundef=false -Dseccomp=false -Dlz4=false -Dlibiptc=false -Dlibidn=false +meson $WORK -Doss-fuzz=true -Db_lundef=false ninja -C $WORK fuzzers # get DNS packet corpus