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 <bsh...@gmail.com> wrote: > From: Bhargava Shastry <bsh...@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 <bsh...@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 d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev