Message ID | 20191018091308.16406-1-bshas3@gmail.com |
---|---|
State | Accepted |
Commit | 45d4c279f9690f5f40883a7fa68595ac2f6105a9 |
Headers | show |
Series | [ovs-dev] Remove oss-fuzz tests carried over from ovs | expand |
Bleep bloop. Greetings , I am a robot and I have tried out your patch. Thanks for your contribution. I encountered some error that I wasn't expecting. See the details below. git-am: fatal: sha1 information is lacking or useless (tests/automake.mk). Repository lacks necessary blobs to fall back on 3-way merge. Cannot fall back to three-way merge. Patch failed at 0001 Remove oss-fuzz tests carried over from ovs The copy of the patch that failed is found in: /var/lib/jenkins/jobs/upstream_build_from_pw/workspace/.git/rebase-apply/patch When you have resolved this problem, run "git am --resolved". If you prefer to skip this patch, run "git am --skip" instead. To restore the original branch and stop patching, run "git am --abort". Please check this out. If you feel there has been an error, please email aconole@redhat.com Thanks, 0-day Robot
Just want to add that the patch is to be applied to ovn source code, I couldn't find the ovn mailing list so sent it here. Apologies. On Fri, Oct 18, 2019 at 11:13 AM <bshas3@gmail.com> wrote: > From: Bhargava Shastry <bshas3@gmail.com> > > It appears that ossfuzz specific test harnesses and configuration files > were carried over to the ovn repo from the ovs repo without > justification. This patch removes them until there is a need to > continuously fuzz ovn code as the ovs code is currently fuzzed. > > Signed-off-by: Bhargava Shastry <bshas3@gmail.com> > --- > tests/automake.mk | 2 - > tests/oss-fuzz/automake.mk | 66 --- > tests/oss-fuzz/config/expr.dict | 120 ----- > .../oss-fuzz/config/expr_parse_target.options | 3 - > .../config/flow_extract_target.options | 3 - > .../config/json_parser_target.options | 2 - > tests/oss-fuzz/config/miniflow_target.options | 3 - > tests/oss-fuzz/config/odp.dict | 170 ------- > tests/oss-fuzz/config/odp_target.options | 3 - > .../config/ofctl_parse_target.options | 3 - > tests/oss-fuzz/config/ofp-flow.dict | 45 -- > .../oss-fuzz/config/ofp_print_target.options | 3 - > tests/oss-fuzz/config/ovs.dict | 293 ----------- > tests/oss-fuzz/expr_parse_target.c | 464 ------------------ > tests/oss-fuzz/flow_extract_target.c | 100 ---- > tests/oss-fuzz/fuzzer.h | 9 - > tests/oss-fuzz/json_parser_target.c | 42 -- > tests/oss-fuzz/miniflow_target.c | 365 -------------- > tests/oss-fuzz/odp_target.c | 149 ------ > tests/oss-fuzz/ofctl_parse_target.c | 113 ----- > tests/oss-fuzz/ofp_print_target.c | 47 -- > 21 files changed, 2005 deletions(-) > delete mode 100644 tests/oss-fuzz/automake.mk > delete mode 100644 tests/oss-fuzz/config/expr.dict > delete mode 100644 tests/oss-fuzz/config/expr_parse_target.options > delete mode 100644 tests/oss-fuzz/config/flow_extract_target.options > delete mode 100644 tests/oss-fuzz/config/json_parser_target.options > delete mode 100644 tests/oss-fuzz/config/miniflow_target.options > delete mode 100644 tests/oss-fuzz/config/odp.dict > delete mode 100644 tests/oss-fuzz/config/odp_target.options > delete mode 100644 tests/oss-fuzz/config/ofctl_parse_target.options > delete mode 100644 tests/oss-fuzz/config/ofp-flow.dict > delete mode 100644 tests/oss-fuzz/config/ofp_print_target.options > delete mode 100644 tests/oss-fuzz/config/ovs.dict > delete mode 100644 tests/oss-fuzz/expr_parse_target.c > delete mode 100644 tests/oss-fuzz/flow_extract_target.c > delete mode 100644 tests/oss-fuzz/fuzzer.h > delete mode 100644 tests/oss-fuzz/json_parser_target.c > delete mode 100644 tests/oss-fuzz/miniflow_target.c > delete mode 100644 tests/oss-fuzz/odp_target.c > delete mode 100644 tests/oss-fuzz/ofctl_parse_target.c > delete mode 100644 tests/oss-fuzz/ofp_print_target.c > > diff --git a/tests/automake.mk b/tests/automake.mk > index 013e59280..e86a5273e 100644 > --- a/tests/automake.mk > +++ b/tests/automake.mk > @@ -246,5 +246,3 @@ 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 > deleted file mode 100644 > index 5bf7d0d7c..000000000 > --- a/tests/oss-fuzz/automake.mk > +++ /dev/null > @@ -1,66 +0,0 @@ > -OSS_FUZZ_TARGETS = \ > - tests/oss-fuzz/flow_extract_target \ > - tests/oss-fuzz/json_parser_target \ > - tests/oss-fuzz/ofp_print_target \ > - tests/oss-fuzz/expr_parse_target \ > - tests/oss-fuzz/odp_target \ > - tests/oss-fuzz/miniflow_target \ > - tests/oss-fuzz/ofctl_parse_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++ > - > -tests_oss_fuzz_expr_parse_target_SOURCES = \ > - tests/oss-fuzz/expr_parse_target.c \ > - tests/oss-fuzz/fuzzer.h > -tests_oss_fuzz_expr_parse_target_LDADD = lib/libopenvswitch.la \ > - ovn/lib/libovn.la > -tests_oss_fuzz_expr_parse_target_LDFLAGS = $(LIB_FUZZING_ENGINE) -lc++ > - > -tests_oss_fuzz_odp_target_SOURCES = \ > - tests/oss-fuzz/odp_target.c \ > - tests/oss-fuzz/fuzzer.h > -tests_oss_fuzz_odp_target_LDADD = lib/libopenvswitch.la > -tests_oss_fuzz_odp_target_LDFLAGS = $(LIB_FUZZING_ENGINE) -lc++ > - > -tests_oss_fuzz_miniflow_target_SOURCES = \ > - tests/oss-fuzz/miniflow_target.c \ > - tests/oss-fuzz/fuzzer.h > -tests_oss_fuzz_miniflow_target_LDADD = lib/libopenvswitch.la > -tests_oss_fuzz_miniflow_target_LDFLAGS = $(LIB_FUZZING_ENGINE) -lc++ > - > -tests_oss_fuzz_ofctl_parse_target_SOURCES = \ > - tests/oss-fuzz/ofctl_parse_target.c \ > - tests/oss-fuzz/fuzzer.h > -tests_oss_fuzz_ofctl_parse_target_LDADD = lib/libopenvswitch.la > -tests_oss_fuzz_ofctl_parse_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/expr_parse_target.options \ > - tests/oss-fuzz/config/odp_target.options \ > - tests/oss-fuzz/config/miniflow_target.options \ > - tests/oss-fuzz/config/ofctl_parse_target.options \ > - tests/oss-fuzz/config/ovs.dict \ > - tests/oss-fuzz/config/expr.dict \ > - tests/oss-fuzz/config/odp.dict \ > - tests/oss-fuzz/config/ofp-flow.dict > diff --git a/tests/oss-fuzz/config/expr.dict > b/tests/oss-fuzz/config/expr.dict > deleted file mode 100644 > index 03741ad7d..000000000 > --- a/tests/oss-fuzz/config/expr.dict > +++ /dev/null > @@ -1,120 +0,0 @@ > -" = " > -" = (" > -" = dns_lookup();" > -" { " > -" };" > -"!" > -"!=" > -"$" > -"&&" > -"(" > -"()" > -")" > -"),commit,table=,zone=NXM_NX_REG)" > -");" > -", " > -", meter=\"\"" > -"," > -",bucket=bucket_id=,weight:100,actions=ct(nat(dst=" > -"--" > -".." > -"/" > -"/%" > -"0" > -":" > -"<" > -"<->" > -"<=" > -"=" > -"==" > -"=r" > -">" > -">=" > -"[" > -"\x00" > -"\x28" > -"]" > -"]:" > -"allow" > -"arp" > -"bool" > -"bswap " > -"bswap %0" > -"cc" > -"clone" > -"ct_clear" > -"ct_clear;" > -"ct_commit" > -"ct_commit(" > -"ct_dnat" > -"ct_label" > -"ct_label=" > -"ct_lb" > -"ct_mark" > -"ct_mark=" > -"ct_mark=%#x" > -"ct_next" > -"ct_next;" > -"ct_snat" > -"decimal" > -"dhcpv6_stateful" > -"dhcpv6_stateless" > -"dns_lookup" > -"drop" > -"drop;" > -"egress" > -"error(" > -"get_arp" > -"get_nd" > -"hexadecimal" > -"icmp4" > -"icmp6" > -"ingress" > -"ip.ttl" > -"ip.ttl--;" > -"ipv4" > -"ipv6" > -"log" > -"log(" > -"mac" > -"meter" > -"name" > -"name=\"\", " > -"nd_na" > -"nd_na_router" > -"nd_ns" > -"next" > -"next();" > -"next(pipeline=, table=);" > -"next;" > -"output" > -"output;" > -"pipeline" > -"put_arp" > -"put_dhcp_opts" > -"put_dhcpv6_opts" > -"put_nd" > -"put_nd_ra_opts" > -"reject" > -"set_meter" > -"set_meter();" > -"set_meter(, );" > -"set_meter(,);" > -"set_queue" > -"set_queue();" > -"severity" > -"severity=" > -"slaac" > -"static_routes" > -"str" > -"table" > -"tcp_reset" > -"type=select,selection_method=dp_hash" > -"uint16" > -"uint32" > -"uint8" > -"verdict" > -"verdict=, " > -"{" > -"||" > -"}" > diff --git a/tests/oss-fuzz/config/expr_parse_target.options > b/tests/oss-fuzz/config/expr_parse_target.options > deleted file mode 100644 > index fc254e84f..000000000 > --- a/tests/oss-fuzz/config/expr_parse_target.options > +++ /dev/null > @@ -1,3 +0,0 @@ > -[libfuzzer] > -dict = expr.dict > -close_fd_mask = 3 > diff --git a/tests/oss-fuzz/config/flow_extract_target.options > b/tests/oss-fuzz/config/flow_extract_target.options > deleted file mode 100644 > index 81ad7f18c..000000000 > --- a/tests/oss-fuzz/config/flow_extract_target.options > +++ /dev/null > @@ -1,3 +0,0 @@ > -[libfuzzer] > -dict = ovs.dict > -close_fd_mask = 3 > diff --git a/tests/oss-fuzz/config/json_parser_target.options > b/tests/oss-fuzz/config/json_parser_target.options > deleted file mode 100644 > index 8d3739a53..000000000 > --- a/tests/oss-fuzz/config/json_parser_target.options > +++ /dev/null > @@ -1,2 +0,0 @@ > -[libfuzzer] > -dict = json.dict > diff --git a/tests/oss-fuzz/config/miniflow_target.options > b/tests/oss-fuzz/config/miniflow_target.options > deleted file mode 100644 > index 4849f282d..000000000 > --- a/tests/oss-fuzz/config/miniflow_target.options > +++ /dev/null > @@ -1,3 +0,0 @@ > -[libfuzzer] > -dict = ovs.dict > -close_fd_mask = 3 > \ No newline at end of file > diff --git a/tests/oss-fuzz/config/odp.dict > b/tests/oss-fuzz/config/odp.dict > deleted file mode 100644 > index a9bdd3e99..000000000 > --- a/tests/oss-fuzz/config/odp.dict > +++ /dev/null > @@ -1,170 +0,0 @@ > -"(" > -")" > -"," > -"/0x" > -"0x" > -": " > -"=" > -"=r" > -"action" > -"arp" > -"bfd" > -"bos" > -"c1" > -"c2" > -"c3" > -"c4" > -"cc" > -"cfi" > -"cfm" > -"class" > -"clone" > -"code" > -"commit," > -"crit," > -"csum" > -"ct" > -"ct(error)" > -"ct_clear" > -"ct_label" > -"ct_mark" > -"ct_state" > -"ct_tuple4" > -"ct_tuple6" > -"ct_zone" > -"dir" > -"dl_type" > -"dnat" > -"dp_hash" > -"drop" > -"dst" > -"dst_port" > -"egress" > -"encap" > -"error" > -"erspan" > -"erspan(ver=1,sid=0x,dir=,idx=0x)" > -"est" > -"eth" > -"eth_type" > -"eth_type(0/)" > -"first" > -"flags" > -"force_commit," > -"frag" > -"gbp(" > -"geneve" > -"gre((flags=0x,proto=0x)" > -"hash," > -"helper" > -"hlimit" > -"hwid" > -"icmp" > -"icmpv6" > -"id" > -"idx=" > -"in_port" > -"ingress" > -"inv" > -"ip6erspan" > -"ipfix(output_port=" > -"ipv4" > -"ipv6" > -"ipv6_dst" > -"ipv6_src" > -"l4()" > -"label" > -"lacp" > -"later" > -"len" > -"lldp" > -"mark=/," > -"match" > -"md2" > -"mdtype" > -"meter()" > -"mpls" > -"nat" > -"nd" > -"new" > -"no" > -"np" > -"ns" > -"nsh" > -"oam," > -"op" > -"options(" > -"out_port(" > -"packet_type" > -"pcp=" > -"persistent," > -"pop_eth" > -"pop_mpls(eth_type=0x)" > -"pop_nsh()" > -"pop_vlan" > -"proto" > -"push_eth(src=:::::,dst=:::::,type=)" > -"push_mpls(" > -"push_nsh(" > -"push_vlan(" > -"push_vlan(tpid=,vid=,pcp=,cfi=)" > -"random," > -"recirc()" > -"recirc_id" > -"rel" > -"rpl" > -"sFlow(vid=,pcp=,output=)" > -"sample" > -"sctp" > -"seq=0x" > -"set(" > -"set(nsh(" > -"sha" > -"si" > -"sip" > -"skb_mark" > -"skb_priority" > -"sll" > -"slow_path" > -"snat" > -"spi" > -"src" > -"src_port" > -"stp" > -"sym_l4()" > -"target" > -"tc=" > -"tclass" > -"tcp" > -"tcp_flags" > -"tha" > -"tip" > -"tll" > -"tnl_pop(" > -"tnl_push(tnl_port(" > -"too_little" > -"too_much" > -"tos" > -"tp_dst" > -"tp_src" > -"tpid=0x" > -"trk" > -"trunc()" > -"ttl" > -"tun_id" > -"tunnel" > -"tunnel_out_port" > -"type" > -"udp" > -"unspec" > -"userdata" > -"userspace(" > -"userspace(error)" > -"userspace(pid" > -"ver" > -"vid" > -"vlan" > -"vxlan" > -"vxlan(flags=0x,vni=0x)" > -"vxlan(gbp(" > -"zone" > diff --git a/tests/oss-fuzz/config/odp_target.options > b/tests/oss-fuzz/config/odp_target.options > deleted file mode 100644 > index 41821b8c1..000000000 > --- a/tests/oss-fuzz/config/odp_target.options > +++ /dev/null > @@ -1,3 +0,0 @@ > -[libfuzzer] > -close_fd_mask = 3 > -dict = odp.dict > diff --git a/tests/oss-fuzz/config/ofctl_parse_target.options > b/tests/oss-fuzz/config/ofctl_parse_target.options > deleted file mode 100644 > index 6d67dd6ad..000000000 > --- a/tests/oss-fuzz/config/ofctl_parse_target.options > +++ /dev/null > @@ -1,3 +0,0 @@ > -[libfuzzer] > -close_fd_mask = 3 > -dict = ofp-flow.dict > diff --git a/tests/oss-fuzz/config/ofp-flow.dict > b/tests/oss-fuzz/config/ofp-flow.dict > deleted file mode 100644 > index 01175e5eb..000000000 > --- a/tests/oss-fuzz/config/ofp-flow.dict > +++ /dev/null > @@ -1,45 +0,0 @@ > -")" > -"(" > -"[" > -"]" > -"," > -"-" > -"0" > -":" > -"=" > -"ADD" > -"DEL" > -"DEL_STRICT" > -"MOD" > -"MOD_STRICT" > -"\x00" > -"\x20" > -"\x3F" > -"actions" > -"add" > -"allow_hidden_fields" > -"cc" > -"check_overlap" > -"cookie" > -"delete" > -"delete_strict" > -"duration" > -"eth" > -"hard_age" > -"hard_timeout" > -"idle_age" > -"idle_timeout" > -"importance" > -"modify" > -"modify_strict" > -"n_bytes" > -"n_packets" > -"no_byte_counts" > -"no_packet_counts" > -"no_readonly_table" > -"out_group" > -"out_port" > -"priority" > -"reset_counts" > -"send_flow_rem" > -"table" > diff --git a/tests/oss-fuzz/config/ofp_print_target.options > b/tests/oss-fuzz/config/ofp_print_target.options > deleted file mode 100644 > index 7f117292e..000000000 > --- a/tests/oss-fuzz/config/ofp_print_target.options > +++ /dev/null > @@ -1,3 +0,0 @@ > -[libfuzzer] > -close_fd_mask = 3 > -dict = ovs.dict > diff --git a/tests/oss-fuzz/config/ovs.dict > b/tests/oss-fuzz/config/ovs.dict > deleted file mode 100644 > index 243b243ab..000000000 > --- a/tests/oss-fuzz/config/ovs.dict > +++ /dev/null > @@ -1,293 +0,0 @@ > -"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/expr_parse_target.c > b/tests/oss-fuzz/expr_parse_target.c > deleted file mode 100644 > index 1a3893858..000000000 > --- a/tests/oss-fuzz/expr_parse_target.c > +++ /dev/null > @@ -1,464 +0,0 @@ > -#include <config.h> > -#include "fuzzer.h" > -#include <errno.h> > -#include <getopt.h> > -#include <sys/wait.h> > - > -#include "command-line.h" > -#include "dp-packet.h" > -#include "fatal-signal.h" > -#include "flow.h" > -#include "openvswitch/dynamic-string.h" > -#include "openvswitch/match.h" > -#include "openvswitch/ofp-actions.h" > -#include "openvswitch/ofpbuf.h" > -#include "openvswitch/vlog.h" > -#include "ovn/actions.h" > -#include "ovn/expr.h" > -#include "ovn/lex.h" > -#include "ovn/lib/logical-fields.h" > -#include "ovn/lib/ovn-l7.h" > -#include "ovn/lib/extend-table.h" > -#include "openvswitch/shash.h" > -#include "simap.h" > -#include "util.h" > - > -static void > -compare_token(const struct lex_token *a, const struct lex_token *b) > -{ > - if (a->type != b->type) { > - fprintf(stderr, "type differs: %d -> %d\n", a->type, b->type); > - return; > - } > - > - if (!((a->s && b->s && !strcmp(a->s, b->s)) > - || (!a->s && !b->s))) { > - fprintf(stderr, "string differs: %s -> %s\n", > - a->s ? a->s : "(null)", > - b->s ? b->s : "(null)"); > - return; > - } > - > - if (a->type == LEX_T_INTEGER || a->type == LEX_T_MASKED_INTEGER) { > - if (memcmp(&a->value, &b->value, sizeof a->value)) { > - fprintf(stderr, "value differs\n"); > - return; > - } > - > - if (a->type == LEX_T_MASKED_INTEGER > - && memcmp(&a->mask, &b->mask, sizeof a->mask)) { > - fprintf(stderr, "mask differs\n"); > - return; > - } > - > - if (a->format != b->format > - && !(a->format == LEX_F_HEXADECIMAL > - && b->format == LEX_F_DECIMAL > - && a->value.integer == 0)) { > - fprintf(stderr, "format differs: %d -> %d\n", > - a->format, b->format); > - } > - } > -} > - > -static void > -test_lex(const char *input) > -{ > - struct ds output; > - > - ds_init(&output); > - struct lexer lexer; > - > - lexer_init(&lexer, input); > - ds_clear(&output); > - while (lexer_get(&lexer) != LEX_T_END) { > - size_t len = output.length; > - lex_token_format(&lexer.token, &output); > - > - /* Check that the formatted version can really be parsed back > - * losslessly. */ > - if (lexer.token.type != LEX_T_ERROR) { > - const char *s = ds_cstr(&output) + len; > - struct lexer l2; > - > - lexer_init(&l2, s); > - lexer_get(&l2); > - compare_token(&lexer.token, &l2.token); > - lexer_destroy(&l2); > - } > - ds_put_char(&output, ' '); > - } > - lexer_destroy(&lexer); > - > - ds_chomp(&output, ' '); > - puts(ds_cstr(&output)); > - ds_destroy(&output); > -} > - > -static void > -create_symtab(struct shash *symtab) > -{ > - ovn_init_symtab(symtab); > - > - /* For negative testing. */ > - expr_symtab_add_field(symtab, "bad_prereq", MFF_XREG0, "xyzzy", > false); > - expr_symtab_add_field(symtab, "self_recurse", MFF_XREG0, > - "self_recurse != 0", false); > - expr_symtab_add_field(symtab, "mutual_recurse_1", MFF_XREG0, > - "mutual_recurse_2 != 0", false); > - expr_symtab_add_field(symtab, "mutual_recurse_2", MFF_XREG0, > - "mutual_recurse_1 != 0", false); > - expr_symtab_add_string(symtab, "big_string", MFF_XREG0, NULL); > -} > - > -static void > -create_gen_opts(struct hmap *dhcp_opts, struct hmap *dhcpv6_opts, > - struct hmap *nd_ra_opts) > -{ > - hmap_init(dhcp_opts); > - dhcp_opt_add(dhcp_opts, "offerip", 0, "ipv4"); > - dhcp_opt_add(dhcp_opts, "netmask", 1, "ipv4"); > - dhcp_opt_add(dhcp_opts, "router", 3, "ipv4"); > - dhcp_opt_add(dhcp_opts, "dns_server", 6, "ipv4"); > - dhcp_opt_add(dhcp_opts, "log_server", 7, "ipv4"); > - dhcp_opt_add(dhcp_opts, "lpr_server", 9, "ipv4"); > - dhcp_opt_add(dhcp_opts, "domain", 15, "str"); > - dhcp_opt_add(dhcp_opts, "swap_server", 16, "ipv4"); > - dhcp_opt_add(dhcp_opts, "policy_filter", 21, "ipv4"); > - dhcp_opt_add(dhcp_opts, "router_solicitation", 32, "ipv4"); > - dhcp_opt_add(dhcp_opts, "nis_server", 41, "ipv4"); > - dhcp_opt_add(dhcp_opts, "ntp_server", 42, "ipv4"); > - dhcp_opt_add(dhcp_opts, "server_id", 54, "ipv4"); > - dhcp_opt_add(dhcp_opts, "tftp_server", 66, "ipv4"); > - dhcp_opt_add(dhcp_opts, "classless_static_route", 121, > "static_routes"); > - dhcp_opt_add(dhcp_opts, "ip_forward_enable", 19, "bool"); > - dhcp_opt_add(dhcp_opts, "router_discovery", 31, "bool"); > - dhcp_opt_add(dhcp_opts, "ethernet_encap", 36, "bool"); > - dhcp_opt_add(dhcp_opts, "default_ttl", 23, "uint8"); > - dhcp_opt_add(dhcp_opts, "tcp_ttl", 37, "uint8"); > - dhcp_opt_add(dhcp_opts, "mtu", 26, "uint16"); > - dhcp_opt_add(dhcp_opts, "lease_time", 51, "uint32"); > - dhcp_opt_add(dhcp_opts, "wpad", 252, "str"); > - > - /* DHCPv6 options. */ > - hmap_init(dhcpv6_opts); > - dhcp_opt_add(dhcpv6_opts, "server_id", 2, "mac"); > - dhcp_opt_add(dhcpv6_opts, "ia_addr", 5, "ipv6"); > - dhcp_opt_add(dhcpv6_opts, "dns_server", 23, "ipv6"); > - dhcp_opt_add(dhcpv6_opts, "domain_search", 24, "str"); > - > - /* IPv6 ND RA options. */ > - hmap_init(nd_ra_opts); > - nd_ra_opts_init(nd_ra_opts); > -} > - > -static void > -create_addr_sets(struct shash *addr_sets) > -{ > - shash_init(addr_sets); > - > - static const char *const addrs1[] = { > - "10.0.0.1", "10.0.0.2", "10.0.0.3", > - }; > - static const char *const addrs2[] = { > - "::1", "::2", "::3", > - }; > - static const char *const addrs3[] = { > - "00:00:00:00:00:01", "00:00:00:00:00:02", "00:00:00:00:00:03", > - }; > - static const char *const addrs4[] = { NULL }; > - > - expr_const_sets_add(addr_sets, "set1", addrs1, 3, true); > - expr_const_sets_add(addr_sets, "set2", addrs2, 3, true); > - expr_const_sets_add(addr_sets, "set3", addrs3, 3, true); > - expr_const_sets_add(addr_sets, "set4", addrs4, 0, true); > -} > - > -static void > -create_port_groups(struct shash *port_groups) > -{ > - shash_init(port_groups); > - > - static const char *const pg1[] = { > - "lsp1", "lsp2", "lsp3", > - }; > - static const char *const pg2[] = { NULL }; > - > - expr_const_sets_add(port_groups, "pg1", pg1, 3, false); > - expr_const_sets_add(port_groups, "pg_empty", pg2, 0, false); > -} > - > -static bool > -lookup_port_cb(const void *ports_, const char *port_name, unsigned int > *portp) > -{ > - const struct simap *ports = ports_; > - const struct simap_node *node = simap_find(ports, port_name); > - if (!node) { > - return false; > - } > - *portp = node->data; > - return true; > -} > - > -static bool > -is_chassis_resident_cb(const void *ports_, const char *port_name) > -{ > - const struct simap *ports = ports_; > - const struct simap_node *node = simap_find(ports, port_name); > - if (node) { > - return true; > - } > - return false; > -} > - > -static void > -test_parse_actions(const char *input) > -{ > - struct shash symtab; > - struct hmap dhcp_opts; > - struct hmap dhcpv6_opts; > - struct hmap nd_ra_opts; > - struct simap ports; > - > - create_symtab(&symtab); > - create_gen_opts(&dhcp_opts, &dhcpv6_opts, &nd_ra_opts); > - > - /* Initialize group ids. */ > - struct ovn_extend_table group_table; > - ovn_extend_table_init(&group_table); > - > - /* Initialize meter ids for QoS. */ > - struct ovn_extend_table meter_table; > - ovn_extend_table_init(&meter_table); > - > - simap_init(&ports); > - simap_put(&ports, "eth0", 5); > - simap_put(&ports, "eth1", 6); > - simap_put(&ports, "LOCAL", ofp_to_u16(OFPP_LOCAL)); > - > - struct ofpbuf ovnacts; > - struct expr *prereqs; > - char *error; > - > - puts(input); > - > - ofpbuf_init(&ovnacts, 0); > - > - const struct ovnact_parse_params pp = { > - .symtab = &symtab, > - .dhcp_opts = &dhcp_opts, > - .dhcpv6_opts = &dhcpv6_opts, > - .nd_ra_opts = &nd_ra_opts, > - .n_tables = 24, > - .cur_ltable = 10, > - }; > - error = ovnacts_parse_string(input, &pp, &ovnacts, &prereqs); > - if (!error) { > - /* Convert the parsed representation back to a string and print > it, > - * if it's different from the input. */ > - struct ds ovnacts_s = DS_EMPTY_INITIALIZER; > - ovnacts_format(ovnacts.data, ovnacts.size, &ovnacts_s); > - if (strcmp(input, ds_cstr(&ovnacts_s))) { > - printf(" formats as %s\n", ds_cstr(&ovnacts_s)); > - } > - > - /* Encode the actions into OpenFlow and print. */ > - const struct ovnact_encode_params ep = { > - .lookup_port = lookup_port_cb, > - .aux = &ports, > - .is_switch = true, > - .group_table = &group_table, > - .meter_table = &meter_table, > - > - .pipeline = OVNACT_P_INGRESS, > - .ingress_ptable = 8, > - .egress_ptable = 40, > - .output_ptable = 64, > - .mac_bind_ptable = 65, > - }; > - struct ofpbuf ofpacts; > - ofpbuf_init(&ofpacts, 0); > - ovnacts_encode(ovnacts.data, ovnacts.size, &ep, &ofpacts); > - struct ds ofpacts_s = DS_EMPTY_INITIALIZER; > - struct ofpact_format_params fp = { .s = &ofpacts_s }; > - ofpacts_format(ofpacts.data, ofpacts.size, &fp); > - printf(" encodes as %s\n", ds_cstr(&ofpacts_s)); > - ds_destroy(&ofpacts_s); > - ofpbuf_uninit(&ofpacts); > - > - /* Print prerequisites if any. */ > - if (prereqs) { > - struct ds prereqs_s = DS_EMPTY_INITIALIZER; > - expr_format(prereqs, &prereqs_s); > - printf(" has prereqs %s\n", ds_cstr(&prereqs_s)); > - ds_destroy(&prereqs_s); > - } > - > - /* Now re-parse and re-format the string to verify that it's > - * round-trippable. */ > - struct ofpbuf ovnacts2; > - struct expr *prereqs2; > - ofpbuf_init(&ovnacts2, 0); > - error = ovnacts_parse_string(ds_cstr(&ovnacts_s), &pp, &ovnacts2, > - &prereqs2); > - if (!error) { > - struct ds ovnacts2_s = DS_EMPTY_INITIALIZER; > - ovnacts_format(ovnacts2.data, ovnacts2.size, &ovnacts2_s); > - if (strcmp(ds_cstr(&ovnacts_s), ds_cstr(&ovnacts2_s))) { > - printf(" bad reformat: %s\n", ds_cstr(&ovnacts2_s)); > - } > - ds_destroy(&ovnacts2_s); > - } else { > - printf(" reparse error: %s\n", error); > - free(error); > - } > - expr_destroy(prereqs2); > - > - ovnacts_free(ovnacts2.data, ovnacts2.size); > - ofpbuf_uninit(&ovnacts2); > - ds_destroy(&ovnacts_s); > - } else { > - printf(" %s\n", error); > - free(error); > - } > - > - expr_destroy(prereqs); > - ovnacts_free(ovnacts.data, ovnacts.size); > - ofpbuf_uninit(&ovnacts); > - > - simap_destroy(&ports); > - expr_symtab_destroy(&symtab); > - shash_destroy(&symtab); > - dhcp_opts_destroy(&dhcp_opts); > - dhcp_opts_destroy(&dhcpv6_opts); > - nd_ra_opts_destroy(&nd_ra_opts); > - ovn_extend_table_destroy(&group_table); > - ovn_extend_table_destroy(&meter_table); > -} > - > -static void > -test_parse_expr(const char *input) > -{ > - struct shash symtab; > - struct shash addr_sets; > - struct shash port_groups; > - struct simap ports; > - struct expr *expr; > - char *error; > - > - create_symtab(&symtab); > - create_addr_sets(&addr_sets); > - create_port_groups(&port_groups); > - > - simap_init(&ports); > - simap_put(&ports, "eth0", 5); > - simap_put(&ports, "eth1", 6); > - simap_put(&ports, "LOCAL", ofp_to_u16(OFPP_LOCAL)); > - simap_put(&ports, "lsp1", 0x11); > - simap_put(&ports, "lsp2", 0x12); > - simap_put(&ports, "lsp3", 0x13); > - > - expr = expr_parse_string(input, &symtab, &addr_sets, > - &port_groups, &error); > - if (!error) { > - expr = expr_annotate(expr, &symtab, &error); > - } > - if (!error) { > - expr = expr_simplify(expr, is_chassis_resident_cb, &ports); > - expr = expr_normalize(expr); > - ovs_assert(expr_is_normalized(expr)); > - } > - if (!error) { > - struct hmap matches; > - > - expr_to_matches(expr, lookup_port_cb, &ports, &matches); > - expr_matches_print(&matches, stdout); > - expr_matches_destroy(&matches); > - } else { > - puts(error); > - free(error); > - } > - expr_destroy(expr); > - simap_destroy(&ports); > - expr_symtab_destroy(&symtab); > - shash_destroy(&symtab); > - expr_const_sets_destroy(&addr_sets); > - shash_destroy(&addr_sets); > - expr_const_sets_destroy(&port_groups); > - shash_destroy(&port_groups); > -} > - > -static bool > -lookup_atoi_cb(const void *aux OVS_UNUSED, const char *port_name, > - unsigned int *portp) > -{ > - *portp = atoi(port_name); > - return true; > -} > - > -static void > -test_expr_to_packets(const char *input) > -{ > - struct shash symtab; > - create_symtab(&symtab); > - > - struct flow uflow; > - char *error = expr_parse_microflow(input, &symtab, NULL, NULL, > - lookup_atoi_cb, NULL, &uflow); > - if (error) { > - puts(error); > - free(error); > - expr_symtab_destroy(&symtab); > - shash_destroy(&symtab); > - return; > - } > - > - uint64_t packet_stub[128 / 8]; > - struct dp_packet packet; > - dp_packet_use_stub(&packet, packet_stub, sizeof packet_stub); > - flow_compose(&packet, &uflow, NULL, 64); > - > - struct ds output = DS_EMPTY_INITIALIZER; > - const uint8_t *buf = dp_packet_data(&packet); > - for (int i = 0; i < dp_packet_size(&packet); i++) { > - uint8_t val = buf[i]; > - ds_put_format(&output, "%02"PRIx8, val); > - } > - puts(ds_cstr(&output)); > - ds_destroy(&output); > - dp_packet_uninit(&packet); > - expr_symtab_destroy(&symtab); > - shash_destroy(&symtab); > -} > - > -int > -LLVMFuzzerTestOneInput(const uint8_t *input_, size_t size) > -{ > - /* Bail out if we cannot construct at least a 1 char string. */ > - const char *input = (const char *) input_; > - if (size < 2 || input[size - 1] != '\0' || strchr(input, '\n') || > - strlen(input) != size - 1) { > - return 0; > - } > - > - /* Disable logging to avoid write to disk. */ > - static bool isInit = false; > - if (!isInit) { > - vlog_set_verbosity("off"); > - isInit = true; > - } > - > - /* Parse, annotate, simplify, normalize expr and convert to flows. */ > - test_parse_expr(input); > - > - /* Parse actions. */ > - test_parse_actions(input); > - > - /* Test OVN lexer. */ > - test_lex(input); > - > - /* Expr to packets. */ > - test_expr_to_packets(input); > - > - return 0; > -} > diff --git a/tests/oss-fuzz/flow_extract_target.c > b/tests/oss-fuzz/flow_extract_target.c > deleted file mode 100644 > index 4a7451411..000000000 > --- a/tests/oss-fuzz/flow_extract_target.c > +++ /dev/null > @@ -1,100 +0,0 @@ > -#include <config.h> > -#include "classifier.h" > -#include <assert.h> > -#include "fuzzer.h" > -#include "dp-packet.h" > -#include "flow.h" > -#include "openvswitch/ofp-match.h" > -#include "openvswitch/ofp-print.h" > -#include "openvswitch/match.h" > -#include "classifier-private.h" > - > -static void > -test_flow_hash(const struct flow *flow) > -{ > - uint32_t hash = flow_hash_5tuple(flow, 0); > - hash = flow_hash_symmetric_l4(flow, 0); > - hash = flow_hash_symmetric_l2(flow, 0); > - hash = flow_hash_symmetric_l3l4(flow, 0, NULL); > - hash = flow_hash_symmetric_l3(flow, 0); > - hash = flow_hash_fields(flow, NX_HASH_FIELDS_ETH_SRC, hash); > - hash = flow_hash_fields(flow, NX_HASH_FIELDS_SYMMETRIC_L4, hash); > - hash = flow_hash_fields(flow, NX_HASH_FIELDS_SYMMETRIC_L3L4, hash); > - hash = flow_hash_fields(flow, NX_HASH_FIELDS_SYMMETRIC_L3L4_UDP, > hash); > - hash = flow_hash_fields(flow, NX_HASH_FIELDS_NW_SRC, hash); > - hash = flow_hash_fields(flow, NX_HASH_FIELDS_NW_DST, hash); > - hash = flow_hash_fields(flow, NX_HASH_FIELDS_SYMMETRIC_L3, hash); > - ignore(hash); > -} > - > -static void > -test_flow_mask(const struct flow *flow) > -{ > - struct flow_wildcards catchall; > - > - flow_wildcards_init_catchall(&catchall); > - flow_mask_hash_fields(flow, &catchall, NX_HASH_FIELDS_ETH_SRC); > - flow_mask_hash_fields(flow, &catchall, NX_HASH_FIELDS_SYMMETRIC_L4); > - flow_mask_hash_fields(flow, &catchall, NX_HASH_FIELDS_SYMMETRIC_L3L4); > - flow_mask_hash_fields(flow, &catchall, > NX_HASH_FIELDS_SYMMETRIC_L3L4_UDP); > - flow_mask_hash_fields(flow, &catchall, NX_HASH_FIELDS_NW_SRC); > - flow_mask_hash_fields(flow, &catchall, NX_HASH_FIELDS_NW_DST); > - flow_mask_hash_fields(flow, &catchall, NX_HASH_FIELDS_SYMMETRIC_L3); > -} > - > -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); > - > - /* Extract flowmap. */ > - struct flowmap fmap; > - flow_wc_map(&flow, &fmap); > - > - /* Parse TCP flags. */ > - if (dp_packet_size(&packet) >= ETH_HEADER_LEN) { > - uint16_t tcp_flags = parse_tcp_flags(&packet); > - ignore(tcp_flags); > - } > - > - /* Parse TCP flags. */ > - if (dp_packet_size(&packet) >= ETH_HEADER_LEN) { > - uint16_t tcp_flags = parse_tcp_flags(&packet); > - ignore(tcp_flags); > - } > - > - /* Count headers. */ > - int count = flow_count_vlan_headers(&flow); > - ignore(count); > - > - /* Extract metadata. */ > - struct match flow_metadata; > - flow_get_metadata(&flow, &flow_metadata); > - > - /* Hashing functions. */ > - test_flow_hash(&flow); > - > - /* Masking functions. */ > - test_flow_mask(&flow); > - > - /* Convert flow to match. */ > - struct match match; > - match_wc_init(&match, &flow); > - > - struct ofp10_match ext_match; > - ofputil_match_to_ofp10_match(&match, &ext_match); > - > - /* Print match and packet. */ > - ofp_print_packet(stdout, dp_packet_data(&packet), > dp_packet_size(&packet), > - htonl(PT_ETH)); > - ovs_hex_dump(stdout, dp_packet_data(&packet), > dp_packet_size(&packet), 0, > - true); > - match_print(&match, NULL); > - > - ovs_hex_dump(stdout, &ext_match, sizeof ext_match, 0, false); > - > - return 0; > -} > diff --git a/tests/oss-fuzz/fuzzer.h b/tests/oss-fuzz/fuzzer.h > deleted file mode 100644 > index f87ae59e9..000000000 > --- a/tests/oss-fuzz/fuzzer.h > +++ /dev/null > @@ -1,9 +0,0 @@ > -#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 > deleted file mode 100644 > index e39e04a0d..000000000 > --- a/tests/oss-fuzz/json_parser_target.c > +++ /dev/null > @@ -1,42 +0,0 @@ > -#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/miniflow_target.c > b/tests/oss-fuzz/miniflow_target.c > deleted file mode 100644 > index 800375d63..000000000 > --- a/tests/oss-fuzz/miniflow_target.c > +++ /dev/null > @@ -1,365 +0,0 @@ > -#include <config.h> > -#include "classifier.h" > -#include "fuzzer.h" > -#include "dp-packet.h" > -#include "flow.h" > -#include "openvswitch/ofp-match.h" > -#include "openvswitch/ofp-print.h" > -#include "openvswitch/match.h" > -#include "classifier-private.h" > -#include "util.h" > - > -static void > -shuffle_u32s(uint32_t *p, size_t n) > -{ > - for (; n > 1; n--, p++) { > - uint32_t *q = &p[random_range(n)]; > - uint32_t tmp = *p; > - *p = *q; > - *q = tmp; > - } > -} > - > -/* Returns a copy of 'src'. The caller must eventually free the returned > - * miniflow with free(). */ > -static struct miniflow * > -miniflow_clone__(const struct miniflow *src) > -{ > - struct miniflow *dst; > - size_t data_size; > - > - data_size = miniflow_alloc(&dst, 1, src); > - miniflow_clone(dst, src, data_size / sizeof(uint64_t)); > - return dst; > -} > - > -/* Returns a hash value for 'flow', given 'basis'. */ > -static inline uint32_t > -miniflow_hash__(const struct miniflow *flow, uint32_t basis) > -{ > - const uint64_t *p = miniflow_get_values(flow); > - size_t n_values = miniflow_n_values(flow); > - struct flowmap hash_map = FLOWMAP_EMPTY_INITIALIZER; > - uint32_t hash = basis; > - size_t idx; > - > - FLOWMAP_FOR_EACH_INDEX (idx, flow->map) { > - uint64_t value = *p++; > - > - if (value) { > - hash = hash_add64(hash, value); > - flowmap_set(&hash_map, idx, 1); > - } > - } > - map_t map; > - FLOWMAP_FOR_EACH_MAP (map, hash_map) { > - hash = hash_add64(hash, map); > - } > - > - return hash_finish(hash, n_values); > -} > - > -static uint32_t > -random_value(void) > -{ > - static const uint32_t values_[] = > - { 0xffffffff, 0xaaaaaaaa, 0x55555555, 0x80000000, > - 0x00000001, 0xface0000, 0x00d00d1e, 0xdeadbeef }; > - > - return values_[random_range(ARRAY_SIZE(values_))]; > -} > - > -static bool > -choose(unsigned int n, unsigned int *idxp) > -{ > - if (*idxp < n) { > - return true; > - } else { > - *idxp -= n; > - return false; > - } > -} > - > -#define FLOW_U32S (FLOW_U64S * 2) > - > -static bool > -init_consecutive_values(int n_consecutive, struct flow *flow, > - unsigned int *idxp) > -{ > - uint32_t *flow_u32 = (uint32_t *) flow; > - > - if (choose(FLOW_U32S - n_consecutive + 1, idxp)) { > - int i; > - > - for (i = 0; i < n_consecutive; i++) { > - flow_u32[i + *idxp] = random_value(); > - } > - return true; > - } else { > - return false; > - } > -} > - > -static bool > -next_random_flow(struct flow *flow, unsigned int idx) > -{ > - uint32_t *flow_u32 = (uint32_t *) flow; > - > - memset(flow, 0, sizeof *flow); > - > - /* Empty flow. */ > - if (choose(1, &idx)) { > - return true; > - } > - > - /* All flows with a small number of consecutive nonzero values. */ > - for (int i = 1; i <= 4; i++) { > - if (init_consecutive_values(i, flow, &idx)) { > - return true; > - } > - } > - > - /* All flows with a large number of consecutive nonzero values. */ > - for (int i = FLOW_U32S - 4; i <= FLOW_U32S; i++) { > - if (init_consecutive_values(i, flow, &idx)) { > - return true; > - } > - } > - > - /* All flows with exactly two nonconsecutive nonzero values. */ > - if (choose((FLOW_U32S - 1) * (FLOW_U32S - 2) / 2, &idx)) { > - int ofs1; > - > - for (ofs1 = 0; ofs1 < FLOW_U32S - 2; ofs1++) { > - int ofs2; > - > - for (ofs2 = ofs1 + 2; ofs2 < FLOW_U32S; ofs2++) { > - if (choose(1, &idx)) { > - flow_u32[ofs1] = random_value(); > - flow_u32[ofs2] = random_value(); > - return true; > - } > - } > - } > - OVS_NOT_REACHED(); > - } > - > - /* 16 randomly chosen flows with N >= 3 nonzero values. */ > - if (choose(16 * (FLOW_U32S - 4), &idx)) { > - int n = idx / 16 + 3; > - > - for (int i = 0; i < n; i++) { > - flow_u32[i] = random_value(); > - } > - shuffle_u32s(flow_u32, FLOW_U32S); > - > - return true; > - } > - > - return false; > -} > - > -static void > -any_random_flow(struct flow *flow) > -{ > - static unsigned int max; > - if (!max) { > - while (next_random_flow(flow, max)) { > - max++; > - } > - } > - > - next_random_flow(flow, random_range(max)); > -} > - > -static void > -toggle_masked_flow_bits(struct flow *flow, const struct flow_wildcards > *mask) > -{ > - const uint32_t *mask_u32 = (const uint32_t *) &mask->masks; > - uint32_t *flow_u32 = (uint32_t *) flow; > - int i; > - > - for (i = 0; i < FLOW_U32S; i++) { > - if (mask_u32[i] != 0) { > - uint32_t bit; > - > - do { > - bit = 1u << random_range(32); > - } while (!(bit & mask_u32[i])); > - flow_u32[i] ^= bit; > - } > - } > -} > - > -static void > -wildcard_extra_bits(struct flow_wildcards *mask) > -{ > - uint32_t *mask_u32 = (uint32_t *) &mask->masks; > - int i; > - > - for (i = 0; i < FLOW_U32S; i++) { > - if (mask_u32[i] != 0) { > - uint32_t bit; > - > - do { > - bit = 1u << random_range(32); > - } while (!(bit & mask_u32[i])); > - mask_u32[i] &= ~bit; > - } > - } > -} > - > -static void > -test_miniflow(struct flow *flow) > -{ > - struct miniflow *miniflow, *miniflow2, *miniflow3; > - struct flow flow2, flow3; > - struct flow_wildcards mask; > - struct minimask *minimask; > - int i; > - > - const uint64_t *flow_u64 = (const uint64_t *) flow; > - > - /* Convert flow to miniflow. */ > - miniflow = miniflow_create(flow); > - > - /* Obtain miniflow hash. */ > - uint32_t hash = miniflow_hash_5tuple(miniflow, 0); > - ignore(hash); > - > - /* Check that the flow equals its miniflow. */ > - for (i = 0; i < FLOW_MAX_VLAN_HEADERS; i++) { > - ovs_assert(miniflow_get_vid(miniflow, i) == > - vlan_tci_to_vid(flow->vlans[i].tci)); > - } > - for (i = 0; i < FLOW_U64S; i++) { > - ovs_assert(miniflow_get(miniflow, i) == flow_u64[i]); > - } > - > - /* Check that the miniflow equals itself. */ > - ovs_assert(miniflow_equal(miniflow, miniflow)); > - > - /* Convert miniflow back to flow and verify that it's the same. */ > - miniflow_expand(miniflow, &flow2); > - ovs_assert(flow_equal(flow, &flow2)); > - /* Check that copying a miniflow works properly. */ > - miniflow2 = miniflow_clone__(miniflow); > - ovs_assert(miniflow_equal(miniflow, miniflow2)); > - ovs_assert(miniflow_hash__(miniflow, 0) == miniflow_hash__(miniflow2, > 0)); > - miniflow_expand(miniflow2, &flow3); > - ovs_assert(flow_equal(flow, &flow3)); > - > - /* Check that masked matches work as expected for identical flows and > - * miniflows. */ > - do { > - next_random_flow(&mask.masks, 1); > - } while (flow_wildcards_is_catchall(&mask)); > - minimask = minimask_create(&mask); > - ovs_assert(minimask_is_catchall(minimask) > - == flow_wildcards_is_catchall(&mask)); > - ovs_assert(miniflow_equal_in_minimask(miniflow, miniflow2, minimask)); > - ovs_assert(miniflow_equal_flow_in_minimask(miniflow, &flow2, > minimask)); > - ovs_assert(miniflow_hash_in_minimask(miniflow, minimask, 0x12345678) > == > - flow_hash_in_minimask(flow, minimask, 0x12345678)); > - ovs_assert(minimask_hash(minimask, 0) == > - miniflow_hash__(&minimask->masks, 0)); > - > - /* Check that masked matches work as expected for differing flows and > - * miniflows. */ > - toggle_masked_flow_bits(&flow2, &mask); > - ovs_assert(!miniflow_equal_flow_in_minimask(miniflow, &flow2, > minimask)); > - miniflow3 = miniflow_create(&flow2); > - ovs_assert(!miniflow_equal_in_minimask(miniflow, miniflow3, > minimask)); > - > - free(miniflow); > - free(miniflow2); > - free(miniflow3); > - free(minimask); > -} > - > -static void > -test_minimask_has_extra(struct flow *flow) > -{ > - struct flow_wildcards catchall; > - struct minimask *minicatchall; > - > - flow_wildcards_init_catchall(&catchall); > - minicatchall = minimask_create(&catchall); > - ovs_assert(minimask_is_catchall(minicatchall)); > - > - struct flow_wildcards mask; > - struct minimask *minimask; > - > - mask.masks = *flow; > - minimask = minimask_create(&mask); > - ovs_assert(!minimask_has_extra(minimask, minimask)); > - ovs_assert(minimask_has_extra(minicatchall, minimask) > - == !minimask_is_catchall(minimask)); > - if (!minimask_is_catchall(minimask)) { > - struct minimask *minimask2; > - > - wildcard_extra_bits(&mask); > - minimask2 = minimask_create(&mask); > - ovs_assert(minimask_has_extra(minimask2, minimask)); > - ovs_assert(!minimask_has_extra(minimask, minimask2)); > - free(minimask2); > - } > - > - free(minimask); > - free(minicatchall); > -} > - > -static void > -test_minimask_combine(struct flow *flow) > -{ > - struct flow_wildcards catchall; > - struct minimask *minicatchall; > - > - flow_wildcards_init_catchall(&catchall); > - minicatchall = minimask_create(&catchall); > - ovs_assert(minimask_is_catchall(minicatchall)); > - > - struct minimask *minimask, *minimask2; > - struct flow_wildcards mask, mask2, combined, combined2; > - struct { > - struct minimask minicombined; > - uint64_t storage[FLOW_U64S]; > - } m; > - struct flow flow2; > - > - mask.masks = *flow; > - minimask = minimask_create(&mask); > - > - minimask_combine(&m.minicombined, minimask, minicatchall, m.storage); > - ovs_assert(minimask_is_catchall(&m.minicombined)); > - > - any_random_flow(&flow2); > - mask2.masks = flow2; > - minimask2 = minimask_create(&mask2); > - > - minimask_combine(&m.minicombined, minimask, minimask2, m.storage); > - flow_wildcards_and(&combined, &mask, &mask2); > - minimask_expand(&m.minicombined, &combined2); > - ovs_assert(flow_wildcards_equal(&combined, &combined2)); > - > - free(minimask); > - free(minimask2); > - > - free(minicatchall); > -} > - > -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); > - > - /* Do miniflow tests. */ > - test_miniflow(&flow); > - test_minimask_has_extra(&flow); > - test_minimask_combine(&flow); > - > - return 0; > -} > diff --git a/tests/oss-fuzz/odp_target.c b/tests/oss-fuzz/odp_target.c > deleted file mode 100644 > index ae61cdca3..000000000 > --- a/tests/oss-fuzz/odp_target.c > +++ /dev/null > @@ -1,149 +0,0 @@ > -#include <config.h> > -#include "fuzzer.h" > -#undef NDEBUG > -#include "odp-util.h" > -#include <stdio.h> > -#include "openvswitch/dynamic-string.h" > -#include "flow.h" > -#include "openvswitch/match.h" > -#include "openvswitch/ofpbuf.h" > -#include "util.h" > -#include "openvswitch/ofp-flow.h" > -#include "openvswitch/vlog.h" > - > -static int > -parse_keys(bool wc_keys, const char *in) > -{ > - int exit_code = 0; > - > - enum odp_key_fitness fitness; > - struct ofpbuf odp_key; > - struct ofpbuf odp_mask; > - struct flow flow; > - struct ds out; > - int error; > - > - /* Convert string to OVS DP key. */ > - ofpbuf_init(&odp_key, 0); > - ofpbuf_init(&odp_mask, 0); > - error = odp_flow_from_string(in, NULL, > - &odp_key, &odp_mask, NULL); > - if (error) { > - printf("odp_flow_from_string: error\n"); > - goto next; > - } > - > - if (!wc_keys) { > - struct odp_flow_key_parms odp_parms = { > - .flow = &flow, > - .support = { > - .recirc = true, > - .ct_state = true, > - .ct_zone = true, > - .ct_mark = true, > - .ct_label = true, > - .max_vlan_headers = SIZE_MAX, > - }, > - }; > - > - /* Convert odp_key to flow. */ > - fitness = odp_flow_key_to_flow(odp_key.data, odp_key.size, > - &flow, NULL); > - switch (fitness) { > - case ODP_FIT_PERFECT: > - break; > - > - case ODP_FIT_TOO_LITTLE: > - printf("ODP_FIT_TOO_LITTLE: "); > - break; > - > - case ODP_FIT_TOO_MUCH: > - printf("ODP_FIT_TOO_MUCH: "); > - break; > - > - case ODP_FIT_ERROR: > - printf("odp_flow_key_to_flow: error\n"); > - goto next; > - } > - /* Convert cls_rule back to odp_key. */ > - ofpbuf_uninit(&odp_key); > - ofpbuf_init(&odp_key, 0); > - odp_flow_key_from_flow(&odp_parms, &odp_key); > - > - if (odp_key.size > ODPUTIL_FLOW_KEY_BYTES) { > - printf ("too long: %"PRIu32" > %d\n", > - odp_key.size, ODPUTIL_FLOW_KEY_BYTES); > - exit_code = 1; > - } > - } > - > - /* Convert odp_key to string. */ > - ds_init(&out); > - if (wc_keys) { > - odp_flow_format(odp_key.data, odp_key.size, > - odp_mask.data, odp_mask.size, NULL, &out, false); > - } else { > - odp_flow_key_format(odp_key.data, odp_key.size, &out); > - } > - puts(ds_cstr(&out)); > - ds_destroy(&out); > - > -next: > - ofpbuf_uninit(&odp_key); > - ofpbuf_uninit(&odp_mask); > - > - return exit_code; > -} > - > -static int > -parse_actions(const char *in) > -{ > - struct ofpbuf odp_actions; > - struct ds out; > - int error; > - > - /* Convert string to OVS DP actions. */ > - ofpbuf_init(&odp_actions, 0); > - error = odp_actions_from_string(in, NULL, &odp_actions); > - if (error) { > - printf("odp_actions_from_string: error\n"); > - goto next; > - } > - > - /* Convert odp_actions back to string. */ > - ds_init(&out); > - format_odp_actions(&out, odp_actions.data, odp_actions.size, NULL); > - puts(ds_cstr(&out)); > - ds_destroy(&out); > - > -next: > - ofpbuf_uninit(&odp_actions); > - return 0; > -} > - > -int > -LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) > -{ > - /* Bail out if we cannot construct at least a 1 char string. */ > - const char *input = (const char *) data; > - if (size < 2 || input[size - 1] != '\0' || strchr(input, '\n') || > - strlen(input) != size - 1) { > - return 0; > - } > - > - /* Disable logging to avoid write to disk. */ > - static bool isInit = false; > - if (!isInit) { > - vlog_set_verbosity("off"); > - isInit = true; > - } > - > - /* Parse keys and wc keys. */ > - parse_keys(false, input); > - parse_keys(true, input); > - > - /* Parse actions. */ > - parse_actions(input); > - > - return 0; > -} > diff --git a/tests/oss-fuzz/ofctl_parse_target.c > b/tests/oss-fuzz/ofctl_parse_target.c > deleted file mode 100644 > index b4db52f7e..000000000 > --- a/tests/oss-fuzz/ofctl_parse_target.c > +++ /dev/null > @@ -1,113 +0,0 @@ > -#include <config.h> > -#include "fuzzer.h" > -#include "openvswitch/ofp-flow.h" > -#include "ofp-version-opt.h" > -#include "ofproto/ofproto.h" > -#include "openflow/openflow.h" > -#include "openvswitch/ofpbuf.h" > -#include "openvswitch/vlog.h" > -#include "util.h" > - > -static void > -ofctl_parse_flows__(struct ofputil_flow_mod *fms, size_t n_fms, > - enum ofputil_protocol usable_protocols) > -{ > - enum ofputil_protocol protocol = 0; > - char *usable_s; > - size_t i; > - > - usable_s = ofputil_protocols_to_string(usable_protocols); > - printf("usable protocols: %s\n", usable_s); > - free(usable_s); > - > - if (!(usable_protocols & OFPUTIL_P_ANY)) { > - printf("no usable protocol\n"); > - goto free; > - } > - for (i = 0; i < sizeof(enum ofputil_protocol) * CHAR_BIT; i++) { > - protocol = 1u << i; > - if (protocol & usable_protocols & OFPUTIL_P_ANY) { > - break; > - } > - } > - ovs_assert(is_pow2(protocol)); > - > - printf("chosen protocol: %s\n", ofputil_protocol_to_string(protocol)); > - > - for (i = 0; i < n_fms; i++) { > - struct ofputil_flow_mod *fm = &fms[i]; > - struct ofpbuf *msg; > - > - msg = ofputil_encode_flow_mod(fm, protocol); > - ofpbuf_delete(msg); > - } > - > -free: > - for (i = 0; i < n_fms; i++) { > - struct ofputil_flow_mod *fm = &fms[i]; > - free(CONST_CAST(struct ofpact *, fm->ofpacts)); > - minimatch_destroy(&fm->match); > - } > -} > - > -/* "parse-flow FLOW": parses the argument as a flow (like add-flow) and > prints > - * it back to stdout. */ > -static void > -ofctl_parse_flow(const char *input, int command) > -{ > - enum ofputil_protocol usable_protocols; > - struct ofputil_flow_mod fm; > - char *error; > - > - error = parse_ofp_flow_mod_str(&fm, input, NULL, NULL, > - command, &usable_protocols); > - if (error) { > - printf("Error encountered: %s\n", error); > - free(error); > - } else { > - ofctl_parse_flows__(&fm, 1, usable_protocols); > - } > -} > - > -int > -LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) > -{ > - /* Bail out if we cannot construct at least a 1 char string. > - * Reserve 1 byte to decide flow mod command. > - * > - * Here's the structure of data we expect > - * |--Byte 1--|--Byte 2--|...|--Byte (size-1)--| > - * > - * where, > - * > - * Byte 1: Used to decide which ofp flow mod command to test > - * Bytes 2--(size-1): The C string that is actually passed to > - * ofctl_parse_flow() test API. > - * > - * This means that the fuzzed input is actually a C string of > - * length = (size -2) with the terminal byte being the NUL > - * character. Moreover, this string is expected to not contain > - * a new-line character. > - */ > - const char *stream = (const char *) data; > - if (size < 3 || stream[size - 1] != '\0' || strchr(&stream[1], '\n') > || > - strlen(&stream[1]) != size - 2) { > - return 0; > - } > - > - /* Disable logging to avoid write to disk. */ > - static bool isInit = false; > - if (!isInit) { > - vlog_set_verbosity("off"); > - isInit = true; > - } > - > - /* Decide test parameters using first byte of fuzzed input. */ > - int command = (stream[0] % OFPFC_DELETE_STRICT) + 1; > - > - /* Fuzz extended match parsing. */ > - const char *input = &stream[1]; > - ofctl_parse_flow(input, command); > - > - return 0; > -} > diff --git a/tests/oss-fuzz/ofp_print_target.c > b/tests/oss-fuzz/ofp_print_target.c > deleted file mode 100644 > index 126f2623f..000000000 > --- a/tests/oss-fuzz/ofp_print_target.c > +++ /dev/null > @@ -1,47 +0,0 @@ > -#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 > >
On Fri, Oct 18, 2019 at 11:13:08AM +0200, bshas3@gmail.com wrote: > From: Bhargava Shastry <bshas3@gmail.com> > > It appears that ossfuzz specific test harnesses and configuration files > were carried over to the ovn repo from the ovs repo without > justification. This patch removes them until there is a need to > continuously fuzz ovn code as the ovs code is currently fuzzed. > > Signed-off-by: Bhargava Shastry <bshas3@gmail.com> Thanks a lot! I applied this to ovn master.
This is the right mailing list for now. The convention is to write [PATCH ovn] in subject headings (but I figured it out ;-) On Fri, Oct 18, 2019 at 04:48:40PM +0200, Bhargava Shastry wrote: > Just want to add that the patch is to be applied to ovn source code, I > couldn't find the ovn mailing list so sent it here. Apologies. > > On Fri, Oct 18, 2019 at 11:13 AM <bshas3@gmail.com> wrote: > > > From: Bhargava Shastry <bshas3@gmail.com> > > > > It appears that ossfuzz specific test harnesses and configuration files > > were carried over to the ovn repo from the ovs repo without > > justification. This patch removes them until there is a need to > > continuously fuzz ovn code as the ovs code is currently fuzzed. > > > > Signed-off-by: Bhargava Shastry <bshas3@gmail.com> > > --- > > tests/automake.mk | 2 - > > tests/oss-fuzz/automake.mk | 66 --- > > tests/oss-fuzz/config/expr.dict | 120 ----- > > .../oss-fuzz/config/expr_parse_target.options | 3 - > > .../config/flow_extract_target.options | 3 - > > .../config/json_parser_target.options | 2 - > > tests/oss-fuzz/config/miniflow_target.options | 3 - > > tests/oss-fuzz/config/odp.dict | 170 ------- > > tests/oss-fuzz/config/odp_target.options | 3 - > > .../config/ofctl_parse_target.options | 3 - > > tests/oss-fuzz/config/ofp-flow.dict | 45 -- > > .../oss-fuzz/config/ofp_print_target.options | 3 - > > tests/oss-fuzz/config/ovs.dict | 293 ----------- > > tests/oss-fuzz/expr_parse_target.c | 464 ------------------ > > tests/oss-fuzz/flow_extract_target.c | 100 ---- > > tests/oss-fuzz/fuzzer.h | 9 - > > tests/oss-fuzz/json_parser_target.c | 42 -- > > tests/oss-fuzz/miniflow_target.c | 365 -------------- > > tests/oss-fuzz/odp_target.c | 149 ------ > > tests/oss-fuzz/ofctl_parse_target.c | 113 ----- > > tests/oss-fuzz/ofp_print_target.c | 47 -- > > 21 files changed, 2005 deletions(-) > > delete mode 100644 tests/oss-fuzz/automake.mk > > delete mode 100644 tests/oss-fuzz/config/expr.dict > > delete mode 100644 tests/oss-fuzz/config/expr_parse_target.options > > delete mode 100644 tests/oss-fuzz/config/flow_extract_target.options > > delete mode 100644 tests/oss-fuzz/config/json_parser_target.options > > delete mode 100644 tests/oss-fuzz/config/miniflow_target.options > > delete mode 100644 tests/oss-fuzz/config/odp.dict > > delete mode 100644 tests/oss-fuzz/config/odp_target.options > > delete mode 100644 tests/oss-fuzz/config/ofctl_parse_target.options > > delete mode 100644 tests/oss-fuzz/config/ofp-flow.dict > > delete mode 100644 tests/oss-fuzz/config/ofp_print_target.options > > delete mode 100644 tests/oss-fuzz/config/ovs.dict > > delete mode 100644 tests/oss-fuzz/expr_parse_target.c > > delete mode 100644 tests/oss-fuzz/flow_extract_target.c > > delete mode 100644 tests/oss-fuzz/fuzzer.h > > delete mode 100644 tests/oss-fuzz/json_parser_target.c > > delete mode 100644 tests/oss-fuzz/miniflow_target.c > > delete mode 100644 tests/oss-fuzz/odp_target.c > > delete mode 100644 tests/oss-fuzz/ofctl_parse_target.c > > delete mode 100644 tests/oss-fuzz/ofp_print_target.c > > > > diff --git a/tests/automake.mk b/tests/automake.mk > > index 013e59280..e86a5273e 100644 > > --- a/tests/automake.mk > > +++ b/tests/automake.mk > > @@ -246,5 +246,3 @@ 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 > > deleted file mode 100644 > > index 5bf7d0d7c..000000000 > > --- a/tests/oss-fuzz/automake.mk > > +++ /dev/null > > @@ -1,66 +0,0 @@ > > -OSS_FUZZ_TARGETS = \ > > - tests/oss-fuzz/flow_extract_target \ > > - tests/oss-fuzz/json_parser_target \ > > - tests/oss-fuzz/ofp_print_target \ > > - tests/oss-fuzz/expr_parse_target \ > > - tests/oss-fuzz/odp_target \ > > - tests/oss-fuzz/miniflow_target \ > > - tests/oss-fuzz/ofctl_parse_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++ > > - > > -tests_oss_fuzz_expr_parse_target_SOURCES = \ > > - tests/oss-fuzz/expr_parse_target.c \ > > - tests/oss-fuzz/fuzzer.h > > -tests_oss_fuzz_expr_parse_target_LDADD = lib/libopenvswitch.la \ > > - ovn/lib/libovn.la > > -tests_oss_fuzz_expr_parse_target_LDFLAGS = $(LIB_FUZZING_ENGINE) -lc++ > > - > > -tests_oss_fuzz_odp_target_SOURCES = \ > > - tests/oss-fuzz/odp_target.c \ > > - tests/oss-fuzz/fuzzer.h > > -tests_oss_fuzz_odp_target_LDADD = lib/libopenvswitch.la > > -tests_oss_fuzz_odp_target_LDFLAGS = $(LIB_FUZZING_ENGINE) -lc++ > > - > > -tests_oss_fuzz_miniflow_target_SOURCES = \ > > - tests/oss-fuzz/miniflow_target.c \ > > - tests/oss-fuzz/fuzzer.h > > -tests_oss_fuzz_miniflow_target_LDADD = lib/libopenvswitch.la > > -tests_oss_fuzz_miniflow_target_LDFLAGS = $(LIB_FUZZING_ENGINE) -lc++ > > - > > -tests_oss_fuzz_ofctl_parse_target_SOURCES = \ > > - tests/oss-fuzz/ofctl_parse_target.c \ > > - tests/oss-fuzz/fuzzer.h > > -tests_oss_fuzz_ofctl_parse_target_LDADD = lib/libopenvswitch.la > > -tests_oss_fuzz_ofctl_parse_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/expr_parse_target.options \ > > - tests/oss-fuzz/config/odp_target.options \ > > - tests/oss-fuzz/config/miniflow_target.options \ > > - tests/oss-fuzz/config/ofctl_parse_target.options \ > > - tests/oss-fuzz/config/ovs.dict \ > > - tests/oss-fuzz/config/expr.dict \ > > - tests/oss-fuzz/config/odp.dict \ > > - tests/oss-fuzz/config/ofp-flow.dict > > diff --git a/tests/oss-fuzz/config/expr.dict > > b/tests/oss-fuzz/config/expr.dict > > deleted file mode 100644 > > index 03741ad7d..000000000 > > --- a/tests/oss-fuzz/config/expr.dict > > +++ /dev/null > > @@ -1,120 +0,0 @@ > > -" = " > > -" = (" > > -" = dns_lookup();" > > -" { " > > -" };" > > -"!" > > -"!=" > > -"$" > > -"&&" > > -"(" > > -"()" > > -")" > > -"),commit,table=,zone=NXM_NX_REG)" > > -");" > > -", " > > -", meter=\"\"" > > -"," > > -",bucket=bucket_id=,weight:100,actions=ct(nat(dst=" > > -"--" > > -".." > > -"/" > > -"/%" > > -"0" > > -":" > > -"<" > > -"<->" > > -"<=" > > -"=" > > -"==" > > -"=r" > > -">" > > -">=" > > -"[" > > -"\x00" > > -"\x28" > > -"]" > > -"]:" > > -"allow" > > -"arp" > > -"bool" > > -"bswap " > > -"bswap %0" > > -"cc" > > -"clone" > > -"ct_clear" > > -"ct_clear;" > > -"ct_commit" > > -"ct_commit(" > > -"ct_dnat" > > -"ct_label" > > -"ct_label=" > > -"ct_lb" > > -"ct_mark" > > -"ct_mark=" > > -"ct_mark=%#x" > > -"ct_next" > > -"ct_next;" > > -"ct_snat" > > -"decimal" > > -"dhcpv6_stateful" > > -"dhcpv6_stateless" > > -"dns_lookup" > > -"drop" > > -"drop;" > > -"egress" > > -"error(" > > -"get_arp" > > -"get_nd" > > -"hexadecimal" > > -"icmp4" > > -"icmp6" > > -"ingress" > > -"ip.ttl" > > -"ip.ttl--;" > > -"ipv4" > > -"ipv6" > > -"log" > > -"log(" > > -"mac" > > -"meter" > > -"name" > > -"name=\"\", " > > -"nd_na" > > -"nd_na_router" > > -"nd_ns" > > -"next" > > -"next();" > > -"next(pipeline=, table=);" > > -"next;" > > -"output" > > -"output;" > > -"pipeline" > > -"put_arp" > > -"put_dhcp_opts" > > -"put_dhcpv6_opts" > > -"put_nd" > > -"put_nd_ra_opts" > > -"reject" > > -"set_meter" > > -"set_meter();" > > -"set_meter(, );" > > -"set_meter(,);" > > -"set_queue" > > -"set_queue();" > > -"severity" > > -"severity=" > > -"slaac" > > -"static_routes" > > -"str" > > -"table" > > -"tcp_reset" > > -"type=select,selection_method=dp_hash" > > -"uint16" > > -"uint32" > > -"uint8" > > -"verdict" > > -"verdict=, " > > -"{" > > -"||" > > -"}" > > diff --git a/tests/oss-fuzz/config/expr_parse_target.options > > b/tests/oss-fuzz/config/expr_parse_target.options > > deleted file mode 100644 > > index fc254e84f..000000000 > > --- a/tests/oss-fuzz/config/expr_parse_target.options > > +++ /dev/null > > @@ -1,3 +0,0 @@ > > -[libfuzzer] > > -dict = expr.dict > > -close_fd_mask = 3 > > diff --git a/tests/oss-fuzz/config/flow_extract_target.options > > b/tests/oss-fuzz/config/flow_extract_target.options > > deleted file mode 100644 > > index 81ad7f18c..000000000 > > --- a/tests/oss-fuzz/config/flow_extract_target.options > > +++ /dev/null > > @@ -1,3 +0,0 @@ > > -[libfuzzer] > > -dict = ovs.dict > > -close_fd_mask = 3 > > diff --git a/tests/oss-fuzz/config/json_parser_target.options > > b/tests/oss-fuzz/config/json_parser_target.options > > deleted file mode 100644 > > index 8d3739a53..000000000 > > --- a/tests/oss-fuzz/config/json_parser_target.options > > +++ /dev/null > > @@ -1,2 +0,0 @@ > > -[libfuzzer] > > -dict = json.dict > > diff --git a/tests/oss-fuzz/config/miniflow_target.options > > b/tests/oss-fuzz/config/miniflow_target.options > > deleted file mode 100644 > > index 4849f282d..000000000 > > --- a/tests/oss-fuzz/config/miniflow_target.options > > +++ /dev/null > > @@ -1,3 +0,0 @@ > > -[libfuzzer] > > -dict = ovs.dict > > -close_fd_mask = 3 > > \ No newline at end of file > > diff --git a/tests/oss-fuzz/config/odp.dict > > b/tests/oss-fuzz/config/odp.dict > > deleted file mode 100644 > > index a9bdd3e99..000000000 > > --- a/tests/oss-fuzz/config/odp.dict > > +++ /dev/null > > @@ -1,170 +0,0 @@ > > -"(" > > -")" > > -"," > > -"/0x" > > -"0x" > > -": " > > -"=" > > -"=r" > > -"action" > > -"arp" > > -"bfd" > > -"bos" > > -"c1" > > -"c2" > > -"c3" > > -"c4" > > -"cc" > > -"cfi" > > -"cfm" > > -"class" > > -"clone" > > -"code" > > -"commit," > > -"crit," > > -"csum" > > -"ct" > > -"ct(error)" > > -"ct_clear" > > -"ct_label" > > -"ct_mark" > > -"ct_state" > > -"ct_tuple4" > > -"ct_tuple6" > > -"ct_zone" > > -"dir" > > -"dl_type" > > -"dnat" > > -"dp_hash" > > -"drop" > > -"dst" > > -"dst_port" > > -"egress" > > -"encap" > > -"error" > > -"erspan" > > -"erspan(ver=1,sid=0x,dir=,idx=0x)" > > -"est" > > -"eth" > > -"eth_type" > > -"eth_type(0/)" > > -"first" > > -"flags" > > -"force_commit," > > -"frag" > > -"gbp(" > > -"geneve" > > -"gre((flags=0x,proto=0x)" > > -"hash," > > -"helper" > > -"hlimit" > > -"hwid" > > -"icmp" > > -"icmpv6" > > -"id" > > -"idx=" > > -"in_port" > > -"ingress" > > -"inv" > > -"ip6erspan" > > -"ipfix(output_port=" > > -"ipv4" > > -"ipv6" > > -"ipv6_dst" > > -"ipv6_src" > > -"l4()" > > -"label" > > -"lacp" > > -"later" > > -"len" > > -"lldp" > > -"mark=/," > > -"match" > > -"md2" > > -"mdtype" > > -"meter()" > > -"mpls" > > -"nat" > > -"nd" > > -"new" > > -"no" > > -"np" > > -"ns" > > -"nsh" > > -"oam," > > -"op" > > -"options(" > > -"out_port(" > > -"packet_type" > > -"pcp=" > > -"persistent," > > -"pop_eth" > > -"pop_mpls(eth_type=0x)" > > -"pop_nsh()" > > -"pop_vlan" > > -"proto" > > -"push_eth(src=:::::,dst=:::::,type=)" > > -"push_mpls(" > > -"push_nsh(" > > -"push_vlan(" > > -"push_vlan(tpid=,vid=,pcp=,cfi=)" > > -"random," > > -"recirc()" > > -"recirc_id" > > -"rel" > > -"rpl" > > -"sFlow(vid=,pcp=,output=)" > > -"sample" > > -"sctp" > > -"seq=0x" > > -"set(" > > -"set(nsh(" > > -"sha" > > -"si" > > -"sip" > > -"skb_mark" > > -"skb_priority" > > -"sll" > > -"slow_path" > > -"snat" > > -"spi" > > -"src" > > -"src_port" > > -"stp" > > -"sym_l4()" > > -"target" > > -"tc=" > > -"tclass" > > -"tcp" > > -"tcp_flags" > > -"tha" > > -"tip" > > -"tll" > > -"tnl_pop(" > > -"tnl_push(tnl_port(" > > -"too_little" > > -"too_much" > > -"tos" > > -"tp_dst" > > -"tp_src" > > -"tpid=0x" > > -"trk" > > -"trunc()" > > -"ttl" > > -"tun_id" > > -"tunnel" > > -"tunnel_out_port" > > -"type" > > -"udp" > > -"unspec" > > -"userdata" > > -"userspace(" > > -"userspace(error)" > > -"userspace(pid" > > -"ver" > > -"vid" > > -"vlan" > > -"vxlan" > > -"vxlan(flags=0x,vni=0x)" > > -"vxlan(gbp(" > > -"zone" > > diff --git a/tests/oss-fuzz/config/odp_target.options > > b/tests/oss-fuzz/config/odp_target.options > > deleted file mode 100644 > > index 41821b8c1..000000000 > > --- a/tests/oss-fuzz/config/odp_target.options > > +++ /dev/null > > @@ -1,3 +0,0 @@ > > -[libfuzzer] > > -close_fd_mask = 3 > > -dict = odp.dict > > diff --git a/tests/oss-fuzz/config/ofctl_parse_target.options > > b/tests/oss-fuzz/config/ofctl_parse_target.options > > deleted file mode 100644 > > index 6d67dd6ad..000000000 > > --- a/tests/oss-fuzz/config/ofctl_parse_target.options > > +++ /dev/null > > @@ -1,3 +0,0 @@ > > -[libfuzzer] > > -close_fd_mask = 3 > > -dict = ofp-flow.dict > > diff --git a/tests/oss-fuzz/config/ofp-flow.dict > > b/tests/oss-fuzz/config/ofp-flow.dict > > deleted file mode 100644 > > index 01175e5eb..000000000 > > --- a/tests/oss-fuzz/config/ofp-flow.dict > > +++ /dev/null > > @@ -1,45 +0,0 @@ > > -")" > > -"(" > > -"[" > > -"]" > > -"," > > -"-" > > -"0" > > -":" > > -"=" > > -"ADD" > > -"DEL" > > -"DEL_STRICT" > > -"MOD" > > -"MOD_STRICT" > > -"\x00" > > -"\x20" > > -"\x3F" > > -"actions" > > -"add" > > -"allow_hidden_fields" > > -"cc" > > -"check_overlap" > > -"cookie" > > -"delete" > > -"delete_strict" > > -"duration" > > -"eth" > > -"hard_age" > > -"hard_timeout" > > -"idle_age" > > -"idle_timeout" > > -"importance" > > -"modify" > > -"modify_strict" > > -"n_bytes" > > -"n_packets" > > -"no_byte_counts" > > -"no_packet_counts" > > -"no_readonly_table" > > -"out_group" > > -"out_port" > > -"priority" > > -"reset_counts" > > -"send_flow_rem" > > -"table" > > diff --git a/tests/oss-fuzz/config/ofp_print_target.options > > b/tests/oss-fuzz/config/ofp_print_target.options > > deleted file mode 100644 > > index 7f117292e..000000000 > > --- a/tests/oss-fuzz/config/ofp_print_target.options > > +++ /dev/null > > @@ -1,3 +0,0 @@ > > -[libfuzzer] > > -close_fd_mask = 3 > > -dict = ovs.dict > > diff --git a/tests/oss-fuzz/config/ovs.dict > > b/tests/oss-fuzz/config/ovs.dict > > deleted file mode 100644 > > index 243b243ab..000000000 > > --- a/tests/oss-fuzz/config/ovs.dict > > +++ /dev/null > > @@ -1,293 +0,0 @@ > > -"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/expr_parse_target.c > > b/tests/oss-fuzz/expr_parse_target.c > > deleted file mode 100644 > > index 1a3893858..000000000 > > --- a/tests/oss-fuzz/expr_parse_target.c > > +++ /dev/null > > @@ -1,464 +0,0 @@ > > -#include <config.h> > > -#include "fuzzer.h" > > -#include <errno.h> > > -#include <getopt.h> > > -#include <sys/wait.h> > > - > > -#include "command-line.h" > > -#include "dp-packet.h" > > -#include "fatal-signal.h" > > -#include "flow.h" > > -#include "openvswitch/dynamic-string.h" > > -#include "openvswitch/match.h" > > -#include "openvswitch/ofp-actions.h" > > -#include "openvswitch/ofpbuf.h" > > -#include "openvswitch/vlog.h" > > -#include "ovn/actions.h" > > -#include "ovn/expr.h" > > -#include "ovn/lex.h" > > -#include "ovn/lib/logical-fields.h" > > -#include "ovn/lib/ovn-l7.h" > > -#include "ovn/lib/extend-table.h" > > -#include "openvswitch/shash.h" > > -#include "simap.h" > > -#include "util.h" > > - > > -static void > > -compare_token(const struct lex_token *a, const struct lex_token *b) > > -{ > > - if (a->type != b->type) { > > - fprintf(stderr, "type differs: %d -> %d\n", a->type, b->type); > > - return; > > - } > > - > > - if (!((a->s && b->s && !strcmp(a->s, b->s)) > > - || (!a->s && !b->s))) { > > - fprintf(stderr, "string differs: %s -> %s\n", > > - a->s ? a->s : "(null)", > > - b->s ? b->s : "(null)"); > > - return; > > - } > > - > > - if (a->type == LEX_T_INTEGER || a->type == LEX_T_MASKED_INTEGER) { > > - if (memcmp(&a->value, &b->value, sizeof a->value)) { > > - fprintf(stderr, "value differs\n"); > > - return; > > - } > > - > > - if (a->type == LEX_T_MASKED_INTEGER > > - && memcmp(&a->mask, &b->mask, sizeof a->mask)) { > > - fprintf(stderr, "mask differs\n"); > > - return; > > - } > > - > > - if (a->format != b->format > > - && !(a->format == LEX_F_HEXADECIMAL > > - && b->format == LEX_F_DECIMAL > > - && a->value.integer == 0)) { > > - fprintf(stderr, "format differs: %d -> %d\n", > > - a->format, b->format); > > - } > > - } > > -} > > - > > -static void > > -test_lex(const char *input) > > -{ > > - struct ds output; > > - > > - ds_init(&output); > > - struct lexer lexer; > > - > > - lexer_init(&lexer, input); > > - ds_clear(&output); > > - while (lexer_get(&lexer) != LEX_T_END) { > > - size_t len = output.length; > > - lex_token_format(&lexer.token, &output); > > - > > - /* Check that the formatted version can really be parsed back > > - * losslessly. */ > > - if (lexer.token.type != LEX_T_ERROR) { > > - const char *s = ds_cstr(&output) + len; > > - struct lexer l2; > > - > > - lexer_init(&l2, s); > > - lexer_get(&l2); > > - compare_token(&lexer.token, &l2.token); > > - lexer_destroy(&l2); > > - } > > - ds_put_char(&output, ' '); > > - } > > - lexer_destroy(&lexer); > > - > > - ds_chomp(&output, ' '); > > - puts(ds_cstr(&output)); > > - ds_destroy(&output); > > -} > > - > > -static void > > -create_symtab(struct shash *symtab) > > -{ > > - ovn_init_symtab(symtab); > > - > > - /* For negative testing. */ > > - expr_symtab_add_field(symtab, "bad_prereq", MFF_XREG0, "xyzzy", > > false); > > - expr_symtab_add_field(symtab, "self_recurse", MFF_XREG0, > > - "self_recurse != 0", false); > > - expr_symtab_add_field(symtab, "mutual_recurse_1", MFF_XREG0, > > - "mutual_recurse_2 != 0", false); > > - expr_symtab_add_field(symtab, "mutual_recurse_2", MFF_XREG0, > > - "mutual_recurse_1 != 0", false); > > - expr_symtab_add_string(symtab, "big_string", MFF_XREG0, NULL); > > -} > > - > > -static void > > -create_gen_opts(struct hmap *dhcp_opts, struct hmap *dhcpv6_opts, > > - struct hmap *nd_ra_opts) > > -{ > > - hmap_init(dhcp_opts); > > - dhcp_opt_add(dhcp_opts, "offerip", 0, "ipv4"); > > - dhcp_opt_add(dhcp_opts, "netmask", 1, "ipv4"); > > - dhcp_opt_add(dhcp_opts, "router", 3, "ipv4"); > > - dhcp_opt_add(dhcp_opts, "dns_server", 6, "ipv4"); > > - dhcp_opt_add(dhcp_opts, "log_server", 7, "ipv4"); > > - dhcp_opt_add(dhcp_opts, "lpr_server", 9, "ipv4"); > > - dhcp_opt_add(dhcp_opts, "domain", 15, "str"); > > - dhcp_opt_add(dhcp_opts, "swap_server", 16, "ipv4"); > > - dhcp_opt_add(dhcp_opts, "policy_filter", 21, "ipv4"); > > - dhcp_opt_add(dhcp_opts, "router_solicitation", 32, "ipv4"); > > - dhcp_opt_add(dhcp_opts, "nis_server", 41, "ipv4"); > > - dhcp_opt_add(dhcp_opts, "ntp_server", 42, "ipv4"); > > - dhcp_opt_add(dhcp_opts, "server_id", 54, "ipv4"); > > - dhcp_opt_add(dhcp_opts, "tftp_server", 66, "ipv4"); > > - dhcp_opt_add(dhcp_opts, "classless_static_route", 121, > > "static_routes"); > > - dhcp_opt_add(dhcp_opts, "ip_forward_enable", 19, "bool"); > > - dhcp_opt_add(dhcp_opts, "router_discovery", 31, "bool"); > > - dhcp_opt_add(dhcp_opts, "ethernet_encap", 36, "bool"); > > - dhcp_opt_add(dhcp_opts, "default_ttl", 23, "uint8"); > > - dhcp_opt_add(dhcp_opts, "tcp_ttl", 37, "uint8"); > > - dhcp_opt_add(dhcp_opts, "mtu", 26, "uint16"); > > - dhcp_opt_add(dhcp_opts, "lease_time", 51, "uint32"); > > - dhcp_opt_add(dhcp_opts, "wpad", 252, "str"); > > - > > - /* DHCPv6 options. */ > > - hmap_init(dhcpv6_opts); > > - dhcp_opt_add(dhcpv6_opts, "server_id", 2, "mac"); > > - dhcp_opt_add(dhcpv6_opts, "ia_addr", 5, "ipv6"); > > - dhcp_opt_add(dhcpv6_opts, "dns_server", 23, "ipv6"); > > - dhcp_opt_add(dhcpv6_opts, "domain_search", 24, "str"); > > - > > - /* IPv6 ND RA options. */ > > - hmap_init(nd_ra_opts); > > - nd_ra_opts_init(nd_ra_opts); > > -} > > - > > -static void > > -create_addr_sets(struct shash *addr_sets) > > -{ > > - shash_init(addr_sets); > > - > > - static const char *const addrs1[] = { > > - "10.0.0.1", "10.0.0.2", "10.0.0.3", > > - }; > > - static const char *const addrs2[] = { > > - "::1", "::2", "::3", > > - }; > > - static const char *const addrs3[] = { > > - "00:00:00:00:00:01", "00:00:00:00:00:02", "00:00:00:00:00:03", > > - }; > > - static const char *const addrs4[] = { NULL }; > > - > > - expr_const_sets_add(addr_sets, "set1", addrs1, 3, true); > > - expr_const_sets_add(addr_sets, "set2", addrs2, 3, true); > > - expr_const_sets_add(addr_sets, "set3", addrs3, 3, true); > > - expr_const_sets_add(addr_sets, "set4", addrs4, 0, true); > > -} > > - > > -static void > > -create_port_groups(struct shash *port_groups) > > -{ > > - shash_init(port_groups); > > - > > - static const char *const pg1[] = { > > - "lsp1", "lsp2", "lsp3", > > - }; > > - static const char *const pg2[] = { NULL }; > > - > > - expr_const_sets_add(port_groups, "pg1", pg1, 3, false); > > - expr_const_sets_add(port_groups, "pg_empty", pg2, 0, false); > > -} > > - > > -static bool > > -lookup_port_cb(const void *ports_, const char *port_name, unsigned int > > *portp) > > -{ > > - const struct simap *ports = ports_; > > - const struct simap_node *node = simap_find(ports, port_name); > > - if (!node) { > > - return false; > > - } > > - *portp = node->data; > > - return true; > > -} > > - > > -static bool > > -is_chassis_resident_cb(const void *ports_, const char *port_name) > > -{ > > - const struct simap *ports = ports_; > > - const struct simap_node *node = simap_find(ports, port_name); > > - if (node) { > > - return true; > > - } > > - return false; > > -} > > - > > -static void > > -test_parse_actions(const char *input) > > -{ > > - struct shash symtab; > > - struct hmap dhcp_opts; > > - struct hmap dhcpv6_opts; > > - struct hmap nd_ra_opts; > > - struct simap ports; > > - > > - create_symtab(&symtab); > > - create_gen_opts(&dhcp_opts, &dhcpv6_opts, &nd_ra_opts); > > - > > - /* Initialize group ids. */ > > - struct ovn_extend_table group_table; > > - ovn_extend_table_init(&group_table); > > - > > - /* Initialize meter ids for QoS. */ > > - struct ovn_extend_table meter_table; > > - ovn_extend_table_init(&meter_table); > > - > > - simap_init(&ports); > > - simap_put(&ports, "eth0", 5); > > - simap_put(&ports, "eth1", 6); > > - simap_put(&ports, "LOCAL", ofp_to_u16(OFPP_LOCAL)); > > - > > - struct ofpbuf ovnacts; > > - struct expr *prereqs; > > - char *error; > > - > > - puts(input); > > - > > - ofpbuf_init(&ovnacts, 0); > > - > > - const struct ovnact_parse_params pp = { > > - .symtab = &symtab, > > - .dhcp_opts = &dhcp_opts, > > - .dhcpv6_opts = &dhcpv6_opts, > > - .nd_ra_opts = &nd_ra_opts, > > - .n_tables = 24, > > - .cur_ltable = 10, > > - }; > > - error = ovnacts_parse_string(input, &pp, &ovnacts, &prereqs); > > - if (!error) { > > - /* Convert the parsed representation back to a string and print > > it, > > - * if it's different from the input. */ > > - struct ds ovnacts_s = DS_EMPTY_INITIALIZER; > > - ovnacts_format(ovnacts.data, ovnacts.size, &ovnacts_s); > > - if (strcmp(input, ds_cstr(&ovnacts_s))) { > > - printf(" formats as %s\n", ds_cstr(&ovnacts_s)); > > - } > > - > > - /* Encode the actions into OpenFlow and print. */ > > - const struct ovnact_encode_params ep = { > > - .lookup_port = lookup_port_cb, > > - .aux = &ports, > > - .is_switch = true, > > - .group_table = &group_table, > > - .meter_table = &meter_table, > > - > > - .pipeline = OVNACT_P_INGRESS, > > - .ingress_ptable = 8, > > - .egress_ptable = 40, > > - .output_ptable = 64, > > - .mac_bind_ptable = 65, > > - }; > > - struct ofpbuf ofpacts; > > - ofpbuf_init(&ofpacts, 0); > > - ovnacts_encode(ovnacts.data, ovnacts.size, &ep, &ofpacts); > > - struct ds ofpacts_s = DS_EMPTY_INITIALIZER; > > - struct ofpact_format_params fp = { .s = &ofpacts_s }; > > - ofpacts_format(ofpacts.data, ofpacts.size, &fp); > > - printf(" encodes as %s\n", ds_cstr(&ofpacts_s)); > > - ds_destroy(&ofpacts_s); > > - ofpbuf_uninit(&ofpacts); > > - > > - /* Print prerequisites if any. */ > > - if (prereqs) { > > - struct ds prereqs_s = DS_EMPTY_INITIALIZER; > > - expr_format(prereqs, &prereqs_s); > > - printf(" has prereqs %s\n", ds_cstr(&prereqs_s)); > > - ds_destroy(&prereqs_s); > > - } > > - > > - /* Now re-parse and re-format the string to verify that it's > > - * round-trippable. */ > > - struct ofpbuf ovnacts2; > > - struct expr *prereqs2; > > - ofpbuf_init(&ovnacts2, 0); > > - error = ovnacts_parse_string(ds_cstr(&ovnacts_s), &pp, &ovnacts2, > > - &prereqs2); > > - if (!error) { > > - struct ds ovnacts2_s = DS_EMPTY_INITIALIZER; > > - ovnacts_format(ovnacts2.data, ovnacts2.size, &ovnacts2_s); > > - if (strcmp(ds_cstr(&ovnacts_s), ds_cstr(&ovnacts2_s))) { > > - printf(" bad reformat: %s\n", ds_cstr(&ovnacts2_s)); > > - } > > - ds_destroy(&ovnacts2_s); > > - } else { > > - printf(" reparse error: %s\n", error); > > - free(error); > > - } > > - expr_destroy(prereqs2); > > - > > - ovnacts_free(ovnacts2.data, ovnacts2.size); > > - ofpbuf_uninit(&ovnacts2); > > - ds_destroy(&ovnacts_s); > > - } else { > > - printf(" %s\n", error); > > - free(error); > > - } > > - > > - expr_destroy(prereqs); > > - ovnacts_free(ovnacts.data, ovnacts.size); > > - ofpbuf_uninit(&ovnacts); > > - > > - simap_destroy(&ports); > > - expr_symtab_destroy(&symtab); > > - shash_destroy(&symtab); > > - dhcp_opts_destroy(&dhcp_opts); > > - dhcp_opts_destroy(&dhcpv6_opts); > > - nd_ra_opts_destroy(&nd_ra_opts); > > - ovn_extend_table_destroy(&group_table); > > - ovn_extend_table_destroy(&meter_table); > > -} > > - > > -static void > > -test_parse_expr(const char *input) > > -{ > > - struct shash symtab; > > - struct shash addr_sets; > > - struct shash port_groups; > > - struct simap ports; > > - struct expr *expr; > > - char *error; > > - > > - create_symtab(&symtab); > > - create_addr_sets(&addr_sets); > > - create_port_groups(&port_groups); > > - > > - simap_init(&ports); > > - simap_put(&ports, "eth0", 5); > > - simap_put(&ports, "eth1", 6); > > - simap_put(&ports, "LOCAL", ofp_to_u16(OFPP_LOCAL)); > > - simap_put(&ports, "lsp1", 0x11); > > - simap_put(&ports, "lsp2", 0x12); > > - simap_put(&ports, "lsp3", 0x13); > > - > > - expr = expr_parse_string(input, &symtab, &addr_sets, > > - &port_groups, &error); > > - if (!error) { > > - expr = expr_annotate(expr, &symtab, &error); > > - } > > - if (!error) { > > - expr = expr_simplify(expr, is_chassis_resident_cb, &ports); > > - expr = expr_normalize(expr); > > - ovs_assert(expr_is_normalized(expr)); > > - } > > - if (!error) { > > - struct hmap matches; > > - > > - expr_to_matches(expr, lookup_port_cb, &ports, &matches); > > - expr_matches_print(&matches, stdout); > > - expr_matches_destroy(&matches); > > - } else { > > - puts(error); > > - free(error); > > - } > > - expr_destroy(expr); > > - simap_destroy(&ports); > > - expr_symtab_destroy(&symtab); > > - shash_destroy(&symtab); > > - expr_const_sets_destroy(&addr_sets); > > - shash_destroy(&addr_sets); > > - expr_const_sets_destroy(&port_groups); > > - shash_destroy(&port_groups); > > -} > > - > > -static bool > > -lookup_atoi_cb(const void *aux OVS_UNUSED, const char *port_name, > > - unsigned int *portp) > > -{ > > - *portp = atoi(port_name); > > - return true; > > -} > > - > > -static void > > -test_expr_to_packets(const char *input) > > -{ > > - struct shash symtab; > > - create_symtab(&symtab); > > - > > - struct flow uflow; > > - char *error = expr_parse_microflow(input, &symtab, NULL, NULL, > > - lookup_atoi_cb, NULL, &uflow); > > - if (error) { > > - puts(error); > > - free(error); > > - expr_symtab_destroy(&symtab); > > - shash_destroy(&symtab); > > - return; > > - } > > - > > - uint64_t packet_stub[128 / 8]; > > - struct dp_packet packet; > > - dp_packet_use_stub(&packet, packet_stub, sizeof packet_stub); > > - flow_compose(&packet, &uflow, NULL, 64); > > - > > - struct ds output = DS_EMPTY_INITIALIZER; > > - const uint8_t *buf = dp_packet_data(&packet); > > - for (int i = 0; i < dp_packet_size(&packet); i++) { > > - uint8_t val = buf[i]; > > - ds_put_format(&output, "%02"PRIx8, val); > > - } > > - puts(ds_cstr(&output)); > > - ds_destroy(&output); > > - dp_packet_uninit(&packet); > > - expr_symtab_destroy(&symtab); > > - shash_destroy(&symtab); > > -} > > - > > -int > > -LLVMFuzzerTestOneInput(const uint8_t *input_, size_t size) > > -{ > > - /* Bail out if we cannot construct at least a 1 char string. */ > > - const char *input = (const char *) input_; > > - if (size < 2 || input[size - 1] != '\0' || strchr(input, '\n') || > > - strlen(input) != size - 1) { > > - return 0; > > - } > > - > > - /* Disable logging to avoid write to disk. */ > > - static bool isInit = false; > > - if (!isInit) { > > - vlog_set_verbosity("off"); > > - isInit = true; > > - } > > - > > - /* Parse, annotate, simplify, normalize expr and convert to flows. */ > > - test_parse_expr(input); > > - > > - /* Parse actions. */ > > - test_parse_actions(input); > > - > > - /* Test OVN lexer. */ > > - test_lex(input); > > - > > - /* Expr to packets. */ > > - test_expr_to_packets(input); > > - > > - return 0; > > -} > > diff --git a/tests/oss-fuzz/flow_extract_target.c > > b/tests/oss-fuzz/flow_extract_target.c > > deleted file mode 100644 > > index 4a7451411..000000000 > > --- a/tests/oss-fuzz/flow_extract_target.c > > +++ /dev/null > > @@ -1,100 +0,0 @@ > > -#include <config.h> > > -#include "classifier.h" > > -#include <assert.h> > > -#include "fuzzer.h" > > -#include "dp-packet.h" > > -#include "flow.h" > > -#include "openvswitch/ofp-match.h" > > -#include "openvswitch/ofp-print.h" > > -#include "openvswitch/match.h" > > -#include "classifier-private.h" > > - > > -static void > > -test_flow_hash(const struct flow *flow) > > -{ > > - uint32_t hash = flow_hash_5tuple(flow, 0); > > - hash = flow_hash_symmetric_l4(flow, 0); > > - hash = flow_hash_symmetric_l2(flow, 0); > > - hash = flow_hash_symmetric_l3l4(flow, 0, NULL); > > - hash = flow_hash_symmetric_l3(flow, 0); > > - hash = flow_hash_fields(flow, NX_HASH_FIELDS_ETH_SRC, hash); > > - hash = flow_hash_fields(flow, NX_HASH_FIELDS_SYMMETRIC_L4, hash); > > - hash = flow_hash_fields(flow, NX_HASH_FIELDS_SYMMETRIC_L3L4, hash); > > - hash = flow_hash_fields(flow, NX_HASH_FIELDS_SYMMETRIC_L3L4_UDP, > > hash); > > - hash = flow_hash_fields(flow, NX_HASH_FIELDS_NW_SRC, hash); > > - hash = flow_hash_fields(flow, NX_HASH_FIELDS_NW_DST, hash); > > - hash = flow_hash_fields(flow, NX_HASH_FIELDS_SYMMETRIC_L3, hash); > > - ignore(hash); > > -} > > - > > -static void > > -test_flow_mask(const struct flow *flow) > > -{ > > - struct flow_wildcards catchall; > > - > > - flow_wildcards_init_catchall(&catchall); > > - flow_mask_hash_fields(flow, &catchall, NX_HASH_FIELDS_ETH_SRC); > > - flow_mask_hash_fields(flow, &catchall, NX_HASH_FIELDS_SYMMETRIC_L4); > > - flow_mask_hash_fields(flow, &catchall, NX_HASH_FIELDS_SYMMETRIC_L3L4); > > - flow_mask_hash_fields(flow, &catchall, > > NX_HASH_FIELDS_SYMMETRIC_L3L4_UDP); > > - flow_mask_hash_fields(flow, &catchall, NX_HASH_FIELDS_NW_SRC); > > - flow_mask_hash_fields(flow, &catchall, NX_HASH_FIELDS_NW_DST); > > - flow_mask_hash_fields(flow, &catchall, NX_HASH_FIELDS_SYMMETRIC_L3); > > -} > > - > > -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); > > - > > - /* Extract flowmap. */ > > - struct flowmap fmap; > > - flow_wc_map(&flow, &fmap); > > - > > - /* Parse TCP flags. */ > > - if (dp_packet_size(&packet) >= ETH_HEADER_LEN) { > > - uint16_t tcp_flags = parse_tcp_flags(&packet); > > - ignore(tcp_flags); > > - } > > - > > - /* Parse TCP flags. */ > > - if (dp_packet_size(&packet) >= ETH_HEADER_LEN) { > > - uint16_t tcp_flags = parse_tcp_flags(&packet); > > - ignore(tcp_flags); > > - } > > - > > - /* Count headers. */ > > - int count = flow_count_vlan_headers(&flow); > > - ignore(count); > > - > > - /* Extract metadata. */ > > - struct match flow_metadata; > > - flow_get_metadata(&flow, &flow_metadata); > > - > > - /* Hashing functions. */ > > - test_flow_hash(&flow); > > - > > - /* Masking functions. */ > > - test_flow_mask(&flow); > > - > > - /* Convert flow to match. */ > > - struct match match; > > - match_wc_init(&match, &flow); > > - > > - struct ofp10_match ext_match; > > - ofputil_match_to_ofp10_match(&match, &ext_match); > > - > > - /* Print match and packet. */ > > - ofp_print_packet(stdout, dp_packet_data(&packet), > > dp_packet_size(&packet), > > - htonl(PT_ETH)); > > - ovs_hex_dump(stdout, dp_packet_data(&packet), > > dp_packet_size(&packet), 0, > > - true); > > - match_print(&match, NULL); > > - > > - ovs_hex_dump(stdout, &ext_match, sizeof ext_match, 0, false); > > - > > - return 0; > > -} > > diff --git a/tests/oss-fuzz/fuzzer.h b/tests/oss-fuzz/fuzzer.h > > deleted file mode 100644 > > index f87ae59e9..000000000 > > --- a/tests/oss-fuzz/fuzzer.h > > +++ /dev/null > > @@ -1,9 +0,0 @@ > > -#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 > > deleted file mode 100644 > > index e39e04a0d..000000000 > > --- a/tests/oss-fuzz/json_parser_target.c > > +++ /dev/null > > @@ -1,42 +0,0 @@ > > -#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/miniflow_target.c > > b/tests/oss-fuzz/miniflow_target.c > > deleted file mode 100644 > > index 800375d63..000000000 > > --- a/tests/oss-fuzz/miniflow_target.c > > +++ /dev/null > > @@ -1,365 +0,0 @@ > > -#include <config.h> > > -#include "classifier.h" > > -#include "fuzzer.h" > > -#include "dp-packet.h" > > -#include "flow.h" > > -#include "openvswitch/ofp-match.h" > > -#include "openvswitch/ofp-print.h" > > -#include "openvswitch/match.h" > > -#include "classifier-private.h" > > -#include "util.h" > > - > > -static void > > -shuffle_u32s(uint32_t *p, size_t n) > > -{ > > - for (; n > 1; n--, p++) { > > - uint32_t *q = &p[random_range(n)]; > > - uint32_t tmp = *p; > > - *p = *q; > > - *q = tmp; > > - } > > -} > > - > > -/* Returns a copy of 'src'. The caller must eventually free the returned > > - * miniflow with free(). */ > > -static struct miniflow * > > -miniflow_clone__(const struct miniflow *src) > > -{ > > - struct miniflow *dst; > > - size_t data_size; > > - > > - data_size = miniflow_alloc(&dst, 1, src); > > - miniflow_clone(dst, src, data_size / sizeof(uint64_t)); > > - return dst; > > -} > > - > > -/* Returns a hash value for 'flow', given 'basis'. */ > > -static inline uint32_t > > -miniflow_hash__(const struct miniflow *flow, uint32_t basis) > > -{ > > - const uint64_t *p = miniflow_get_values(flow); > > - size_t n_values = miniflow_n_values(flow); > > - struct flowmap hash_map = FLOWMAP_EMPTY_INITIALIZER; > > - uint32_t hash = basis; > > - size_t idx; > > - > > - FLOWMAP_FOR_EACH_INDEX (idx, flow->map) { > > - uint64_t value = *p++; > > - > > - if (value) { > > - hash = hash_add64(hash, value); > > - flowmap_set(&hash_map, idx, 1); > > - } > > - } > > - map_t map; > > - FLOWMAP_FOR_EACH_MAP (map, hash_map) { > > - hash = hash_add64(hash, map); > > - } > > - > > - return hash_finish(hash, n_values); > > -} > > - > > -static uint32_t > > -random_value(void) > > -{ > > - static const uint32_t values_[] = > > - { 0xffffffff, 0xaaaaaaaa, 0x55555555, 0x80000000, > > - 0x00000001, 0xface0000, 0x00d00d1e, 0xdeadbeef }; > > - > > - return values_[random_range(ARRAY_SIZE(values_))]; > > -} > > - > > -static bool > > -choose(unsigned int n, unsigned int *idxp) > > -{ > > - if (*idxp < n) { > > - return true; > > - } else { > > - *idxp -= n; > > - return false; > > - } > > -} > > - > > -#define FLOW_U32S (FLOW_U64S * 2) > > - > > -static bool > > -init_consecutive_values(int n_consecutive, struct flow *flow, > > - unsigned int *idxp) > > -{ > > - uint32_t *flow_u32 = (uint32_t *) flow; > > - > > - if (choose(FLOW_U32S - n_consecutive + 1, idxp)) { > > - int i; > > - > > - for (i = 0; i < n_consecutive; i++) { > > - flow_u32[i + *idxp] = random_value(); > > - } > > - return true; > > - } else { > > - return false; > > - } > > -} > > - > > -static bool > > -next_random_flow(struct flow *flow, unsigned int idx) > > -{ > > - uint32_t *flow_u32 = (uint32_t *) flow; > > - > > - memset(flow, 0, sizeof *flow); > > - > > - /* Empty flow. */ > > - if (choose(1, &idx)) { > > - return true; > > - } > > - > > - /* All flows with a small number of consecutive nonzero values. */ > > - for (int i = 1; i <= 4; i++) { > > - if (init_consecutive_values(i, flow, &idx)) { > > - return true; > > - } > > - } > > - > > - /* All flows with a large number of consecutive nonzero values. */ > > - for (int i = FLOW_U32S - 4; i <= FLOW_U32S; i++) { > > - if (init_consecutive_values(i, flow, &idx)) { > > - return true; > > - } > > - } > > - > > - /* All flows with exactly two nonconsecutive nonzero values. */ > > - if (choose((FLOW_U32S - 1) * (FLOW_U32S - 2) / 2, &idx)) { > > - int ofs1; > > - > > - for (ofs1 = 0; ofs1 < FLOW_U32S - 2; ofs1++) { > > - int ofs2; > > - > > - for (ofs2 = ofs1 + 2; ofs2 < FLOW_U32S; ofs2++) { > > - if (choose(1, &idx)) { > > - flow_u32[ofs1] = random_value(); > > - flow_u32[ofs2] = random_value(); > > - return true; > > - } > > - } > > - } > > - OVS_NOT_REACHED(); > > - } > > - > > - /* 16 randomly chosen flows with N >= 3 nonzero values. */ > > - if (choose(16 * (FLOW_U32S - 4), &idx)) { > > - int n = idx / 16 + 3; > > - > > - for (int i = 0; i < n; i++) { > > - flow_u32[i] = random_value(); > > - } > > - shuffle_u32s(flow_u32, FLOW_U32S); > > - > > - return true; > > - } > > - > > - return false; > > -} > > - > > -static void > > -any_random_flow(struct flow *flow) > > -{ > > - static unsigned int max; > > - if (!max) { > > - while (next_random_flow(flow, max)) { > > - max++; > > - } > > - } > > - > > - next_random_flow(flow, random_range(max)); > > -} > > - > > -static void > > -toggle_masked_flow_bits(struct flow *flow, const struct flow_wildcards > > *mask) > > -{ > > - const uint32_t *mask_u32 = (const uint32_t *) &mask->masks; > > - uint32_t *flow_u32 = (uint32_t *) flow; > > - int i; > > - > > - for (i = 0; i < FLOW_U32S; i++) { > > - if (mask_u32[i] != 0) { > > - uint32_t bit; > > - > > - do { > > - bit = 1u << random_range(32); > > - } while (!(bit & mask_u32[i])); > > - flow_u32[i] ^= bit; > > - } > > - } > > -} > > - > > -static void > > -wildcard_extra_bits(struct flow_wildcards *mask) > > -{ > > - uint32_t *mask_u32 = (uint32_t *) &mask->masks; > > - int i; > > - > > - for (i = 0; i < FLOW_U32S; i++) { > > - if (mask_u32[i] != 0) { > > - uint32_t bit; > > - > > - do { > > - bit = 1u << random_range(32); > > - } while (!(bit & mask_u32[i])); > > - mask_u32[i] &= ~bit; > > - } > > - } > > -} > > - > > -static void > > -test_miniflow(struct flow *flow) > > -{ > > - struct miniflow *miniflow, *miniflow2, *miniflow3; > > - struct flow flow2, flow3; > > - struct flow_wildcards mask; > > - struct minimask *minimask; > > - int i; > > - > > - const uint64_t *flow_u64 = (const uint64_t *) flow; > > - > > - /* Convert flow to miniflow. */ > > - miniflow = miniflow_create(flow); > > - > > - /* Obtain miniflow hash. */ > > - uint32_t hash = miniflow_hash_5tuple(miniflow, 0); > > - ignore(hash); > > - > > - /* Check that the flow equals its miniflow. */ > > - for (i = 0; i < FLOW_MAX_VLAN_HEADERS; i++) { > > - ovs_assert(miniflow_get_vid(miniflow, i) == > > - vlan_tci_to_vid(flow->vlans[i].tci)); > > - } > > - for (i = 0; i < FLOW_U64S; i++) { > > - ovs_assert(miniflow_get(miniflow, i) == flow_u64[i]); > > - } > > - > > - /* Check that the miniflow equals itself. */ > > - ovs_assert(miniflow_equal(miniflow, miniflow)); > > - > > - /* Convert miniflow back to flow and verify that it's the same. */ > > - miniflow_expand(miniflow, &flow2); > > - ovs_assert(flow_equal(flow, &flow2)); > > - /* Check that copying a miniflow works properly. */ > > - miniflow2 = miniflow_clone__(miniflow); > > - ovs_assert(miniflow_equal(miniflow, miniflow2)); > > - ovs_assert(miniflow_hash__(miniflow, 0) == miniflow_hash__(miniflow2, > > 0)); > > - miniflow_expand(miniflow2, &flow3); > > - ovs_assert(flow_equal(flow, &flow3)); > > - > > - /* Check that masked matches work as expected for identical flows and > > - * miniflows. */ > > - do { > > - next_random_flow(&mask.masks, 1); > > - } while (flow_wildcards_is_catchall(&mask)); > > - minimask = minimask_create(&mask); > > - ovs_assert(minimask_is_catchall(minimask) > > - == flow_wildcards_is_catchall(&mask)); > > - ovs_assert(miniflow_equal_in_minimask(miniflow, miniflow2, minimask)); > > - ovs_assert(miniflow_equal_flow_in_minimask(miniflow, &flow2, > > minimask)); > > - ovs_assert(miniflow_hash_in_minimask(miniflow, minimask, 0x12345678) > > == > > - flow_hash_in_minimask(flow, minimask, 0x12345678)); > > - ovs_assert(minimask_hash(minimask, 0) == > > - miniflow_hash__(&minimask->masks, 0)); > > - > > - /* Check that masked matches work as expected for differing flows and > > - * miniflows. */ > > - toggle_masked_flow_bits(&flow2, &mask); > > - ovs_assert(!miniflow_equal_flow_in_minimask(miniflow, &flow2, > > minimask)); > > - miniflow3 = miniflow_create(&flow2); > > - ovs_assert(!miniflow_equal_in_minimask(miniflow, miniflow3, > > minimask)); > > - > > - free(miniflow); > > - free(miniflow2); > > - free(miniflow3); > > - free(minimask); > > -} > > - > > -static void > > -test_minimask_has_extra(struct flow *flow) > > -{ > > - struct flow_wildcards catchall; > > - struct minimask *minicatchall; > > - > > - flow_wildcards_init_catchall(&catchall); > > - minicatchall = minimask_create(&catchall); > > - ovs_assert(minimask_is_catchall(minicatchall)); > > - > > - struct flow_wildcards mask; > > - struct minimask *minimask; > > - > > - mask.masks = *flow; > > - minimask = minimask_create(&mask); > > - ovs_assert(!minimask_has_extra(minimask, minimask)); > > - ovs_assert(minimask_has_extra(minicatchall, minimask) > > - == !minimask_is_catchall(minimask)); > > - if (!minimask_is_catchall(minimask)) { > > - struct minimask *minimask2; > > - > > - wildcard_extra_bits(&mask); > > - minimask2 = minimask_create(&mask); > > - ovs_assert(minimask_has_extra(minimask2, minimask)); > > - ovs_assert(!minimask_has_extra(minimask, minimask2)); > > - free(minimask2); > > - } > > - > > - free(minimask); > > - free(minicatchall); > > -} > > - > > -static void > > -test_minimask_combine(struct flow *flow) > > -{ > > - struct flow_wildcards catchall; > > - struct minimask *minicatchall; > > - > > - flow_wildcards_init_catchall(&catchall); > > - minicatchall = minimask_create(&catchall); > > - ovs_assert(minimask_is_catchall(minicatchall)); > > - > > - struct minimask *minimask, *minimask2; > > - struct flow_wildcards mask, mask2, combined, combined2; > > - struct { > > - struct minimask minicombined; > > - uint64_t storage[FLOW_U64S]; > > - } m; > > - struct flow flow2; > > - > > - mask.masks = *flow; > > - minimask = minimask_create(&mask); > > - > > - minimask_combine(&m.minicombined, minimask, minicatchall, m.storage); > > - ovs_assert(minimask_is_catchall(&m.minicombined)); > > - > > - any_random_flow(&flow2); > > - mask2.masks = flow2; > > - minimask2 = minimask_create(&mask2); > > - > > - minimask_combine(&m.minicombined, minimask, minimask2, m.storage); > > - flow_wildcards_and(&combined, &mask, &mask2); > > - minimask_expand(&m.minicombined, &combined2); > > - ovs_assert(flow_wildcards_equal(&combined, &combined2)); > > - > > - free(minimask); > > - free(minimask2); > > - > > - free(minicatchall); > > -} > > - > > -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); > > - > > - /* Do miniflow tests. */ > > - test_miniflow(&flow); > > - test_minimask_has_extra(&flow); > > - test_minimask_combine(&flow); > > - > > - return 0; > > -} > > diff --git a/tests/oss-fuzz/odp_target.c b/tests/oss-fuzz/odp_target.c > > deleted file mode 100644 > > index ae61cdca3..000000000 > > --- a/tests/oss-fuzz/odp_target.c > > +++ /dev/null > > @@ -1,149 +0,0 @@ > > -#include <config.h> > > -#include "fuzzer.h" > > -#undef NDEBUG > > -#include "odp-util.h" > > -#include <stdio.h> > > -#include "openvswitch/dynamic-string.h" > > -#include "flow.h" > > -#include "openvswitch/match.h" > > -#include "openvswitch/ofpbuf.h" > > -#include "util.h" > > -#include "openvswitch/ofp-flow.h" > > -#include "openvswitch/vlog.h" > > - > > -static int > > -parse_keys(bool wc_keys, const char *in) > > -{ > > - int exit_code = 0; > > - > > - enum odp_key_fitness fitness; > > - struct ofpbuf odp_key; > > - struct ofpbuf odp_mask; > > - struct flow flow; > > - struct ds out; > > - int error; > > - > > - /* Convert string to OVS DP key. */ > > - ofpbuf_init(&odp_key, 0); > > - ofpbuf_init(&odp_mask, 0); > > - error = odp_flow_from_string(in, NULL, > > - &odp_key, &odp_mask, NULL); > > - if (error) { > > - printf("odp_flow_from_string: error\n"); > > - goto next; > > - } > > - > > - if (!wc_keys) { > > - struct odp_flow_key_parms odp_parms = { > > - .flow = &flow, > > - .support = { > > - .recirc = true, > > - .ct_state = true, > > - .ct_zone = true, > > - .ct_mark = true, > > - .ct_label = true, > > - .max_vlan_headers = SIZE_MAX, > > - }, > > - }; > > - > > - /* Convert odp_key to flow. */ > > - fitness = odp_flow_key_to_flow(odp_key.data, odp_key.size, > > - &flow, NULL); > > - switch (fitness) { > > - case ODP_FIT_PERFECT: > > - break; > > - > > - case ODP_FIT_TOO_LITTLE: > > - printf("ODP_FIT_TOO_LITTLE: "); > > - break; > > - > > - case ODP_FIT_TOO_MUCH: > > - printf("ODP_FIT_TOO_MUCH: "); > > - break; > > - > > - case ODP_FIT_ERROR: > > - printf("odp_flow_key_to_flow: error\n"); > > - goto next; > > - } > > - /* Convert cls_rule back to odp_key. */ > > - ofpbuf_uninit(&odp_key); > > - ofpbuf_init(&odp_key, 0); > > - odp_flow_key_from_flow(&odp_parms, &odp_key); > > - > > - if (odp_key.size > ODPUTIL_FLOW_KEY_BYTES) { > > - printf ("too long: %"PRIu32" > %d\n", > > - odp_key.size, ODPUTIL_FLOW_KEY_BYTES); > > - exit_code = 1; > > - } > > - } > > - > > - /* Convert odp_key to string. */ > > - ds_init(&out); > > - if (wc_keys) { > > - odp_flow_format(odp_key.data, odp_key.size, > > - odp_mask.data, odp_mask.size, NULL, &out, false); > > - } else { > > - odp_flow_key_format(odp_key.data, odp_key.size, &out); > > - } > > - puts(ds_cstr(&out)); > > - ds_destroy(&out); > > - > > -next: > > - ofpbuf_uninit(&odp_key); > > - ofpbuf_uninit(&odp_mask); > > - > > - return exit_code; > > -} > > - > > -static int > > -parse_actions(const char *in) > > -{ > > - struct ofpbuf odp_actions; > > - struct ds out; > > - int error; > > - > > - /* Convert string to OVS DP actions. */ > > - ofpbuf_init(&odp_actions, 0); > > - error = odp_actions_from_string(in, NULL, &odp_actions); > > - if (error) { > > - printf("odp_actions_from_string: error\n"); > > - goto next; > > - } > > - > > - /* Convert odp_actions back to string. */ > > - ds_init(&out); > > - format_odp_actions(&out, odp_actions.data, odp_actions.size, NULL); > > - puts(ds_cstr(&out)); > > - ds_destroy(&out); > > - > > -next: > > - ofpbuf_uninit(&odp_actions); > > - return 0; > > -} > > - > > -int > > -LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) > > -{ > > - /* Bail out if we cannot construct at least a 1 char string. */ > > - const char *input = (const char *) data; > > - if (size < 2 || input[size - 1] != '\0' || strchr(input, '\n') || > > - strlen(input) != size - 1) { > > - return 0; > > - } > > - > > - /* Disable logging to avoid write to disk. */ > > - static bool isInit = false; > > - if (!isInit) { > > - vlog_set_verbosity("off"); > > - isInit = true; > > - } > > - > > - /* Parse keys and wc keys. */ > > - parse_keys(false, input); > > - parse_keys(true, input); > > - > > - /* Parse actions. */ > > - parse_actions(input); > > - > > - return 0; > > -} > > diff --git a/tests/oss-fuzz/ofctl_parse_target.c > > b/tests/oss-fuzz/ofctl_parse_target.c > > deleted file mode 100644 > > index b4db52f7e..000000000 > > --- a/tests/oss-fuzz/ofctl_parse_target.c > > +++ /dev/null > > @@ -1,113 +0,0 @@ > > -#include <config.h> > > -#include "fuzzer.h" > > -#include "openvswitch/ofp-flow.h" > > -#include "ofp-version-opt.h" > > -#include "ofproto/ofproto.h" > > -#include "openflow/openflow.h" > > -#include "openvswitch/ofpbuf.h" > > -#include "openvswitch/vlog.h" > > -#include "util.h" > > - > > -static void > > -ofctl_parse_flows__(struct ofputil_flow_mod *fms, size_t n_fms, > > - enum ofputil_protocol usable_protocols) > > -{ > > - enum ofputil_protocol protocol = 0; > > - char *usable_s; > > - size_t i; > > - > > - usable_s = ofputil_protocols_to_string(usable_protocols); > > - printf("usable protocols: %s\n", usable_s); > > - free(usable_s); > > - > > - if (!(usable_protocols & OFPUTIL_P_ANY)) { > > - printf("no usable protocol\n"); > > - goto free; > > - } > > - for (i = 0; i < sizeof(enum ofputil_protocol) * CHAR_BIT; i++) { > > - protocol = 1u << i; > > - if (protocol & usable_protocols & OFPUTIL_P_ANY) { > > - break; > > - } > > - } > > - ovs_assert(is_pow2(protocol)); > > - > > - printf("chosen protocol: %s\n", ofputil_protocol_to_string(protocol)); > > - > > - for (i = 0; i < n_fms; i++) { > > - struct ofputil_flow_mod *fm = &fms[i]; > > - struct ofpbuf *msg; > > - > > - msg = ofputil_encode_flow_mod(fm, protocol); > > - ofpbuf_delete(msg); > > - } > > - > > -free: > > - for (i = 0; i < n_fms; i++) { > > - struct ofputil_flow_mod *fm = &fms[i]; > > - free(CONST_CAST(struct ofpact *, fm->ofpacts)); > > - minimatch_destroy(&fm->match); > > - } > > -} > > - > > -/* "parse-flow FLOW": parses the argument as a flow (like add-flow) and > > prints > > - * it back to stdout. */ > > -static void > > -ofctl_parse_flow(const char *input, int command) > > -{ > > - enum ofputil_protocol usable_protocols; > > - struct ofputil_flow_mod fm; > > - char *error; > > - > > - error = parse_ofp_flow_mod_str(&fm, input, NULL, NULL, > > - command, &usable_protocols); > > - if (error) { > > - printf("Error encountered: %s\n", error); > > - free(error); > > - } else { > > - ofctl_parse_flows__(&fm, 1, usable_protocols); > > - } > > -} > > - > > -int > > -LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) > > -{ > > - /* Bail out if we cannot construct at least a 1 char string. > > - * Reserve 1 byte to decide flow mod command. > > - * > > - * Here's the structure of data we expect > > - * |--Byte 1--|--Byte 2--|...|--Byte (size-1)--| > > - * > > - * where, > > - * > > - * Byte 1: Used to decide which ofp flow mod command to test > > - * Bytes 2--(size-1): The C string that is actually passed to > > - * ofctl_parse_flow() test API. > > - * > > - * This means that the fuzzed input is actually a C string of > > - * length = (size -2) with the terminal byte being the NUL > > - * character. Moreover, this string is expected to not contain > > - * a new-line character. > > - */ > > - const char *stream = (const char *) data; > > - if (size < 3 || stream[size - 1] != '\0' || strchr(&stream[1], '\n') > > || > > - strlen(&stream[1]) != size - 2) { > > - return 0; > > - } > > - > > - /* Disable logging to avoid write to disk. */ > > - static bool isInit = false; > > - if (!isInit) { > > - vlog_set_verbosity("off"); > > - isInit = true; > > - } > > - > > - /* Decide test parameters using first byte of fuzzed input. */ > > - int command = (stream[0] % OFPFC_DELETE_STRICT) + 1; > > - > > - /* Fuzz extended match parsing. */ > > - const char *input = &stream[1]; > > - ofctl_parse_flow(input, command); > > - > > - return 0; > > -} > > diff --git a/tests/oss-fuzz/ofp_print_target.c > > b/tests/oss-fuzz/ofp_print_target.c > > deleted file mode 100644 > > index 126f2623f..000000000 > > --- a/tests/oss-fuzz/ofp_print_target.c > > +++ /dev/null > > @@ -1,47 +0,0 @@ > > -#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 > > > > > > -- > Bhargava Shastry > _______________________________________________ > dev mailing list > dev@openvswitch.org > https://mail.openvswitch.org/mailman/listinfo/ovs-dev
diff --git a/tests/automake.mk b/tests/automake.mk index 013e59280..e86a5273e 100644 --- a/tests/automake.mk +++ b/tests/automake.mk @@ -246,5 +246,3 @@ 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 deleted file mode 100644 index 5bf7d0d7c..000000000 --- a/tests/oss-fuzz/automake.mk +++ /dev/null @@ -1,66 +0,0 @@ -OSS_FUZZ_TARGETS = \ - tests/oss-fuzz/flow_extract_target \ - tests/oss-fuzz/json_parser_target \ - tests/oss-fuzz/ofp_print_target \ - tests/oss-fuzz/expr_parse_target \ - tests/oss-fuzz/odp_target \ - tests/oss-fuzz/miniflow_target \ - tests/oss-fuzz/ofctl_parse_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++ - -tests_oss_fuzz_expr_parse_target_SOURCES = \ - tests/oss-fuzz/expr_parse_target.c \ - tests/oss-fuzz/fuzzer.h -tests_oss_fuzz_expr_parse_target_LDADD = lib/libopenvswitch.la \ - ovn/lib/libovn.la -tests_oss_fuzz_expr_parse_target_LDFLAGS = $(LIB_FUZZING_ENGINE) -lc++ - -tests_oss_fuzz_odp_target_SOURCES = \ - tests/oss-fuzz/odp_target.c \ - tests/oss-fuzz/fuzzer.h -tests_oss_fuzz_odp_target_LDADD = lib/libopenvswitch.la -tests_oss_fuzz_odp_target_LDFLAGS = $(LIB_FUZZING_ENGINE) -lc++ - -tests_oss_fuzz_miniflow_target_SOURCES = \ - tests/oss-fuzz/miniflow_target.c \ - tests/oss-fuzz/fuzzer.h -tests_oss_fuzz_miniflow_target_LDADD = lib/libopenvswitch.la -tests_oss_fuzz_miniflow_target_LDFLAGS = $(LIB_FUZZING_ENGINE) -lc++ - -tests_oss_fuzz_ofctl_parse_target_SOURCES = \ - tests/oss-fuzz/ofctl_parse_target.c \ - tests/oss-fuzz/fuzzer.h -tests_oss_fuzz_ofctl_parse_target_LDADD = lib/libopenvswitch.la -tests_oss_fuzz_ofctl_parse_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/expr_parse_target.options \ - tests/oss-fuzz/config/odp_target.options \ - tests/oss-fuzz/config/miniflow_target.options \ - tests/oss-fuzz/config/ofctl_parse_target.options \ - tests/oss-fuzz/config/ovs.dict \ - tests/oss-fuzz/config/expr.dict \ - tests/oss-fuzz/config/odp.dict \ - tests/oss-fuzz/config/ofp-flow.dict diff --git a/tests/oss-fuzz/config/expr.dict b/tests/oss-fuzz/config/expr.dict deleted file mode 100644 index 03741ad7d..000000000 --- a/tests/oss-fuzz/config/expr.dict +++ /dev/null @@ -1,120 +0,0 @@ -" = " -" = (" -" = dns_lookup();" -" { " -" };" -"!" -"!=" -"$" -"&&" -"(" -"()" -")" -"),commit,table=,zone=NXM_NX_REG)" -");" -", " -", meter=\"\"" -"," -",bucket=bucket_id=,weight:100,actions=ct(nat(dst=" -"--" -".." -"/" -"/%" -"0" -":" -"<" -"<->" -"<=" -"=" -"==" -"=r" -">" -">=" -"[" -"\x00" -"\x28" -"]" -"]:" -"allow" -"arp" -"bool" -"bswap " -"bswap %0" -"cc" -"clone" -"ct_clear" -"ct_clear;" -"ct_commit" -"ct_commit(" -"ct_dnat" -"ct_label" -"ct_label=" -"ct_lb" -"ct_mark" -"ct_mark=" -"ct_mark=%#x" -"ct_next" -"ct_next;" -"ct_snat" -"decimal" -"dhcpv6_stateful" -"dhcpv6_stateless" -"dns_lookup" -"drop" -"drop;" -"egress" -"error(" -"get_arp" -"get_nd" -"hexadecimal" -"icmp4" -"icmp6" -"ingress" -"ip.ttl" -"ip.ttl--;" -"ipv4" -"ipv6" -"log" -"log(" -"mac" -"meter" -"name" -"name=\"\", " -"nd_na" -"nd_na_router" -"nd_ns" -"next" -"next();" -"next(pipeline=, table=);" -"next;" -"output" -"output;" -"pipeline" -"put_arp" -"put_dhcp_opts" -"put_dhcpv6_opts" -"put_nd" -"put_nd_ra_opts" -"reject" -"set_meter" -"set_meter();" -"set_meter(, );" -"set_meter(,);" -"set_queue" -"set_queue();" -"severity" -"severity=" -"slaac" -"static_routes" -"str" -"table" -"tcp_reset" -"type=select,selection_method=dp_hash" -"uint16" -"uint32" -"uint8" -"verdict" -"verdict=, " -"{" -"||" -"}" diff --git a/tests/oss-fuzz/config/expr_parse_target.options b/tests/oss-fuzz/config/expr_parse_target.options deleted file mode 100644 index fc254e84f..000000000 --- a/tests/oss-fuzz/config/expr_parse_target.options +++ /dev/null @@ -1,3 +0,0 @@ -[libfuzzer] -dict = expr.dict -close_fd_mask = 3 diff --git a/tests/oss-fuzz/config/flow_extract_target.options b/tests/oss-fuzz/config/flow_extract_target.options deleted file mode 100644 index 81ad7f18c..000000000 --- a/tests/oss-fuzz/config/flow_extract_target.options +++ /dev/null @@ -1,3 +0,0 @@ -[libfuzzer] -dict = ovs.dict -close_fd_mask = 3 diff --git a/tests/oss-fuzz/config/json_parser_target.options b/tests/oss-fuzz/config/json_parser_target.options deleted file mode 100644 index 8d3739a53..000000000 --- a/tests/oss-fuzz/config/json_parser_target.options +++ /dev/null @@ -1,2 +0,0 @@ -[libfuzzer] -dict = json.dict diff --git a/tests/oss-fuzz/config/miniflow_target.options b/tests/oss-fuzz/config/miniflow_target.options deleted file mode 100644 index 4849f282d..000000000 --- a/tests/oss-fuzz/config/miniflow_target.options +++ /dev/null @@ -1,3 +0,0 @@ -[libfuzzer] -dict = ovs.dict -close_fd_mask = 3 \ No newline at end of file diff --git a/tests/oss-fuzz/config/odp.dict b/tests/oss-fuzz/config/odp.dict deleted file mode 100644 index a9bdd3e99..000000000 --- a/tests/oss-fuzz/config/odp.dict +++ /dev/null @@ -1,170 +0,0 @@ -"(" -")" -"," -"/0x" -"0x" -": " -"=" -"=r" -"action" -"arp" -"bfd" -"bos" -"c1" -"c2" -"c3" -"c4" -"cc" -"cfi" -"cfm" -"class" -"clone" -"code" -"commit," -"crit," -"csum" -"ct" -"ct(error)" -"ct_clear" -"ct_label" -"ct_mark" -"ct_state" -"ct_tuple4" -"ct_tuple6" -"ct_zone" -"dir" -"dl_type" -"dnat" -"dp_hash" -"drop" -"dst" -"dst_port" -"egress" -"encap" -"error" -"erspan" -"erspan(ver=1,sid=0x,dir=,idx=0x)" -"est" -"eth" -"eth_type" -"eth_type(0/)" -"first" -"flags" -"force_commit," -"frag" -"gbp(" -"geneve" -"gre((flags=0x,proto=0x)" -"hash," -"helper" -"hlimit" -"hwid" -"icmp" -"icmpv6" -"id" -"idx=" -"in_port" -"ingress" -"inv" -"ip6erspan" -"ipfix(output_port=" -"ipv4" -"ipv6" -"ipv6_dst" -"ipv6_src" -"l4()" -"label" -"lacp" -"later" -"len" -"lldp" -"mark=/," -"match" -"md2" -"mdtype" -"meter()" -"mpls" -"nat" -"nd" -"new" -"no" -"np" -"ns" -"nsh" -"oam," -"op" -"options(" -"out_port(" -"packet_type" -"pcp=" -"persistent," -"pop_eth" -"pop_mpls(eth_type=0x)" -"pop_nsh()" -"pop_vlan" -"proto" -"push_eth(src=:::::,dst=:::::,type=)" -"push_mpls(" -"push_nsh(" -"push_vlan(" -"push_vlan(tpid=,vid=,pcp=,cfi=)" -"random," -"recirc()" -"recirc_id" -"rel" -"rpl" -"sFlow(vid=,pcp=,output=)" -"sample" -"sctp" -"seq=0x" -"set(" -"set(nsh(" -"sha" -"si" -"sip" -"skb_mark" -"skb_priority" -"sll" -"slow_path" -"snat" -"spi" -"src" -"src_port" -"stp" -"sym_l4()" -"target" -"tc=" -"tclass" -"tcp" -"tcp_flags" -"tha" -"tip" -"tll" -"tnl_pop(" -"tnl_push(tnl_port(" -"too_little" -"too_much" -"tos" -"tp_dst" -"tp_src" -"tpid=0x" -"trk" -"trunc()" -"ttl" -"tun_id" -"tunnel" -"tunnel_out_port" -"type" -"udp" -"unspec" -"userdata" -"userspace(" -"userspace(error)" -"userspace(pid" -"ver" -"vid" -"vlan" -"vxlan" -"vxlan(flags=0x,vni=0x)" -"vxlan(gbp(" -"zone" diff --git a/tests/oss-fuzz/config/odp_target.options b/tests/oss-fuzz/config/odp_target.options deleted file mode 100644 index 41821b8c1..000000000 --- a/tests/oss-fuzz/config/odp_target.options +++ /dev/null @@ -1,3 +0,0 @@ -[libfuzzer] -close_fd_mask = 3 -dict = odp.dict diff --git a/tests/oss-fuzz/config/ofctl_parse_target.options b/tests/oss-fuzz/config/ofctl_parse_target.options deleted file mode 100644 index 6d67dd6ad..000000000 --- a/tests/oss-fuzz/config/ofctl_parse_target.options +++ /dev/null @@ -1,3 +0,0 @@ -[libfuzzer] -close_fd_mask = 3 -dict = ofp-flow.dict diff --git a/tests/oss-fuzz/config/ofp-flow.dict b/tests/oss-fuzz/config/ofp-flow.dict deleted file mode 100644 index 01175e5eb..000000000 --- a/tests/oss-fuzz/config/ofp-flow.dict +++ /dev/null @@ -1,45 +0,0 @@ -")" -"(" -"[" -"]" -"," -"-" -"0" -":" -"=" -"ADD" -"DEL" -"DEL_STRICT" -"MOD" -"MOD_STRICT" -"\x00" -"\x20" -"\x3F" -"actions" -"add" -"allow_hidden_fields" -"cc" -"check_overlap" -"cookie" -"delete" -"delete_strict" -"duration" -"eth" -"hard_age" -"hard_timeout" -"idle_age" -"idle_timeout" -"importance" -"modify" -"modify_strict" -"n_bytes" -"n_packets" -"no_byte_counts" -"no_packet_counts" -"no_readonly_table" -"out_group" -"out_port" -"priority" -"reset_counts" -"send_flow_rem" -"table" diff --git a/tests/oss-fuzz/config/ofp_print_target.options b/tests/oss-fuzz/config/ofp_print_target.options deleted file mode 100644 index 7f117292e..000000000 --- a/tests/oss-fuzz/config/ofp_print_target.options +++ /dev/null @@ -1,3 +0,0 @@ -[libfuzzer] -close_fd_mask = 3 -dict = ovs.dict diff --git a/tests/oss-fuzz/config/ovs.dict b/tests/oss-fuzz/config/ovs.dict deleted file mode 100644 index 243b243ab..000000000 --- a/tests/oss-fuzz/config/ovs.dict +++ /dev/null @@ -1,293 +0,0 @@ -"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/expr_parse_target.c b/tests/oss-fuzz/expr_parse_target.c deleted file mode 100644 index 1a3893858..000000000 --- a/tests/oss-fuzz/expr_parse_target.c +++ /dev/null @@ -1,464 +0,0 @@ -#include <config.h> -#include "fuzzer.h" -#include <errno.h> -#include <getopt.h> -#include <sys/wait.h> - -#include "command-line.h" -#include "dp-packet.h" -#include "fatal-signal.h" -#include "flow.h" -#include "openvswitch/dynamic-string.h" -#include "openvswitch/match.h" -#include "openvswitch/ofp-actions.h" -#include "openvswitch/ofpbuf.h" -#include "openvswitch/vlog.h" -#include "ovn/actions.h" -#include "ovn/expr.h" -#include "ovn/lex.h" -#include "ovn/lib/logical-fields.h" -#include "ovn/lib/ovn-l7.h" -#include "ovn/lib/extend-table.h" -#include "openvswitch/shash.h" -#include "simap.h" -#include "util.h" - -static void -compare_token(const struct lex_token *a, const struct lex_token *b) -{ - if (a->type != b->type) { - fprintf(stderr, "type differs: %d -> %d\n", a->type, b->type); - return; - } - - if (!((a->s && b->s && !strcmp(a->s, b->s)) - || (!a->s && !b->s))) { - fprintf(stderr, "string differs: %s -> %s\n", - a->s ? a->s : "(null)", - b->s ? b->s : "(null)"); - return; - } - - if (a->type == LEX_T_INTEGER || a->type == LEX_T_MASKED_INTEGER) { - if (memcmp(&a->value, &b->value, sizeof a->value)) { - fprintf(stderr, "value differs\n"); - return; - } - - if (a->type == LEX_T_MASKED_INTEGER - && memcmp(&a->mask, &b->mask, sizeof a->mask)) { - fprintf(stderr, "mask differs\n"); - return; - } - - if (a->format != b->format - && !(a->format == LEX_F_HEXADECIMAL - && b->format == LEX_F_DECIMAL - && a->value.integer == 0)) { - fprintf(stderr, "format differs: %d -> %d\n", - a->format, b->format); - } - } -} - -static void -test_lex(const char *input) -{ - struct ds output; - - ds_init(&output); - struct lexer lexer; - - lexer_init(&lexer, input); - ds_clear(&output); - while (lexer_get(&lexer) != LEX_T_END) { - size_t len = output.length; - lex_token_format(&lexer.token, &output); - - /* Check that the formatted version can really be parsed back - * losslessly. */ - if (lexer.token.type != LEX_T_ERROR) { - const char *s = ds_cstr(&output) + len; - struct lexer l2; - - lexer_init(&l2, s); - lexer_get(&l2); - compare_token(&lexer.token, &l2.token); - lexer_destroy(&l2); - } - ds_put_char(&output, ' '); - } - lexer_destroy(&lexer); - - ds_chomp(&output, ' '); - puts(ds_cstr(&output)); - ds_destroy(&output); -} - -static void -create_symtab(struct shash *symtab) -{ - ovn_init_symtab(symtab); - - /* For negative testing. */ - expr_symtab_add_field(symtab, "bad_prereq", MFF_XREG0, "xyzzy", false); - expr_symtab_add_field(symtab, "self_recurse", MFF_XREG0, - "self_recurse != 0", false); - expr_symtab_add_field(symtab, "mutual_recurse_1", MFF_XREG0, - "mutual_recurse_2 != 0", false); - expr_symtab_add_field(symtab, "mutual_recurse_2", MFF_XREG0, - "mutual_recurse_1 != 0", false); - expr_symtab_add_string(symtab, "big_string", MFF_XREG0, NULL); -} - -static void -create_gen_opts(struct hmap *dhcp_opts, struct hmap *dhcpv6_opts, - struct hmap *nd_ra_opts) -{ - hmap_init(dhcp_opts); - dhcp_opt_add(dhcp_opts, "offerip", 0, "ipv4"); - dhcp_opt_add(dhcp_opts, "netmask", 1, "ipv4"); - dhcp_opt_add(dhcp_opts, "router", 3, "ipv4"); - dhcp_opt_add(dhcp_opts, "dns_server", 6, "ipv4"); - dhcp_opt_add(dhcp_opts, "log_server", 7, "ipv4"); - dhcp_opt_add(dhcp_opts, "lpr_server", 9, "ipv4"); - dhcp_opt_add(dhcp_opts, "domain", 15, "str"); - dhcp_opt_add(dhcp_opts, "swap_server", 16, "ipv4"); - dhcp_opt_add(dhcp_opts, "policy_filter", 21, "ipv4"); - dhcp_opt_add(dhcp_opts, "router_solicitation", 32, "ipv4"); - dhcp_opt_add(dhcp_opts, "nis_server", 41, "ipv4"); - dhcp_opt_add(dhcp_opts, "ntp_server", 42, "ipv4"); - dhcp_opt_add(dhcp_opts, "server_id", 54, "ipv4"); - dhcp_opt_add(dhcp_opts, "tftp_server", 66, "ipv4"); - dhcp_opt_add(dhcp_opts, "classless_static_route", 121, "static_routes"); - dhcp_opt_add(dhcp_opts, "ip_forward_enable", 19, "bool"); - dhcp_opt_add(dhcp_opts, "router_discovery", 31, "bool"); - dhcp_opt_add(dhcp_opts, "ethernet_encap", 36, "bool"); - dhcp_opt_add(dhcp_opts, "default_ttl", 23, "uint8"); - dhcp_opt_add(dhcp_opts, "tcp_ttl", 37, "uint8"); - dhcp_opt_add(dhcp_opts, "mtu", 26, "uint16"); - dhcp_opt_add(dhcp_opts, "lease_time", 51, "uint32"); - dhcp_opt_add(dhcp_opts, "wpad", 252, "str"); - - /* DHCPv6 options. */ - hmap_init(dhcpv6_opts); - dhcp_opt_add(dhcpv6_opts, "server_id", 2, "mac"); - dhcp_opt_add(dhcpv6_opts, "ia_addr", 5, "ipv6"); - dhcp_opt_add(dhcpv6_opts, "dns_server", 23, "ipv6"); - dhcp_opt_add(dhcpv6_opts, "domain_search", 24, "str"); - - /* IPv6 ND RA options. */ - hmap_init(nd_ra_opts); - nd_ra_opts_init(nd_ra_opts); -} - -static void -create_addr_sets(struct shash *addr_sets) -{ - shash_init(addr_sets); - - static const char *const addrs1[] = { - "10.0.0.1", "10.0.0.2", "10.0.0.3", - }; - static const char *const addrs2[] = { - "::1", "::2", "::3", - }; - static const char *const addrs3[] = { - "00:00:00:00:00:01", "00:00:00:00:00:02", "00:00:00:00:00:03", - }; - static const char *const addrs4[] = { NULL }; - - expr_const_sets_add(addr_sets, "set1", addrs1, 3, true); - expr_const_sets_add(addr_sets, "set2", addrs2, 3, true); - expr_const_sets_add(addr_sets, "set3", addrs3, 3, true); - expr_const_sets_add(addr_sets, "set4", addrs4, 0, true); -} - -static void -create_port_groups(struct shash *port_groups) -{ - shash_init(port_groups); - - static const char *const pg1[] = { - "lsp1", "lsp2", "lsp3", - }; - static const char *const pg2[] = { NULL }; - - expr_const_sets_add(port_groups, "pg1", pg1, 3, false); - expr_const_sets_add(port_groups, "pg_empty", pg2, 0, false); -} - -static bool -lookup_port_cb(const void *ports_, const char *port_name, unsigned int *portp) -{ - const struct simap *ports = ports_; - const struct simap_node *node = simap_find(ports, port_name); - if (!node) { - return false; - } - *portp = node->data; - return true; -} - -static bool -is_chassis_resident_cb(const void *ports_, const char *port_name) -{ - const struct simap *ports = ports_; - const struct simap_node *node = simap_find(ports, port_name); - if (node) { - return true; - } - return false; -} - -static void -test_parse_actions(const char *input) -{ - struct shash symtab; - struct hmap dhcp_opts; - struct hmap dhcpv6_opts; - struct hmap nd_ra_opts; - struct simap ports; - - create_symtab(&symtab); - create_gen_opts(&dhcp_opts, &dhcpv6_opts, &nd_ra_opts); - - /* Initialize group ids. */ - struct ovn_extend_table group_table; - ovn_extend_table_init(&group_table); - - /* Initialize meter ids for QoS. */ - struct ovn_extend_table meter_table; - ovn_extend_table_init(&meter_table); - - simap_init(&ports); - simap_put(&ports, "eth0", 5); - simap_put(&ports, "eth1", 6); - simap_put(&ports, "LOCAL", ofp_to_u16(OFPP_LOCAL)); - - struct ofpbuf ovnacts; - struct expr *prereqs; - char *error; - - puts(input); - - ofpbuf_init(&ovnacts, 0); - - const struct ovnact_parse_params pp = { - .symtab = &symtab, - .dhcp_opts = &dhcp_opts, - .dhcpv6_opts = &dhcpv6_opts, - .nd_ra_opts = &nd_ra_opts, - .n_tables = 24, - .cur_ltable = 10, - }; - error = ovnacts_parse_string(input, &pp, &ovnacts, &prereqs); - if (!error) { - /* Convert the parsed representation back to a string and print it, - * if it's different from the input. */ - struct ds ovnacts_s = DS_EMPTY_INITIALIZER; - ovnacts_format(ovnacts.data, ovnacts.size, &ovnacts_s); - if (strcmp(input, ds_cstr(&ovnacts_s))) { - printf(" formats as %s\n", ds_cstr(&ovnacts_s)); - } - - /* Encode the actions into OpenFlow and print. */ - const struct ovnact_encode_params ep = { - .lookup_port = lookup_port_cb, - .aux = &ports, - .is_switch = true, - .group_table = &group_table, - .meter_table = &meter_table, - - .pipeline = OVNACT_P_INGRESS, - .ingress_ptable = 8, - .egress_ptable = 40, - .output_ptable = 64, - .mac_bind_ptable = 65, - }; - struct ofpbuf ofpacts; - ofpbuf_init(&ofpacts, 0); - ovnacts_encode(ovnacts.data, ovnacts.size, &ep, &ofpacts); - struct ds ofpacts_s = DS_EMPTY_INITIALIZER; - struct ofpact_format_params fp = { .s = &ofpacts_s }; - ofpacts_format(ofpacts.data, ofpacts.size, &fp); - printf(" encodes as %s\n", ds_cstr(&ofpacts_s)); - ds_destroy(&ofpacts_s); - ofpbuf_uninit(&ofpacts); - - /* Print prerequisites if any. */ - if (prereqs) { - struct ds prereqs_s = DS_EMPTY_INITIALIZER; - expr_format(prereqs, &prereqs_s); - printf(" has prereqs %s\n", ds_cstr(&prereqs_s)); - ds_destroy(&prereqs_s); - } - - /* Now re-parse and re-format the string to verify that it's - * round-trippable. */ - struct ofpbuf ovnacts2; - struct expr *prereqs2; - ofpbuf_init(&ovnacts2, 0); - error = ovnacts_parse_string(ds_cstr(&ovnacts_s), &pp, &ovnacts2, - &prereqs2); - if (!error) { - struct ds ovnacts2_s = DS_EMPTY_INITIALIZER; - ovnacts_format(ovnacts2.data, ovnacts2.size, &ovnacts2_s); - if (strcmp(ds_cstr(&ovnacts_s), ds_cstr(&ovnacts2_s))) { - printf(" bad reformat: %s\n", ds_cstr(&ovnacts2_s)); - } - ds_destroy(&ovnacts2_s); - } else { - printf(" reparse error: %s\n", error); - free(error); - } - expr_destroy(prereqs2); - - ovnacts_free(ovnacts2.data, ovnacts2.size); - ofpbuf_uninit(&ovnacts2); - ds_destroy(&ovnacts_s); - } else { - printf(" %s\n", error); - free(error); - } - - expr_destroy(prereqs); - ovnacts_free(ovnacts.data, ovnacts.size); - ofpbuf_uninit(&ovnacts); - - simap_destroy(&ports); - expr_symtab_destroy(&symtab); - shash_destroy(&symtab); - dhcp_opts_destroy(&dhcp_opts); - dhcp_opts_destroy(&dhcpv6_opts); - nd_ra_opts_destroy(&nd_ra_opts); - ovn_extend_table_destroy(&group_table); - ovn_extend_table_destroy(&meter_table); -} - -static void -test_parse_expr(const char *input) -{ - struct shash symtab; - struct shash addr_sets; - struct shash port_groups; - struct simap ports; - struct expr *expr; - char *error; - - create_symtab(&symtab); - create_addr_sets(&addr_sets); - create_port_groups(&port_groups); - - simap_init(&ports); - simap_put(&ports, "eth0", 5); - simap_put(&ports, "eth1", 6); - simap_put(&ports, "LOCAL", ofp_to_u16(OFPP_LOCAL)); - simap_put(&ports, "lsp1", 0x11); - simap_put(&ports, "lsp2", 0x12); - simap_put(&ports, "lsp3", 0x13); - - expr = expr_parse_string(input, &symtab, &addr_sets, - &port_groups, &error); - if (!error) { - expr = expr_annotate(expr, &symtab, &error); - } - if (!error) { - expr = expr_simplify(expr, is_chassis_resident_cb, &ports); - expr = expr_normalize(expr); - ovs_assert(expr_is_normalized(expr)); - } - if (!error) { - struct hmap matches; - - expr_to_matches(expr, lookup_port_cb, &ports, &matches); - expr_matches_print(&matches, stdout); - expr_matches_destroy(&matches); - } else { - puts(error); - free(error); - } - expr_destroy(expr); - simap_destroy(&ports); - expr_symtab_destroy(&symtab); - shash_destroy(&symtab); - expr_const_sets_destroy(&addr_sets); - shash_destroy(&addr_sets); - expr_const_sets_destroy(&port_groups); - shash_destroy(&port_groups); -} - -static bool -lookup_atoi_cb(const void *aux OVS_UNUSED, const char *port_name, - unsigned int *portp) -{ - *portp = atoi(port_name); - return true; -} - -static void -test_expr_to_packets(const char *input) -{ - struct shash symtab; - create_symtab(&symtab); - - struct flow uflow; - char *error = expr_parse_microflow(input, &symtab, NULL, NULL, - lookup_atoi_cb, NULL, &uflow); - if (error) { - puts(error); - free(error); - expr_symtab_destroy(&symtab); - shash_destroy(&symtab); - return; - } - - uint64_t packet_stub[128 / 8]; - struct dp_packet packet; - dp_packet_use_stub(&packet, packet_stub, sizeof packet_stub); - flow_compose(&packet, &uflow, NULL, 64); - - struct ds output = DS_EMPTY_INITIALIZER; - const uint8_t *buf = dp_packet_data(&packet); - for (int i = 0; i < dp_packet_size(&packet); i++) { - uint8_t val = buf[i]; - ds_put_format(&output, "%02"PRIx8, val); - } - puts(ds_cstr(&output)); - ds_destroy(&output); - dp_packet_uninit(&packet); - expr_symtab_destroy(&symtab); - shash_destroy(&symtab); -} - -int -LLVMFuzzerTestOneInput(const uint8_t *input_, size_t size) -{ - /* Bail out if we cannot construct at least a 1 char string. */ - const char *input = (const char *) input_; - if (size < 2 || input[size - 1] != '\0' || strchr(input, '\n') || - strlen(input) != size - 1) { - return 0; - } - - /* Disable logging to avoid write to disk. */ - static bool isInit = false; - if (!isInit) { - vlog_set_verbosity("off"); - isInit = true; - } - - /* Parse, annotate, simplify, normalize expr and convert to flows. */ - test_parse_expr(input); - - /* Parse actions. */ - test_parse_actions(input); - - /* Test OVN lexer. */ - test_lex(input); - - /* Expr to packets. */ - test_expr_to_packets(input); - - return 0; -} diff --git a/tests/oss-fuzz/flow_extract_target.c b/tests/oss-fuzz/flow_extract_target.c deleted file mode 100644 index 4a7451411..000000000 --- a/tests/oss-fuzz/flow_extract_target.c +++ /dev/null @@ -1,100 +0,0 @@ -#include <config.h> -#include "classifier.h" -#include <assert.h> -#include "fuzzer.h" -#include "dp-packet.h" -#include "flow.h" -#include "openvswitch/ofp-match.h" -#include "openvswitch/ofp-print.h" -#include "openvswitch/match.h" -#include "classifier-private.h" - -static void -test_flow_hash(const struct flow *flow) -{ - uint32_t hash = flow_hash_5tuple(flow, 0); - hash = flow_hash_symmetric_l4(flow, 0); - hash = flow_hash_symmetric_l2(flow, 0); - hash = flow_hash_symmetric_l3l4(flow, 0, NULL); - hash = flow_hash_symmetric_l3(flow, 0); - hash = flow_hash_fields(flow, NX_HASH_FIELDS_ETH_SRC, hash); - hash = flow_hash_fields(flow, NX_HASH_FIELDS_SYMMETRIC_L4, hash); - hash = flow_hash_fields(flow, NX_HASH_FIELDS_SYMMETRIC_L3L4, hash); - hash = flow_hash_fields(flow, NX_HASH_FIELDS_SYMMETRIC_L3L4_UDP, hash); - hash = flow_hash_fields(flow, NX_HASH_FIELDS_NW_SRC, hash); - hash = flow_hash_fields(flow, NX_HASH_FIELDS_NW_DST, hash); - hash = flow_hash_fields(flow, NX_HASH_FIELDS_SYMMETRIC_L3, hash); - ignore(hash); -} - -static void -test_flow_mask(const struct flow *flow) -{ - struct flow_wildcards catchall; - - flow_wildcards_init_catchall(&catchall); - flow_mask_hash_fields(flow, &catchall, NX_HASH_FIELDS_ETH_SRC); - flow_mask_hash_fields(flow, &catchall, NX_HASH_FIELDS_SYMMETRIC_L4); - flow_mask_hash_fields(flow, &catchall, NX_HASH_FIELDS_SYMMETRIC_L3L4); - flow_mask_hash_fields(flow, &catchall, NX_HASH_FIELDS_SYMMETRIC_L3L4_UDP); - flow_mask_hash_fields(flow, &catchall, NX_HASH_FIELDS_NW_SRC); - flow_mask_hash_fields(flow, &catchall, NX_HASH_FIELDS_NW_DST); - flow_mask_hash_fields(flow, &catchall, NX_HASH_FIELDS_SYMMETRIC_L3); -} - -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); - - /* Extract flowmap. */ - struct flowmap fmap; - flow_wc_map(&flow, &fmap); - - /* Parse TCP flags. */ - if (dp_packet_size(&packet) >= ETH_HEADER_LEN) { - uint16_t tcp_flags = parse_tcp_flags(&packet); - ignore(tcp_flags); - } - - /* Parse TCP flags. */ - if (dp_packet_size(&packet) >= ETH_HEADER_LEN) { - uint16_t tcp_flags = parse_tcp_flags(&packet); - ignore(tcp_flags); - } - - /* Count headers. */ - int count = flow_count_vlan_headers(&flow); - ignore(count); - - /* Extract metadata. */ - struct match flow_metadata; - flow_get_metadata(&flow, &flow_metadata); - - /* Hashing functions. */ - test_flow_hash(&flow); - - /* Masking functions. */ - test_flow_mask(&flow); - - /* Convert flow to match. */ - struct match match; - match_wc_init(&match, &flow); - - struct ofp10_match ext_match; - ofputil_match_to_ofp10_match(&match, &ext_match); - - /* Print match and packet. */ - ofp_print_packet(stdout, dp_packet_data(&packet), dp_packet_size(&packet), - htonl(PT_ETH)); - ovs_hex_dump(stdout, dp_packet_data(&packet), dp_packet_size(&packet), 0, - true); - match_print(&match, NULL); - - ovs_hex_dump(stdout, &ext_match, sizeof ext_match, 0, false); - - return 0; -} diff --git a/tests/oss-fuzz/fuzzer.h b/tests/oss-fuzz/fuzzer.h deleted file mode 100644 index f87ae59e9..000000000 --- a/tests/oss-fuzz/fuzzer.h +++ /dev/null @@ -1,9 +0,0 @@ -#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 deleted file mode 100644 index e39e04a0d..000000000 --- a/tests/oss-fuzz/json_parser_target.c +++ /dev/null @@ -1,42 +0,0 @@ -#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/miniflow_target.c b/tests/oss-fuzz/miniflow_target.c deleted file mode 100644 index 800375d63..000000000 --- a/tests/oss-fuzz/miniflow_target.c +++ /dev/null @@ -1,365 +0,0 @@ -#include <config.h> -#include "classifier.h" -#include "fuzzer.h" -#include "dp-packet.h" -#include "flow.h" -#include "openvswitch/ofp-match.h" -#include "openvswitch/ofp-print.h" -#include "openvswitch/match.h" -#include "classifier-private.h" -#include "util.h" - -static void -shuffle_u32s(uint32_t *p, size_t n) -{ - for (; n > 1; n--, p++) { - uint32_t *q = &p[random_range(n)]; - uint32_t tmp = *p; - *p = *q; - *q = tmp; - } -} - -/* Returns a copy of 'src'. The caller must eventually free the returned - * miniflow with free(). */ -static struct miniflow * -miniflow_clone__(const struct miniflow *src) -{ - struct miniflow *dst; - size_t data_size; - - data_size = miniflow_alloc(&dst, 1, src); - miniflow_clone(dst, src, data_size / sizeof(uint64_t)); - return dst; -} - -/* Returns a hash value for 'flow', given 'basis'. */ -static inline uint32_t -miniflow_hash__(const struct miniflow *flow, uint32_t basis) -{ - const uint64_t *p = miniflow_get_values(flow); - size_t n_values = miniflow_n_values(flow); - struct flowmap hash_map = FLOWMAP_EMPTY_INITIALIZER; - uint32_t hash = basis; - size_t idx; - - FLOWMAP_FOR_EACH_INDEX (idx, flow->map) { - uint64_t value = *p++; - - if (value) { - hash = hash_add64(hash, value); - flowmap_set(&hash_map, idx, 1); - } - } - map_t map; - FLOWMAP_FOR_EACH_MAP (map, hash_map) { - hash = hash_add64(hash, map); - } - - return hash_finish(hash, n_values); -} - -static uint32_t -random_value(void) -{ - static const uint32_t values_[] = - { 0xffffffff, 0xaaaaaaaa, 0x55555555, 0x80000000, - 0x00000001, 0xface0000, 0x00d00d1e, 0xdeadbeef }; - - return values_[random_range(ARRAY_SIZE(values_))]; -} - -static bool -choose(unsigned int n, unsigned int *idxp) -{ - if (*idxp < n) { - return true; - } else { - *idxp -= n; - return false; - } -} - -#define FLOW_U32S (FLOW_U64S * 2) - -static bool -init_consecutive_values(int n_consecutive, struct flow *flow, - unsigned int *idxp) -{ - uint32_t *flow_u32 = (uint32_t *) flow; - - if (choose(FLOW_U32S - n_consecutive + 1, idxp)) { - int i; - - for (i = 0; i < n_consecutive; i++) { - flow_u32[i + *idxp] = random_value(); - } - return true; - } else { - return false; - } -} - -static bool -next_random_flow(struct flow *flow, unsigned int idx) -{ - uint32_t *flow_u32 = (uint32_t *) flow; - - memset(flow, 0, sizeof *flow); - - /* Empty flow. */ - if (choose(1, &idx)) { - return true; - } - - /* All flows with a small number of consecutive nonzero values. */ - for (int i = 1; i <= 4; i++) { - if (init_consecutive_values(i, flow, &idx)) { - return true; - } - } - - /* All flows with a large number of consecutive nonzero values. */ - for (int i = FLOW_U32S - 4; i <= FLOW_U32S; i++) { - if (init_consecutive_values(i, flow, &idx)) { - return true; - } - } - - /* All flows with exactly two nonconsecutive nonzero values. */ - if (choose((FLOW_U32S - 1) * (FLOW_U32S - 2) / 2, &idx)) { - int ofs1; - - for (ofs1 = 0; ofs1 < FLOW_U32S - 2; ofs1++) { - int ofs2; - - for (ofs2 = ofs1 + 2; ofs2 < FLOW_U32S; ofs2++) { - if (choose(1, &idx)) { - flow_u32[ofs1] = random_value(); - flow_u32[ofs2] = random_value(); - return true; - } - } - } - OVS_NOT_REACHED(); - } - - /* 16 randomly chosen flows with N >= 3 nonzero values. */ - if (choose(16 * (FLOW_U32S - 4), &idx)) { - int n = idx / 16 + 3; - - for (int i = 0; i < n; i++) { - flow_u32[i] = random_value(); - } - shuffle_u32s(flow_u32, FLOW_U32S); - - return true; - } - - return false; -} - -static void -any_random_flow(struct flow *flow) -{ - static unsigned int max; - if (!max) { - while (next_random_flow(flow, max)) { - max++; - } - } - - next_random_flow(flow, random_range(max)); -} - -static void -toggle_masked_flow_bits(struct flow *flow, const struct flow_wildcards *mask) -{ - const uint32_t *mask_u32 = (const uint32_t *) &mask->masks; - uint32_t *flow_u32 = (uint32_t *) flow; - int i; - - for (i = 0; i < FLOW_U32S; i++) { - if (mask_u32[i] != 0) { - uint32_t bit; - - do { - bit = 1u << random_range(32); - } while (!(bit & mask_u32[i])); - flow_u32[i] ^= bit; - } - } -} - -static void -wildcard_extra_bits(struct flow_wildcards *mask) -{ - uint32_t *mask_u32 = (uint32_t *) &mask->masks; - int i; - - for (i = 0; i < FLOW_U32S; i++) { - if (mask_u32[i] != 0) { - uint32_t bit; - - do { - bit = 1u << random_range(32); - } while (!(bit & mask_u32[i])); - mask_u32[i] &= ~bit; - } - } -} - -static void -test_miniflow(struct flow *flow) -{ - struct miniflow *miniflow, *miniflow2, *miniflow3; - struct flow flow2, flow3; - struct flow_wildcards mask; - struct minimask *minimask; - int i; - - const uint64_t *flow_u64 = (const uint64_t *) flow; - - /* Convert flow to miniflow. */ - miniflow = miniflow_create(flow); - - /* Obtain miniflow hash. */ - uint32_t hash = miniflow_hash_5tuple(miniflow, 0); - ignore(hash); - - /* Check that the flow equals its miniflow. */ - for (i = 0; i < FLOW_MAX_VLAN_HEADERS; i++) { - ovs_assert(miniflow_get_vid(miniflow, i) == - vlan_tci_to_vid(flow->vlans[i].tci)); - } - for (i = 0; i < FLOW_U64S; i++) { - ovs_assert(miniflow_get(miniflow, i) == flow_u64[i]); - } - - /* Check that the miniflow equals itself. */ - ovs_assert(miniflow_equal(miniflow, miniflow)); - - /* Convert miniflow back to flow and verify that it's the same. */ - miniflow_expand(miniflow, &flow2); - ovs_assert(flow_equal(flow, &flow2)); - /* Check that copying a miniflow works properly. */ - miniflow2 = miniflow_clone__(miniflow); - ovs_assert(miniflow_equal(miniflow, miniflow2)); - ovs_assert(miniflow_hash__(miniflow, 0) == miniflow_hash__(miniflow2, 0)); - miniflow_expand(miniflow2, &flow3); - ovs_assert(flow_equal(flow, &flow3)); - - /* Check that masked matches work as expected for identical flows and - * miniflows. */ - do { - next_random_flow(&mask.masks, 1); - } while (flow_wildcards_is_catchall(&mask)); - minimask = minimask_create(&mask); - ovs_assert(minimask_is_catchall(minimask) - == flow_wildcards_is_catchall(&mask)); - ovs_assert(miniflow_equal_in_minimask(miniflow, miniflow2, minimask)); - ovs_assert(miniflow_equal_flow_in_minimask(miniflow, &flow2, minimask)); - ovs_assert(miniflow_hash_in_minimask(miniflow, minimask, 0x12345678) == - flow_hash_in_minimask(flow, minimask, 0x12345678)); - ovs_assert(minimask_hash(minimask, 0) == - miniflow_hash__(&minimask->masks, 0)); - - /* Check that masked matches work as expected for differing flows and - * miniflows. */ - toggle_masked_flow_bits(&flow2, &mask); - ovs_assert(!miniflow_equal_flow_in_minimask(miniflow, &flow2, minimask)); - miniflow3 = miniflow_create(&flow2); - ovs_assert(!miniflow_equal_in_minimask(miniflow, miniflow3, minimask)); - - free(miniflow); - free(miniflow2); - free(miniflow3); - free(minimask); -} - -static void -test_minimask_has_extra(struct flow *flow) -{ - struct flow_wildcards catchall; - struct minimask *minicatchall; - - flow_wildcards_init_catchall(&catchall); - minicatchall = minimask_create(&catchall); - ovs_assert(minimask_is_catchall(minicatchall)); - - struct flow_wildcards mask; - struct minimask *minimask; - - mask.masks = *flow; - minimask = minimask_create(&mask); - ovs_assert(!minimask_has_extra(minimask, minimask)); - ovs_assert(minimask_has_extra(minicatchall, minimask) - == !minimask_is_catchall(minimask)); - if (!minimask_is_catchall(minimask)) { - struct minimask *minimask2; - - wildcard_extra_bits(&mask); - minimask2 = minimask_create(&mask); - ovs_assert(minimask_has_extra(minimask2, minimask)); - ovs_assert(!minimask_has_extra(minimask, minimask2)); - free(minimask2); - } - - free(minimask); - free(minicatchall); -} - -static void -test_minimask_combine(struct flow *flow) -{ - struct flow_wildcards catchall; - struct minimask *minicatchall; - - flow_wildcards_init_catchall(&catchall); - minicatchall = minimask_create(&catchall); - ovs_assert(minimask_is_catchall(minicatchall)); - - struct minimask *minimask, *minimask2; - struct flow_wildcards mask, mask2, combined, combined2; - struct { - struct minimask minicombined; - uint64_t storage[FLOW_U64S]; - } m; - struct flow flow2; - - mask.masks = *flow; - minimask = minimask_create(&mask); - - minimask_combine(&m.minicombined, minimask, minicatchall, m.storage); - ovs_assert(minimask_is_catchall(&m.minicombined)); - - any_random_flow(&flow2); - mask2.masks = flow2; - minimask2 = minimask_create(&mask2); - - minimask_combine(&m.minicombined, minimask, minimask2, m.storage); - flow_wildcards_and(&combined, &mask, &mask2); - minimask_expand(&m.minicombined, &combined2); - ovs_assert(flow_wildcards_equal(&combined, &combined2)); - - free(minimask); - free(minimask2); - - free(minicatchall); -} - -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); - - /* Do miniflow tests. */ - test_miniflow(&flow); - test_minimask_has_extra(&flow); - test_minimask_combine(&flow); - - return 0; -} diff --git a/tests/oss-fuzz/odp_target.c b/tests/oss-fuzz/odp_target.c deleted file mode 100644 index ae61cdca3..000000000 --- a/tests/oss-fuzz/odp_target.c +++ /dev/null @@ -1,149 +0,0 @@ -#include <config.h> -#include "fuzzer.h" -#undef NDEBUG -#include "odp-util.h" -#include <stdio.h> -#include "openvswitch/dynamic-string.h" -#include "flow.h" -#include "openvswitch/match.h" -#include "openvswitch/ofpbuf.h" -#include "util.h" -#include "openvswitch/ofp-flow.h" -#include "openvswitch/vlog.h" - -static int -parse_keys(bool wc_keys, const char *in) -{ - int exit_code = 0; - - enum odp_key_fitness fitness; - struct ofpbuf odp_key; - struct ofpbuf odp_mask; - struct flow flow; - struct ds out; - int error; - - /* Convert string to OVS DP key. */ - ofpbuf_init(&odp_key, 0); - ofpbuf_init(&odp_mask, 0); - error = odp_flow_from_string(in, NULL, - &odp_key, &odp_mask, NULL); - if (error) { - printf("odp_flow_from_string: error\n"); - goto next; - } - - if (!wc_keys) { - struct odp_flow_key_parms odp_parms = { - .flow = &flow, - .support = { - .recirc = true, - .ct_state = true, - .ct_zone = true, - .ct_mark = true, - .ct_label = true, - .max_vlan_headers = SIZE_MAX, - }, - }; - - /* Convert odp_key to flow. */ - fitness = odp_flow_key_to_flow(odp_key.data, odp_key.size, - &flow, NULL); - switch (fitness) { - case ODP_FIT_PERFECT: - break; - - case ODP_FIT_TOO_LITTLE: - printf("ODP_FIT_TOO_LITTLE: "); - break; - - case ODP_FIT_TOO_MUCH: - printf("ODP_FIT_TOO_MUCH: "); - break; - - case ODP_FIT_ERROR: - printf("odp_flow_key_to_flow: error\n"); - goto next; - } - /* Convert cls_rule back to odp_key. */ - ofpbuf_uninit(&odp_key); - ofpbuf_init(&odp_key, 0); - odp_flow_key_from_flow(&odp_parms, &odp_key); - - if (odp_key.size > ODPUTIL_FLOW_KEY_BYTES) { - printf ("too long: %"PRIu32" > %d\n", - odp_key.size, ODPUTIL_FLOW_KEY_BYTES); - exit_code = 1; - } - } - - /* Convert odp_key to string. */ - ds_init(&out); - if (wc_keys) { - odp_flow_format(odp_key.data, odp_key.size, - odp_mask.data, odp_mask.size, NULL, &out, false); - } else { - odp_flow_key_format(odp_key.data, odp_key.size, &out); - } - puts(ds_cstr(&out)); - ds_destroy(&out); - -next: - ofpbuf_uninit(&odp_key); - ofpbuf_uninit(&odp_mask); - - return exit_code; -} - -static int -parse_actions(const char *in) -{ - struct ofpbuf odp_actions; - struct ds out; - int error; - - /* Convert string to OVS DP actions. */ - ofpbuf_init(&odp_actions, 0); - error = odp_actions_from_string(in, NULL, &odp_actions); - if (error) { - printf("odp_actions_from_string: error\n"); - goto next; - } - - /* Convert odp_actions back to string. */ - ds_init(&out); - format_odp_actions(&out, odp_actions.data, odp_actions.size, NULL); - puts(ds_cstr(&out)); - ds_destroy(&out); - -next: - ofpbuf_uninit(&odp_actions); - return 0; -} - -int -LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) -{ - /* Bail out if we cannot construct at least a 1 char string. */ - const char *input = (const char *) data; - if (size < 2 || input[size - 1] != '\0' || strchr(input, '\n') || - strlen(input) != size - 1) { - return 0; - } - - /* Disable logging to avoid write to disk. */ - static bool isInit = false; - if (!isInit) { - vlog_set_verbosity("off"); - isInit = true; - } - - /* Parse keys and wc keys. */ - parse_keys(false, input); - parse_keys(true, input); - - /* Parse actions. */ - parse_actions(input); - - return 0; -} diff --git a/tests/oss-fuzz/ofctl_parse_target.c b/tests/oss-fuzz/ofctl_parse_target.c deleted file mode 100644 index b4db52f7e..000000000 --- a/tests/oss-fuzz/ofctl_parse_target.c +++ /dev/null @@ -1,113 +0,0 @@ -#include <config.h> -#include "fuzzer.h" -#include "openvswitch/ofp-flow.h" -#include "ofp-version-opt.h" -#include "ofproto/ofproto.h" -#include "openflow/openflow.h" -#include "openvswitch/ofpbuf.h" -#include "openvswitch/vlog.h" -#include "util.h" - -static void -ofctl_parse_flows__(struct ofputil_flow_mod *fms, size_t n_fms, - enum ofputil_protocol usable_protocols) -{ - enum ofputil_protocol protocol = 0; - char *usable_s; - size_t i; - - usable_s = ofputil_protocols_to_string(usable_protocols); - printf("usable protocols: %s\n", usable_s); - free(usable_s); - - if (!(usable_protocols & OFPUTIL_P_ANY)) { - printf("no usable protocol\n"); - goto free; - } - for (i = 0; i < sizeof(enum ofputil_protocol) * CHAR_BIT; i++) { - protocol = 1u << i; - if (protocol & usable_protocols & OFPUTIL_P_ANY) { - break; - } - } - ovs_assert(is_pow2(protocol)); - - printf("chosen protocol: %s\n", ofputil_protocol_to_string(protocol)); - - for (i = 0; i < n_fms; i++) { - struct ofputil_flow_mod *fm = &fms[i]; - struct ofpbuf *msg; - - msg = ofputil_encode_flow_mod(fm, protocol); - ofpbuf_delete(msg); - } - -free: - for (i = 0; i < n_fms; i++) { - struct ofputil_flow_mod *fm = &fms[i]; - free(CONST_CAST(struct ofpact *, fm->ofpacts)); - minimatch_destroy(&fm->match); - } -} - -/* "parse-flow FLOW": parses the argument as a flow (like add-flow) and prints - * it back to stdout. */ -static void -ofctl_parse_flow(const char *input, int command) -{ - enum ofputil_protocol usable_protocols; - struct ofputil_flow_mod fm; - char *error; - - error = parse_ofp_flow_mod_str(&fm, input, NULL, NULL, - command, &usable_protocols); - if (error) { - printf("Error encountered: %s\n", error); - free(error); - } else { - ofctl_parse_flows__(&fm, 1, usable_protocols); - } -} - -int -LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) -{ - /* Bail out if we cannot construct at least a 1 char string. - * Reserve 1 byte to decide flow mod command. - * - * Here's the structure of data we expect - * |--Byte 1--|--Byte 2--|...|--Byte (size-1)--| - * - * where, - * - * Byte 1: Used to decide which ofp flow mod command to test - * Bytes 2--(size-1): The C string that is actually passed to - * ofctl_parse_flow() test API. - * - * This means that the fuzzed input is actually a C string of - * length = (size -2) with the terminal byte being the NUL - * character. Moreover, this string is expected to not contain - * a new-line character. - */ - const char *stream = (const char *) data; - if (size < 3 || stream[size - 1] != '\0' || strchr(&stream[1], '\n') || - strlen(&stream[1]) != size - 2) { - return 0; - } - - /* Disable logging to avoid write to disk. */ - static bool isInit = false; - if (!isInit) { - vlog_set_verbosity("off"); - isInit = true; - } - - /* Decide test parameters using first byte of fuzzed input. */ - int command = (stream[0] % OFPFC_DELETE_STRICT) + 1; - - /* Fuzz extended match parsing. */ - const char *input = &stream[1]; - ofctl_parse_flow(input, command); - - return 0; -} diff --git a/tests/oss-fuzz/ofp_print_target.c b/tests/oss-fuzz/ofp_print_target.c deleted file mode 100644 index 126f2623f..000000000 --- a/tests/oss-fuzz/ofp_print_target.c +++ /dev/null @@ -1,47 +0,0 @@ -#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; -}