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
