Thanks.  Applied to master.

On Wed, Aug 22, 2018 at 03:09:26PM +0200, Bhargava Shastry wrote:
> Sorry, I forgot to attach the patch itself. Here it is (attached).
> 
> On 08/22/2018 02:37 PM, Bhargava Shastry wrote:
> > Hi Ben,
> > 
> > The patch looks good to me. I have signed it here:
> > 
> > https://github.com/bshastry/ovs/tree/try-patch-v3
> > 
> > that was rebased on top off latest master.
> > 
> > Regards,
> > Bhargava
> > 
> > On 08/22/2018 01:01 AM, Ben Pfaff wrote:
> >> I sent a v2:
> >>         https://patchwork.ozlabs.org/patch/960749/
> >>
> >> If you like it, I need a Signed-off-by from you.
> >>
> >> Q: What's a Signed-off-by and how do I provide one?
> >>
> >>     A: Free and open source software projects usually require a 
> >> contributor to
> >>     provide some assurance that they're entitled to contribute the code 
> >> that
> >>     they provide.  Some projects, for example, do this with a Contributor
> >>     License Agreement (CLA) or a copyright assignment that is signed on 
> >> paper
> >>     or electronically.
> >>
> >>     For this purpose, Open vSwitch has adopted something called the 
> >> Developer's
> >>     Certificate of Origin (DCO), which is also used by the Linux kernel and
> >>     originated there.  Informally stated, agreeing to the DCO is the
> >>     developer's way of attesting that a particular commit that they are
> >>     contributing is one that they are allowed to contribute.  You should 
> >> visit
> >>     https://developercertificate.org/ to read the full statement of the 
> >> DCO,
> >>     which is less than 200 words long.
> >>
> >>     To certify compliance with the Developer's Certificate of Origin for a
> >>     particular commit, just add the following line to the end of your 
> >> commit
> >>     message, properly substituting your name and email address:
> >>
> >>         Signed-off-by: Firstname Lastname <[email protected]>
> >>
> >>     Git has special support for adding a Signed-off-by line to a commit
> >>     message: when you run "git commit", just add the -s option, as in "git
> >>     commit -s".  If you use the "git citool" GUI for commits, you can add a
> >>     Signed-off-by line to the commit message by pressing Control+S.  Other 
> >> Git
> >>     user interfaces may provide similar support.
> >>
> >> Thanks,
> >>
> >> Ben.
> >>
> >> On Fri, Aug 03, 2018 at 10:51:39AM +0200, Bhargava Shastry wrote:
> >>> Hello,
> >>>
> >>> Gentle reminder to check if the proposed patch works :-)
> >>>
> >>> Thanks,
> >>> Bhargava
> >>>
> >>> On 07/30/2018 11:58 AM, Bhargava Shastry wrote:
> >>>> Any updates on the proposed patch? :-)
> >>>>
> >>>> On 07/16/2018 02:07 PM, Bhargava Shastry wrote:
> >>>>> Update: I fixed these errors in the attached patch that supersedes the
> >>>>> patch here (https://patchwork.ozlabs.org/patch/942118/)
> >>>>>
> >>>>> The major change is that I add the following line for each fuzz target
> >>>>> binary in the tests/oss-fuzz/automake.mk file:
> >>>>>
> >>>>> e.g.,
> >>>>> tests_oss_fuzz_flow_extract_target_LDFLAGS = $(LIB_FUZZING_ENGINE) \
> >>>>>                                             -lc++
> >>>>>
> >>>>> Regards,
> >>>>> Bhargava
> >>>>>
> >>>>> On 07/16/2018 11:45 AM, Bhargava Shastry wrote:
> >>>>>> Oops, here's the link failure log:
> >>>>>>
> >>>>>> ```
> >>>>>> /usr/lib/gcc/x86_64-linux-gnu/5.4.0/../../../x86_64-linux-gnu/crt1.o: 
> >>>>>> In
> >>>>>> function `_start':
> >>>>>> (.text+0x20): undefined reference to `main'
> >>>>>> clang-7: error: linker command failed with exit code 1 (use -v to see
> >>>>>> invocation)
> >>>>>> Makefile:4159: recipe for target 'tests/oss-fuzz/flow_extract_target' 
> >>>>>> failed
> >>>>>> make: *** [tests/oss-fuzz/flow_extract_target] Error 1
> >>>>>> fuzzers build failed.
> >>>>>> ```
> >>>>>>
> >>>>>> The main symbol is provided by libfuzzer (clang++ -lFuzzingEngine)
> >>>>>>
> >>>>>> Regards,
> >>>>>> Bhargava
> >>>>>>
> >>>>>> On 07/16/2018 11:36 AM, Bhargava Shastry wrote:
> >>>>>>> Hi Ben,
> >>>>>>>
> >>>>>>>> Never mind that one, I failed to check in some of that.
> >>>>>>>>
> >>>>>>>> I sent it formally:
> >>>>>>>>         https://patchwork.ozlabs.org/patch/942118/
> >>>>>>>
> >>>>>>> Thanks for the patch. This fixes the previous error. Now, there are 
> >>>>>>> some
> >>>>>>> new errors during the compilation/linking process. I think most of 
> >>>>>>> this
> >>>>>>> can be fixed if I figure out how automake works. In a nutshell, here's
> >>>>>>> the problem:
> >>>>>>>
> >>>>>>> - oss-fuzz provides compilation flags that can be plugged in like so
> >>>>>>> ```
> >>>>>>> CC=clang
> >>>>>>> CXX=clang++
> >>>>>>> CFLAGS=-O1 -fno-omit-frame-pointer -gline-tables-only
> >>>>>>> -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION -fsanitize=address
> >>>>>>> -fsanitize-address-use-after-scope -fsanitize=fuzzer-no-link
> >>>>>>> CXXFLAGS=-O1 -fno-omit-frame-pointer -gline-tables-only
> >>>>>>> -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION -fsanitize=address
> >>>>>>> -fsanitize-address-use-after-scope -fsanitize=fuzzer-no-link 
> >>>>>>> -stdlib=libc++
> >>>>>>> ```
> >>>>>>>
> >>>>>>> And here's what I used to do before
> >>>>>>>
> >>>>>>> - Use clang and CFLAGS above plus some additional includes to compile
> >>>>>>> each of the fuzzer tests
> >>>>>>> - Use clang++ and additional linker flags to link these into a fuzzer 
> >>>>>>> binary
> >>>>>>>
> >>>>>>> Now, I see that the compilation works
> >>>>>>> ```
> >>>>>>> depbase=`echo tests/oss-fuzz/flow_extract_target.o | sed
> >>>>>>> 's|[^/]*$|.deps/&|;s|\.o$||'`;\
> >>>>>>> clang -DHAVE_CONFIG_H -I.    -I ./include -I ./include -I ./lib -I 
> >>>>>>> ./lib
> >>>>>>> -I/usr/include   -Wstrict-prototypes -Wall -Wextra -Wno-sign-compare
> >>>>>>> -Wpointer-arith -Wformat -Wformat-security -Wswitch-enum
> >>>>>>> -Wunused-parameter -Wbad-function-cast -Wcast-align 
> >>>>>>> -Wstrict-prototypes
> >>>>>>> -Wold-style-definition -Wmissing-prototypes 
> >>>>>>> -Wmissing-field-initializers
> >>>>>>> -Wthread-safety -fno-strict-aliasing -Wswitch-bool
> >>>>>>> -Wlogical-not-parentheses -Wsizeof-array-argument 
> >>>>>>> -Wshift-negative-value
> >>>>>>> -Qunused-arguments -Wshadow -Wno-null-pointer-arithmetic    -O1
> >>>>>>> -fno-omit-frame-pointer -gline-tables-only
> >>>>>>> -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION -fsanitize=address
> >>>>>>> -fsanitize-address-use-after-scope -fsanitize=fuzzer-no-link -MT
> >>>>>>> tests/oss-fuzz/flow_extract_target.o -MD -MP -MF $depbase.Tpo -c -o
> >>>>>>> tests/oss-fuzz/flow_extract_target.o
> >>>>>>> tests/oss-fuzz/flow_extract_target.c &&\
> >>>>>>> mv -f $depbase.Tpo $depbase.Po
> >>>>>>> ```
> >>>>>>>
> >>>>>>> However, the linking fails
> >>>>>>> ```
> >>>>>>> libtool: link: clang -Wstrict-prototypes -Wall -Wextra 
> >>>>>>> -Wno-sign-compare
> >>>>>>> -Wpointer-arith -Wformat -Wformat-security -Wswitch-enum
> >>>>>>> -Wunused-parameter -Wbad-function-cast -Wcast-align 
> >>>>>>> -Wstrict-prototypes
> >>>>>>> -Wold-style-definition -Wmissing-prototypes 
> >>>>>>> -Wmissing-field-initializers
> >>>>>>> -Wthread-safety -fno-strict-aliasing -Wswitch-bool
> >>>>>>> -Wlogical-not-parentheses -Wsizeof-array-argument 
> >>>>>>> -Wshift-negative-value
> >>>>>>> -Qunused-arguments -Wshadow -Wno-null-pointer-arithmetic -O1
> >>>>>>> -fno-omit-frame-pointer -gline-tables-only
> >>>>>>> -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION -fsanitize=address
> >>>>>>> -fsanitize-address-use-after-scope -fsanitize=fuzzer-no-link -o
> >>>>>>> tests/oss-fuzz/flow_extract_target 
> >>>>>>> tests/oss-fuzz/flow_extract_target.o
> >>>>>>> -L/usr/lib lib/.libs/libopenvswitch.a -lssl -lcrypto -latomic
> >>>>>>> ```
> >>>>>>>
> >>>>>>> I think adding -lFuzzingEngine should fix this but another variable
> >>>>>>> between my build script and automake is the use of clang++ for 
> >>>>>>> linking.
> >>>>>>>
> >>>>>>> Do you know how I can experiment with different linker flags and
> >>>>>>> compiler/linker in automake?
> >>>>>>>
> >>>>>>> Regards,
> >>>>>>> Bhargava
> >>>>>>>
> >>>>>>>
> >>>>>>
> >>>>>
> >>>>
> >>>
> >>> -- 
> >>> Bhargava Shastry <[email protected]>
> >>> Security in Telecommunications
> >>> TU Berlin / Telekom Innovation Laboratories
> >>> Ernst-Reuter-Platz 7, Sekr TEL 17 / D - 10587 Berlin, Germany
> >>> phone: +49 30 8353 58235
> >>> Keybase: https://keybase.io/bshastry
> > 
> 
> -- 
> Bhargava Shastry <[email protected]>
> Security in Telecommunications
> TU Berlin / Telekom Innovation Laboratories
> Ernst-Reuter-Platz 7, Sekr TEL 17 / D - 10587 Berlin, Germany
> phone: +49 30 8353 58235
> Keybase: https://keybase.io/bshastry

> From b1f8df05c7a93fe5bc71ee650daeb701c27ba7db Mon Sep 17 00:00:00 2001
> From: Bhargava Shastry <[email protected]>
> Date: Wed, 22 Aug 2018 15:07:15 +0200
> Subject: [PATCH] Moved oss-fuzz test cases to OvS repo and added a Make target
>  for them.
> 
> Signed-off-by: Bhargava Shastry <bshastry at sec.t-labs.tu-berlin.de>
> ---
>  Makefile.am                                   |   1 +
>  tests/automake.mk                             |   2 +
>  tests/oss-fuzz/automake.mk                    |  30 ++
>  .../config/flow_extract_target.options        |   2 +
>  .../config/json_parser_target.options         |   2 +
>  .../oss-fuzz/config/ofp_print_target.options  |   3 +
>  tests/oss-fuzz/config/ovs.dict                | 293 ++++++++++++++++++
>  tests/oss-fuzz/flow_extract_target.c          |  15 +
>  tests/oss-fuzz/fuzzer.h                       |   9 +
>  tests/oss-fuzz/json_parser_target.c           |  42 +++
>  tests/oss-fuzz/ofp_print_target.c             |  47 +++
>  11 files changed, 446 insertions(+)
>  create mode 100644 tests/oss-fuzz/automake.mk
>  create mode 100644 tests/oss-fuzz/config/flow_extract_target.options
>  create mode 100644 tests/oss-fuzz/config/json_parser_target.options
>  create mode 100644 tests/oss-fuzz/config/ofp_print_target.options
>  create mode 100644 tests/oss-fuzz/config/ovs.dict
>  create mode 100644 tests/oss-fuzz/flow_extract_target.c
>  create mode 100644 tests/oss-fuzz/fuzzer.h
>  create mode 100644 tests/oss-fuzz/json_parser_target.c
>  create mode 100644 tests/oss-fuzz/ofp_print_target.c
> 
> diff --git a/Makefile.am b/Makefile.am
> index 788972804..ff472ad81 100644
> --- a/Makefile.am
> +++ b/Makefile.am
> @@ -102,6 +102,7 @@ dist_pkgdata_SCRIPTS =
>  dist_sbin_SCRIPTS =
>  dist_scripts_SCRIPTS =
>  dist_scripts_DATA =
> +EXTRA_PROGRAMS =
>  INSTALL_DATA_LOCAL =
>  UNINSTALL_LOCAL =
>  man_MANS =
> diff --git a/tests/automake.mk b/tests/automake.mk
> index 49ceb415d..b29a37ec8 100644
> --- a/tests/automake.mk
> +++ b/tests/automake.mk
> @@ -477,3 +477,5 @@ clean-pki:
>       rm -f tests/pki/stamp
>       rm -rf tests/pki
>  endif
> +
> +include tests/oss-fuzz/automake.mk
> diff --git a/tests/oss-fuzz/automake.mk b/tests/oss-fuzz/automake.mk
> new file mode 100644
> index 000000000..9f46de6d0
> --- /dev/null
> +++ b/tests/oss-fuzz/automake.mk
> @@ -0,0 +1,30 @@
> +OSS_FUZZ_TARGETS = \
> +     tests/oss-fuzz/flow_extract_target \
> +     tests/oss-fuzz/json_parser_target \
> +     tests/oss-fuzz/ofp_print_target
> +EXTRA_PROGRAMS += $(OSS_FUZZ_TARGETS)
> +oss-fuzz-targets: $(OSS_FUZZ_TARGETS)
> +
> +tests_oss_fuzz_flow_extract_target_SOURCES = \
> +     tests/oss-fuzz/flow_extract_target.c \
> +     tests/oss-fuzz/fuzzer.h
> +tests_oss_fuzz_flow_extract_target_LDADD = lib/libopenvswitch.la
> +tests_oss_fuzz_flow_extract_target_LDFLAGS = $(LIB_FUZZING_ENGINE) -lc++
> +
> +tests_oss_fuzz_json_parser_target_SOURCES = \
> +     tests/oss-fuzz/json_parser_target.c \
> +     tests/oss-fuzz/fuzzer.h
> +tests_oss_fuzz_json_parser_target_LDADD = lib/libopenvswitch.la
> +tests_oss_fuzz_json_parser_target_LDFLAGS = $(LIB_FUZZING_ENGINE) -lc++
> +
> +tests_oss_fuzz_ofp_print_target_SOURCES = \
> +     tests/oss-fuzz/ofp_print_target.c \
> +     tests/oss-fuzz/fuzzer.h
> +tests_oss_fuzz_ofp_print_target_LDADD = lib/libopenvswitch.la
> +tests_oss_fuzz_ofp_print_target_LDFLAGS = $(LIB_FUZZING_ENGINE) -lc++
> +
> +EXTRA_DIST += \
> +     tests/oss-fuzz/config/flow_extract_target.options \
> +     tests/oss-fuzz/config/json_parser_target.options \
> +     tests/oss-fuzz/config/ofp_print_target.options \
> +     tests/oss-fuzz/config/ovs.dict
> diff --git a/tests/oss-fuzz/config/flow_extract_target.options 
> b/tests/oss-fuzz/config/flow_extract_target.options
> new file mode 100644
> index 000000000..7a77aaf04
> --- /dev/null
> +++ b/tests/oss-fuzz/config/flow_extract_target.options
> @@ -0,0 +1,2 @@
> +[libfuzzer]
> +dict = ovs.dict
> diff --git a/tests/oss-fuzz/config/json_parser_target.options 
> b/tests/oss-fuzz/config/json_parser_target.options
> new file mode 100644
> index 000000000..8d3739a53
> --- /dev/null
> +++ b/tests/oss-fuzz/config/json_parser_target.options
> @@ -0,0 +1,2 @@
> +[libfuzzer]
> +dict = json.dict
> diff --git a/tests/oss-fuzz/config/ofp_print_target.options 
> b/tests/oss-fuzz/config/ofp_print_target.options
> new file mode 100644
> index 000000000..7f117292e
> --- /dev/null
> +++ b/tests/oss-fuzz/config/ofp_print_target.options
> @@ -0,0 +1,3 @@
> +[libfuzzer]
> +close_fd_mask = 3
> +dict = ovs.dict
> diff --git a/tests/oss-fuzz/config/ovs.dict b/tests/oss-fuzz/config/ovs.dict
> new file mode 100644
> index 000000000..243b243ab
> --- /dev/null
> +++ b/tests/oss-fuzz/config/ovs.dict
> @@ -0,0 +1,293 @@
> +"0.2"
> +"ADD_SUBSCRIBE"
> +"-cbc"
> +"CLEARSUB"
> +"CLIENT"
> +"GIMME"
> +"GIMMEDEFS"
> +"GIMMESTATS"
> +"HM"
> +"-hmac96"
> +"HM_CTL"
> +"HM_STAT"
> +"HMST_CLIENT"
> +"LOGIN"
> +"\\MAILSLOT\\BROWSE"
> +"NET-ANNOUNCED"
> +"NET-VISIBLE"
> +"-nodefs"
> +"NONE"
> +"OPSTAFF"
> +"\\PIPE\\LANMAN"
> +"public"
> +"REALM"
> +"REALM-ANNOUNCED"
> +"REALM-VISIBLE"
> +"REQ_SUBSCRIBE"
> +"RLM_SUBSCRIBE"
> +"RLM_UNSUBSCRIBE"
> +"SENT"
> +" %ssub%s"
> +"SUBSCRIBE"
> +"SUBSCRIBE_NODEFS"
> +"un"
> +"UNSUBSCRIBE"
> +"USER_FLUSH"
> +"USER_HIDE"
> +"USER_LOCATE"
> +"USER_UNHIDE"
> +"WG_CTL"
> +"\x01\x00"
> +"\x01\x00\x00"
> +"\x01\x00\x01"
> +"\x01\x00\x02"
> +"\x01\x00\x03"
> +"\x01\x00\x05"
> +"\x01\x01"
> +"\x01\x02"
> +"\x01\x03"
> +"\x01\x04"
> +"\x01\x05"
> +"\x01\x07"
> +"\x01\x0B"
> +"\x01\x0C"
> +"\x01\x10"
> +"\x01\x11"
> +"\x01\x12"
> +"\x01\x13"
> +"\x01\x14"
> +"\x01\x15"
> +"\x01\x16"
> +"\x01\xE8\x48"
> +"\x01\xF4"
> +"\x01\xF5"
> +"\x01\xF6"
> +"\x01\xF7"
> +"\x01\xF8"
> +"\x01\xF9"
> +"\x01\xFA"
> +"\x01\xFB"
> +"\x01\xFC"
> +"\x01\xFD"
> +"\x01\xFE"
> +"\x01\xFF"
> +"\x02\x00"
> +"\x02\x00\x00"
> +"\x02\x01"
> +"\x02\x02"
> +"\x02\x03"
> +"\x02\x04"
> +"\x02\x05"
> +"\x02\x06"
> +"\x02\x07"
> +"\x02\x08"
> +"\x02\x09"
> +"\x02\x0C"
> +"\x02\x0E"
> +"\x02\x0F"
> +"\x02\x11"
> +"\x02\x12"
> +"\x02\x58"
> +"\x02\x81"
> +"\x02\x83"
> +"\x03\x00"
> +"\x03\x01"
> +"\x03\x02"
> +"\x03\x03"
> +"\x03\x06"
> +"\x03\xE8"
> +"\x03\xE9"
> +"\x03\xEA"
> +"\x03\xEB"
> +"\x03\xEC"
> +"\x03\xED"
> +"\x03\xEE"
> +"\x03\xEF"
> +"\x03\xF0"
> +"\x03\xF1"
> +"\x03\xF2"
> +"\x03\xF3"
> +"\x03\xF4"
> +"\x03\xFF\xFF\xFF"
> +"\x04\x00"
> +"\x04\x00\x00"
> +"\x04\x01"
> +"\x04\x02"
> +"\x04\x03"
> +"\x04\x04"
> +"\x04\x51"
> +"\x04\x52"
> +"\x04\x53"
> +"\x04\x55"
> +"\x04\x56"
> +"\x05\x00"
> +"\x05\x01"
> +"\x05\x02"
> +"\x05\x03"
> +"\x05\x53"
> +"\x05\xCC"
> +"\x05\xDC"
> +"\x06\x00"
> +"\x06\x01"
> +"\x06\xCF"
> +"\x07\x07"
> +"\x07\xC1"
> +"\x07\xFF"
> +"\x08\x00"
> +"\x08\x00\x00\x00"
> +"\x08\x00\x07"
> +"\x08\x01"
> +"\x08\x06"
> +"\x08\x38\x00\x00"
> +"\x0A\x00\xB1"
> +"\x0C\x01"
> +"\x0C\x02"
> +"\x0C\x03"
> +"\x0C\x04"
> +"\x0C\x05"
> +"\x0C\x06"
> +"\x0C\x08"
> +"\x0D\x80"
> +"\x0E\x00"
> +"\x0E\x10"
> +"\x0E\xC8"
> +"\x0E\xC9"
> +"\x0F\x42\x40"
> +"\x0F\xFF"
> +"\x10\x00"
> +"\x11\x11"
> +"\x11\xD7"
> +"\x12\x0F"
> +"\x12\xBB"
> +"\x1A\x30"
> +"\x1A\x31"
> +"\x1A\x32"
> +"\x1B\x21"
> +"\x1B\x58"
> +"\x1B\x59"
> +"\x1B\x5A"
> +"\x1B\x5B"
> +"\x1B\x5C"
> +"\x1B\x5D"
> +"\x1B\x5F"
> +"\x1B\x61"
> +"\x1F\x00"
> +"\x1F\x40"
> +"\x1F\xFF"
> +"\x1F\xFF\xFF"
> +"\x20\x00"
> +"\x20\x03"
> +"\x20\x04"
> +"\x27\x10"
> +"\x27\x13"
> +"\x2F\xBF"
> +"\x35\x00\x00"
> +"\x3C\x13"
> +"\x40\x00"
> +"\x40\x04"
> +"\x40\x80"
> +"\x47\x00\x06\x01"
> +"\x4E\x20"
> +"\x4E\x21"
> +"\x4E\x22"
> +"\x4E\x23"
> +"\x4E\x24"
> +"\x4E\x25"
> +"\x4E\x26"
> +"\x4E\x27"
> +"\x4E\x28"
> +"\x4E\x29"
> +"\x4E\x2A"
> +"\x4E\x2C"
> +"\x60\x00"
> +"\x60\x01"
> +"\x60\x02"
> +"\x60\x03"
> +"\x60\x04"
> +"\x60\x07"
> +"\x7F\xFF"
> +"\x7F\xFF\xFF"
> +"\x80\x00"
> +"\x80\x00\x00\x00"
> +"\x80\x01"
> +"\x80\x05"
> +"\x80\x0A"
> +"\x80\x21"
> +"\x80\x21\x10\x01"
> +"\x80\x21\x10\x02"
> +"\x80\x23"
> +"\x80\x35"
> +"\x80\x57"
> +"\x80\x9B"
> +"\x80\xC2"
> +"\x80\xF3"
> +"\x80\xFD"
> +"\x81\x00"
> +"\x81\x37"
> +"\x82\x81"
> +"\x83\xAA\x7E\x80"
> +"\x85\xBE"
> +"\x86\xDD"
> +"\x88\x08"
> +"\x88\x09"
> +"\x88\x0B"
> +"\x88\x47"
> +"\x88\x48"
> +"\x88\x63"
> +"\x88\x64"
> +"\x88\x6F"
> +"\x88\x70"
> +"\x88\x8E"
> +"\x88\x99"
> +"\x88\xA2"
> +"\x88\xA8"
> +"\x88\xCA"
> +"\x88\xCC"
> +"\x89\x02"
> +"\x89\x3A"
> +"\x89\x47"
> +"\x90\x00"
> +"\x91\x00"
> +"\xA0\x00"
> +"\xAB\xCD"
> +"\xB0\x00"
> +"\xC0\x00\x00\x00"
> +"\xC0\x21"
> +"\xC0\x23"
> +"\xC0\x25"
> +"\xC0\x27"
> +"\xC0\x2B"
> +"\xC0\x2D"
> +"\xC1\x23"
> +"\xC2\x23"
> +"\xC2\x27"
> +"\xDA\xDA"
> +"\xE0\x00"
> +"\xE0\x00\x00\x00"
> +"\xF0\x00\x00\x00"
> +"\xF1\x0A"
> +"\xF9\x89"
> +"\xFC\x00"
> +"\xFD\xE9"
> +"\xFE\xFE"
> +"\xFF\x00"
> +"\xFF\x00\x00"
> +"\xFF\x00\x00\x00"
> +"\xFF\xF0"
> +"\xFF\xF8"
> +"\xFF\xFD"
> +"\xFF\xFE"
> +"\xFF\xFF"
> +"\xFF\xFF\x00\x00"
> +"\xFF\xFF\xF0\x00"
> +"\xFF\xFF\xFF\x00"
> +"\xFF\xFF\xFF\x01"
> +"\xFF\xFF\xFF\x02"
> +"\xFF\xFF\xFF\x03"
> +"\xFF\xFF\xFF\xEF"
> +"\xFF\xFF\xFF\xFD"
> +"\xFF\xFF\xFF\xFE"
> +"\xFF\xFF\xFF\xFF"
> +"ZEPH"
> +"ZEPHYR_ADMIN"
> +"ZEPHYR_CTL"
> diff --git a/tests/oss-fuzz/flow_extract_target.c 
> b/tests/oss-fuzz/flow_extract_target.c
> new file mode 100644
> index 000000000..e03cf136c
> --- /dev/null
> +++ b/tests/oss-fuzz/flow_extract_target.c
> @@ -0,0 +1,15 @@
> +#include <config.h>
> +#include "fuzzer.h"
> +#include "dp-packet.h"
> +#include "flow.h"
> +
> +int
> +LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
> +{
> +    struct dp_packet packet;
> +    struct flow flow;
> +
> +    dp_packet_use_const(&packet, data, size);
> +    flow_extract(&packet, &flow);
> +    return 0;
> +}
> diff --git a/tests/oss-fuzz/fuzzer.h b/tests/oss-fuzz/fuzzer.h
> new file mode 100644
> index 000000000..f87ae59e9
> --- /dev/null
> +++ b/tests/oss-fuzz/fuzzer.h
> @@ -0,0 +1,9 @@
> +#ifndef FUZZER_H
> +#define FUZZER_H 1
> +
> +#include <stdint.h>
> +#include <stddef.h>
> +
> +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size);
> +
> +#endif  /* fuzzer.h */
> diff --git a/tests/oss-fuzz/json_parser_target.c 
> b/tests/oss-fuzz/json_parser_target.c
> new file mode 100644
> index 000000000..e39e04a0d
> --- /dev/null
> +++ b/tests/oss-fuzz/json_parser_target.c
> @@ -0,0 +1,42 @@
> +#include <config.h>
> +#include "fuzzer.h"
> +#include "jsonrpc.h"
> +#include "openvswitch/json.h"
> +#include "ovsdb-error.h"
> +#include "ovsdb/table.h"
> +#include <assert.h>
> +#include <string.h>
> +
> +int
> +LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
> +{
> +    if (!size || data[size - 1]) {
> +        return 0;
> +    }
> +
> +    struct json *j1 = json_from_string((const char *)data);
> +    if (j1->type == JSON_STRING) {
> +        json_destroy(j1);
> +        return 0;
> +    }
> +
> +    free(json_to_string(j1, JSSF_SORT | JSSF_PRETTY));
> +
> +    struct jsonrpc_msg *msg;
> +    char *error = jsonrpc_msg_from_json(j1, &msg); /* Frees 'j1'. */
> +    if (error) {
> +        free(error);
> +        return 0;
> +    }
> +
> +    struct json *j2 = jsonrpc_msg_to_json(msg); /* Frees 'msg'. */
> +    if (j2->type == JSON_STRING) {
> +        json_destroy(j2);
> +        return 0;
> +    }
> +
> +    free(json_to_string(j2, JSSF_SORT | JSSF_PRETTY));
> +    json_destroy(j2);
> +
> +    return 0;
> +}
> diff --git a/tests/oss-fuzz/ofp_print_target.c 
> b/tests/oss-fuzz/ofp_print_target.c
> new file mode 100644
> index 000000000..126f2623f
> --- /dev/null
> +++ b/tests/oss-fuzz/ofp_print_target.c
> @@ -0,0 +1,47 @@
> +#include <config.h>
> +#include "fuzzer.h"
> +#include "dp-packet.h"
> +#include "openvswitch/ofp-print.h"
> +#include "openvswitch/ofpbuf.h"
> +#include "openvswitch/vlog.h"
> +
> +int
> +LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
> +{
> +    if (size < sizeof(struct ofp_header)) {
> +        return 0;
> +    }
> +
> +    static bool isInit = false;
> +    if (!isInit) {
> +        vlog_set_verbosity("off");
> +        isInit = true;
> +    }
> +
> +    struct ofpbuf b;
> +    ofpbuf_use_const(&b, data, size);
> +    for (;;) {
> +        /* Check if ofpbuf contains ofp header. */
> +        struct ofp_header *oh = ofpbuf_at(&b, 0, sizeof *oh);
> +        if (!oh) {
> +            break;
> +        }
> +
> +        /* Check if length is geq than lower bound. */
> +        size_t length = ntohs(oh->length);
> +        if (length < sizeof *oh) {
> +            break;
> +        }
> +
> +        /* Check if ofpbuf contains payload. */
> +        size_t tail_len = length - sizeof *oh;
> +        void *tail = ofpbuf_at(&b, sizeof *oh, tail_len);
> +        if (!tail) {
> +            break;
> +        }
> +
> +        ofp_print(stdout, ofpbuf_pull(&b, length), length, NULL, NULL, 2);
> +    }
> +    ofpbuf_uninit(&b);
> +    return 0;
> +}
> -- 
> 2.17.1
> 

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to