| # Copyright 2014 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import("//build/toolchain/toolchain.gni") |
| import("//testing/libfuzzer/fuzzer_test.gni") |
| |
| config("usrsctp_public_config") { |
| include_dirs = [ |
| "usrsctplib/usrsctplib", |
| "usrsctplib/usrsctplib/netinet", |
| ] |
| |
| # This is part of the public config because it's used both by usrsctp and |
| # the client (WebRTC), to determine if the length field needs populating. |
| if (is_mac || is_ios || target_os == "freebsd") { |
| defines = [ "HAVE_SCONN_LEN" ] |
| } |
| } |
| |
| # Used by both usrsctp static library and fuzzers. |
| config("usrsctp_internal_config") { |
| defines = [] |
| if (is_linux || is_chromeos || is_android) { |
| defines += [ "_GNU_SOURCE" ] |
| } else if (is_apple) { |
| defines += [ "__APPLE_USE_RFC_2292" ] |
| } |
| } |
| |
| config("usrsctp_warnings") { |
| if (is_clang) { |
| cflags = [ |
| # atomic_init in user_atomic.h is a static function in a header. |
| "-Wno-unused-function", |
| |
| # Use of deprecated OSAtomic* functions in user_atomic.h. This is |
| # what they did in configure.ac. We can remove this once |
| # https://github.com/sctplab/usrsctp/issues/177 is fixed. |
| "-Wno-deprecated-declarations", |
| |
| # usrsctp uses timingsafe_bcmp which is not available in all |
| # versions of OS X, however this isn't actually an issue since |
| # usrsctp provides its own implementation. |
| "-Wno-unguarded-availability", |
| ] |
| } |
| } |
| |
| static_library("usrsctp") { |
| sources = [ |
| "usrsctplib/usrsctplib/netinet/sctp.h", |
| "usrsctplib/usrsctplib/netinet/sctp_asconf.c", |
| "usrsctplib/usrsctplib/netinet/sctp_asconf.h", |
| "usrsctplib/usrsctplib/netinet/sctp_auth.c", |
| "usrsctplib/usrsctplib/netinet/sctp_auth.h", |
| "usrsctplib/usrsctplib/netinet/sctp_bsd_addr.c", |
| "usrsctplib/usrsctplib/netinet/sctp_bsd_addr.h", |
| "usrsctplib/usrsctplib/netinet/sctp_callout.c", |
| "usrsctplib/usrsctplib/netinet/sctp_callout.h", |
| "usrsctplib/usrsctplib/netinet/sctp_cc_functions.c", |
| "usrsctplib/usrsctplib/netinet/sctp_constants.h", |
| "usrsctplib/usrsctplib/netinet/sctp_crc32.c", |
| "usrsctplib/usrsctplib/netinet/sctp_crc32.h", |
| "usrsctplib/usrsctplib/netinet/sctp_header.h", |
| "usrsctplib/usrsctplib/netinet/sctp_indata.c", |
| "usrsctplib/usrsctplib/netinet/sctp_indata.h", |
| "usrsctplib/usrsctplib/netinet/sctp_input.c", |
| "usrsctplib/usrsctplib/netinet/sctp_input.h", |
| "usrsctplib/usrsctplib/netinet/sctp_lock_userspace.h", |
| "usrsctplib/usrsctplib/netinet/sctp_os.h", |
| "usrsctplib/usrsctplib/netinet/sctp_os_userspace.h", |
| "usrsctplib/usrsctplib/netinet/sctp_output.c", |
| "usrsctplib/usrsctplib/netinet/sctp_output.h", |
| "usrsctplib/usrsctplib/netinet/sctp_pcb.c", |
| "usrsctplib/usrsctplib/netinet/sctp_pcb.h", |
| "usrsctplib/usrsctplib/netinet/sctp_peeloff.c", |
| "usrsctplib/usrsctplib/netinet/sctp_peeloff.h", |
| "usrsctplib/usrsctplib/netinet/sctp_process_lock.h", |
| "usrsctplib/usrsctplib/netinet/sctp_sha1.c", |
| "usrsctplib/usrsctplib/netinet/sctp_sha1.h", |
| "usrsctplib/usrsctplib/netinet/sctp_ss_functions.c", |
| "usrsctplib/usrsctplib/netinet/sctp_structs.h", |
| "usrsctplib/usrsctplib/netinet/sctp_sysctl.c", |
| "usrsctplib/usrsctplib/netinet/sctp_sysctl.h", |
| "usrsctplib/usrsctplib/netinet/sctp_timer.c", |
| "usrsctplib/usrsctplib/netinet/sctp_timer.h", |
| "usrsctplib/usrsctplib/netinet/sctp_uio.h", |
| "usrsctplib/usrsctplib/netinet/sctp_userspace.c", |
| "usrsctplib/usrsctplib/netinet/sctp_usrreq.c", |
| "usrsctplib/usrsctplib/netinet/sctp_var.h", |
| "usrsctplib/usrsctplib/netinet/sctputil.c", |
| "usrsctplib/usrsctplib/netinet/sctputil.h", |
| "usrsctplib/usrsctplib/netinet6/sctp6_usrreq.c", |
| "usrsctplib/usrsctplib/netinet6/sctp6_var.h", |
| "usrsctplib/usrsctplib/user_atomic.h", |
| "usrsctplib/usrsctplib/user_environment.c", |
| "usrsctplib/usrsctplib/user_environment.h", |
| "usrsctplib/usrsctplib/user_inpcb.h", |
| "usrsctplib/usrsctplib/user_ip6_var.h", |
| "usrsctplib/usrsctplib/user_ip_icmp.h", |
| "usrsctplib/usrsctplib/user_malloc.h", |
| "usrsctplib/usrsctplib/user_mbuf.c", |
| "usrsctplib/usrsctplib/user_mbuf.h", |
| "usrsctplib/usrsctplib/user_queue.h", |
| "usrsctplib/usrsctplib/user_recv_thread.c", |
| "usrsctplib/usrsctplib/user_recv_thread.h", |
| "usrsctplib/usrsctplib/user_route.h", |
| "usrsctplib/usrsctplib/user_socket.c", |
| "usrsctplib/usrsctplib/user_socketvar.h", |
| "usrsctplib/usrsctplib/user_uma.h", |
| "usrsctplib/usrsctplib/usrsctp.h", |
| ] |
| |
| defines = [ |
| "SCTP_PROCESS_LEVEL_LOCKS", |
| "SCTP_SIMPLE_ALLOCATOR", |
| "SCTP_USE_OPENSSL_SHA1", |
| "__Userspace__", |
| |
| # "SCTP_DEBUG", # Uncomment for SCTP debugging. |
| ] |
| |
| configs -= [ "//build/config/compiler:chromium_code" ] |
| configs += [ |
| "//build/config/compiler:no_chromium_code", |
| |
| # These must be after no_chromium_code for warning flags to be ordered |
| # correctly. |
| "//build/config/compiler:no_incompatible_pointer_warnings", |
| ":usrsctp_warnings", |
| ":usrsctp_internal_config", |
| ] |
| |
| public_configs = [ ":usrsctp_public_config" ] |
| |
| cflags = [ |
| "-UINET", |
| "-UINET6", |
| ] |
| |
| if (is_linux || is_chromeos || is_android) { |
| defines += [ "__Userspace_os_Linux" ] |
| } else if (is_apple) { |
| defines += [ |
| "HAVE_SA_LEN", |
| "__Userspace_os_Darwin", |
| ] |
| } |
| |
| if (is_win) { |
| defines += [ "__Userspace_os_Windows" ] |
| } else { |
| defines += [ "NON_WINDOWS_DEFINE" ] |
| } |
| |
| if (is_fuchsia) { |
| defines += [ "__Userspace_os_Fuchsia" ] |
| } |
| |
| if (use_fuzzing_engine) { |
| defines += [ "INVARIANTS" ] |
| } |
| deps = [ "//third_party/boringssl" ] |
| } |
| |
| fuzzer_test("usrsctp_fuzzer_listen") { |
| sources = [ |
| "usrsctplib/fuzzer/fuzzer_listen.c", |
| "usrsctplib/programs/programs_helper.c", |
| ] |
| additional_configs = [ ":usrsctp_internal_config" ] |
| deps = [ ":usrsctp" ] |
| seed_corpus = "usrsctplib/fuzzer/CORPUS_LISTEN" |
| libfuzzer_options = [ "max_len=4086" ] |
| } |
| |
| fuzzer_test("usrsctp_fuzzer_fragment") { |
| sources = [ |
| "usrsctplib/fuzzer/fuzzer_fragment.c", |
| "usrsctplib/programs/programs_helper.c", |
| ] |
| additional_configs = [ ":usrsctp_internal_config" ] |
| deps = [ ":usrsctp" ] |
| seed_corpus = "usrsctplib/fuzzer/CORPUS_FRAGMENT" |
| libfuzzer_options = [ "max_len=4086" ] |
| } |
| |
| fuzzer_test("usrsctp_fuzzer_connect_multi") { |
| sources = [ |
| "usrsctplib/fuzzer/fuzzer_connect.c", |
| "usrsctplib/programs/programs_helper.c", |
| ] |
| |
| additional_configs = [ ":usrsctp_internal_config" ] |
| |
| # See usrsctplib/fuzzer/CMakeLists.txt. |
| # Stage 0 is "multi", which can start fuzzing at different points during the |
| # handshake based on the first fuzzed byte. There were plans to have dedicated |
| # fuzzers for various stages, but this idea was abandoned what was found that |
| # the "multi" fuzzer performed just as well. |
| defines = [ "FUZZING_STAGE=0" ] |
| |
| deps = [ ":usrsctp" ] |
| seed_corpus = "usrsctplib/fuzzer/CORPUS_CONNECT" |
| libfuzzer_options = [ "max_len=32000" ] |
| } |