From 50666c2d4f8d04c29a09db278b6dbf08a76cf55f Mon Sep 17 00:00:00 2001 From: Open vSwitch CI Date: May 27 2021 21:00:37 +0000 Subject: Import openvswitch2.15-2.15.0-23 from Fast DataPath --- diff --git a/SOURCES/openvswitch-2.15.0.patch b/SOURCES/openvswitch-2.15.0.patch index a3b4f27..20efd7b 100644 --- a/SOURCES/openvswitch-2.15.0.patch +++ b/SOURCES/openvswitch-2.15.0.patch @@ -18480,7 +18480,7 @@ index 4381c618f1..650e67ab30 100644 meter->max_delta_t = band_max_delta_t; } diff --git a/lib/dpif-netlink.c b/lib/dpif-netlink.c -index ceb56c6851..50520f8c06 100644 +index ceb56c6851..73d5608a81 100644 --- a/lib/dpif-netlink.c +++ b/lib/dpif-netlink.c @@ -2061,6 +2061,7 @@ parse_flow_put(struct dpif_netlink *dpif, struct dpif_flow_put *put) @@ -18499,6 +18499,65 @@ index ceb56c6851..50520f8c06 100644 err = netdev_flow_put(dev, &match, CONST_CAST(struct nlattr *, put->actions), put->actions_len, +@@ -2923,8 +2923,6 @@ dpif_netlink_ct_set_limits(struct dpif *dpif OVS_UNUSED, + const uint32_t *default_limits, + const struct ovs_list *zone_limits) + { +- struct ovs_zone_limit req_zone_limit; +- + if (ovs_ct_limit_family < 0) { + return EOPNOTSUPP; + } +@@ -2941,8 +2939,10 @@ dpif_netlink_ct_set_limits(struct dpif *dpif OVS_UNUSED, + size_t opt_offset; + opt_offset = nl_msg_start_nested(request, OVS_CT_LIMIT_ATTR_ZONE_LIMIT); + if (default_limits) { +- req_zone_limit.zone_id = OVS_ZONE_LIMIT_DEFAULT_ZONE; +- req_zone_limit.limit = *default_limits; ++ struct ovs_zone_limit req_zone_limit = { ++ .zone_id = OVS_ZONE_LIMIT_DEFAULT_ZONE, ++ .limit = *default_limits, ++ }; + nl_msg_put(request, &req_zone_limit, sizeof req_zone_limit); + } + +@@ -2950,8 +2950,10 @@ dpif_netlink_ct_set_limits(struct dpif *dpif OVS_UNUSED, + struct ct_dpif_zone_limit *zone_limit; + + LIST_FOR_EACH (zone_limit, node, zone_limits) { +- req_zone_limit.zone_id = zone_limit->zone; +- req_zone_limit.limit = zone_limit->limit; ++ struct ovs_zone_limit req_zone_limit = { ++ .zone_id = zone_limit->zone, ++ .limit = zone_limit->limit, ++ }; + nl_msg_put(request, &req_zone_limit, sizeof req_zone_limit); + } + } +@@ -3035,8 +3037,9 @@ dpif_netlink_ct_get_limits(struct dpif *dpif OVS_UNUSED, + size_t opt_offset = nl_msg_start_nested(request, + OVS_CT_LIMIT_ATTR_ZONE_LIMIT); + +- struct ovs_zone_limit req_zone_limit; +- req_zone_limit.zone_id = OVS_ZONE_LIMIT_DEFAULT_ZONE; ++ struct ovs_zone_limit req_zone_limit = { ++ .zone_id = OVS_ZONE_LIMIT_DEFAULT_ZONE, ++ }; + nl_msg_put(request, &req_zone_limit, sizeof req_zone_limit); + + struct ct_dpif_zone_limit *zone_limit; +@@ -3086,8 +3089,9 @@ dpif_netlink_ct_del_limits(struct dpif *dpif OVS_UNUSED, + + struct ct_dpif_zone_limit *zone_limit; + LIST_FOR_EACH (zone_limit, node, zone_limits) { +- struct ovs_zone_limit req_zone_limit; +- req_zone_limit.zone_id = zone_limit->zone; ++ struct ovs_zone_limit req_zone_limit = { ++ .zone_id = zone_limit->zone, ++ }; + nl_msg_put(request, &req_zone_limit, sizeof req_zone_limit); + } + nl_msg_end_nested(request, opt_offset); diff --git a/lib/dpif.c b/lib/dpif.c index 56d0b4a654..26e8bfb7db 100644 --- a/lib/dpif.c @@ -18525,10 +18584,21 @@ index ecda896c78..f9728e6739 100644 /* Input, but possibly modified as a side effect of execution. */ diff --git a/lib/netdev-linux.c b/lib/netdev-linux.c -index 6be23dbeed..f87a200756 100644 +index 6be23dbeed..ee97354db6 100644 --- a/lib/netdev-linux.c +++ b/lib/netdev-linux.c -@@ -1255,21 +1255,21 @@ netdev_linux_batch_rxq_recv_sock(struct netdev_rxq_linux *rx, int mtu, +@@ -672,7 +672,9 @@ netdev_linux_update_lag(struct rtnetlink_change *change) + uint32_t block_id; + int error = 0; + +- if_indextoname(change->master_ifindex, master_name); ++ if (!if_indextoname(change->master_ifindex, master_name)) { ++ return; ++ } + master_netdev = netdev_from_name(master_name); + if (!master_netdev) { + return; +@@ -1255,21 +1257,21 @@ netdev_linux_batch_rxq_recv_sock(struct netdev_rxq_linux *rx, int mtu, * aux_buf is allocated so that it can be prepended to TSO buffer. */ std_len = virtio_net_hdr_size + VLAN_ETH_HEADER_LEN + mtu; for (i = 0; i < NETDEV_MAX_BURST; i++) { @@ -18564,7 +18634,7 @@ index 6be23dbeed..f87a200756 100644 } do { -@@ -2572,7 +2572,7 @@ exit: +@@ -2572,7 +2574,7 @@ exit: static struct tc_police tc_matchall_fill_police(uint32_t kbits_rate, uint32_t kbits_burst) { @@ -18907,10 +18977,87 @@ index a8598d52af..e1199d1da6 100644 if ((!tnl_type || !strcmp(tnl_type, "gtpu")) && diff --git a/lib/ofp-actions.c b/lib/ofp-actions.c -index e2e829772a..0342a228b7 100644 +index e2e829772a..6fb3da5074 100644 --- a/lib/ofp-actions.c +++ b/lib/ofp-actions.c -@@ -4431,6 +4431,7 @@ decode_NXAST_RAW_ENCAP(const struct nx_action_encap *nae, +@@ -3777,11 +3777,22 @@ parse_SET_MPLS_LABEL(char *arg, const struct ofpact_parse_params *pp) + { + struct ofpact_mpls_label *mpls_label + = ofpact_put_SET_MPLS_LABEL(pp->ofpacts); ++ uint32_t label; ++ char *error; ++ + if (*arg == '\0') { + return xstrdup("set_mpls_label: expected label."); + } + +- mpls_label->label = htonl(atoi(arg)); ++ error = str_to_u32(arg, &label); ++ if (error) { ++ return error; ++ } ++ ++ if (label & ~0xfffff) { ++ return xasprintf("%s: not a valid MPLS label", arg); ++ } ++ mpls_label->label = htonl(label); + return NULL; + } + +@@ -3837,12 +3848,22 @@ static char * OVS_WARN_UNUSED_RESULT + parse_SET_MPLS_TC(char *arg, const struct ofpact_parse_params *pp) + { + struct ofpact_mpls_tc *mpls_tc = ofpact_put_SET_MPLS_TC(pp->ofpacts); ++ uint8_t tc; ++ char *error; + + if (*arg == '\0') { + return xstrdup("set_mpls_tc: expected tc."); + } + +- mpls_tc->tc = atoi(arg); ++ error = str_to_u8(arg, "MPLS TC", &tc); ++ if (error) { ++ return error; ++ } ++ ++ if (tc & ~7) { ++ return xasprintf("%s: not a valid MPLS TC", arg); ++ } ++ mpls_tc->tc = tc; + return NULL; + } + +@@ -3850,7 +3871,7 @@ static void + format_SET_MPLS_TC(const struct ofpact_mpls_tc *a, + const struct ofpact_format_params *fp) + { +- ds_put_format(fp->s, "%sset_mpls_ttl(%s%"PRIu8"%s)%s", ++ ds_put_format(fp->s, "%sset_mpls_tc(%s%"PRIu8"%s)%s", + colors.paren, colors.end, a->tc, + colors.paren, colors.end); + } +@@ -3889,12 +3910,18 @@ static char * OVS_WARN_UNUSED_RESULT + parse_SET_MPLS_TTL(char *arg, const struct ofpact_parse_params *pp) + { + struct ofpact_mpls_ttl *mpls_ttl = ofpact_put_SET_MPLS_TTL(pp->ofpacts); ++ uint8_t ttl; ++ char *error; + + if (*arg == '\0') { + return xstrdup("set_mpls_ttl: expected ttl."); + } + +- mpls_ttl->ttl = atoi(arg); ++ error = str_to_u8(arg, "MPLS TTL", &ttl); ++ if (error) { ++ return error; ++ } ++ mpls_ttl->ttl = ttl; + return NULL; + } + +@@ -4431,6 +4458,7 @@ decode_NXAST_RAW_ENCAP(const struct nx_action_encap *nae, { struct ofpact_encap *encap; const struct ofp_ed_prop_header *ofp_prop; @@ -18918,7 +19065,7 @@ index e2e829772a..0342a228b7 100644 size_t props_len; uint16_t n_props = 0; int err; -@@ -4458,6 +4459,7 @@ decode_NXAST_RAW_ENCAP(const struct nx_action_encap *nae, +@@ -4458,6 +4486,7 @@ decode_NXAST_RAW_ENCAP(const struct nx_action_encap *nae, } n_props++; } @@ -19344,6 +19491,19 @@ index 5fae46adfc..ccf97266c0 100644 cmap_destroy(&udpif->ukeys[i].cmap); ovs_mutex_destroy(&udpif->ukeys[i].mutex); } +diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c +index fd0b2fdea0..47db9bb57d 100644 +--- a/ofproto/ofproto-dpif.c ++++ b/ofproto/ofproto-dpif.c +@@ -5413,6 +5413,8 @@ ct_add_timeout_policy_to_dpif(struct dpif *dpif, + struct ct_dpif_timeout_policy cdtp; + struct simap_node *node; + ++ memset(&cdtp, 0, sizeof cdtp); ++ + cdtp.id = ct_tp->tp_id; + SIMAP_FOR_EACH (node, &ct_tp->tp) { + ct_dpif_set_timeout_policy_attr_by_name(&cdtp, node->name, node->data); diff --git a/ovsdb/ovsdb-client.c b/ovsdb/ovsdb-client.c index 72756eb1f2..ba28e36d78 100644 --- a/ovsdb/ovsdb-client.c @@ -19901,6 +20061,70 @@ index e3173fb88f..2347c690ef 100644 diff --git a/tests/fuzz-regression/ofp_print_fuzzer-6540965472632832 b/tests/fuzz-regression/ofp_print_fuzzer-6540965472632832 new file mode 100644 index 0000000000..e69de29bb2 +diff --git a/tests/ofp-actions.at b/tests/ofp-actions.at +index 199db8ed0f..59093c03c9 100644 +--- a/tests/ofp-actions.at ++++ b/tests/ofp-actions.at +@@ -1007,12 +1007,21 @@ bad_action 'dec_ttl(,)' 'dec_ttl_cnt_ids: expected at least one controller id.' + # set_mpls_label + bad_action 'set_mpls_label' 'set_mpls_label: expected label.' + ++# set_mpls_label oversized ++bad_action 'set_mpls_label(0x100000)' '0x100000: not a valid MPLS label' ++ + # set_mpls_tc + bad_action 'set_mpls_tc' 'set_mpls_tc: expected tc.' + ++# set_mpls_tc oversized ++bad_action 'set_mpls_tc(8)' '8: not a valid MPLS TC' ++ + # set_mpls_ttl + bad_action 'set_mpls_ttl' 'set_mpls_ttl: expected ttl.' + ++# set_mpls_ttl oversized ++bad_action 'set_mpls_ttl(256)' 'invalid MPLS TTL "256"' ++ + # fin_timeout + bad_action 'fin_timeout(foo=bar)' "invalid key 'foo' in 'fin_timeout' argument" + +diff --git a/tests/ovs-ofctl.at b/tests/ovs-ofctl.at +index 5ddca67e71..604f15c2d1 100644 +--- a/tests/ovs-ofctl.at ++++ b/tests/ovs-ofctl.at +@@ -449,6 +449,16 @@ actions=output(max_len=100,port=123) + actions=output(port=100,max_len=123) + actions=output(port=LOCAL,max_len=123) + actions=output(port=IN_PORT,max_len=123) ++mpls,mpls_label=1,actions=set_mpls_label(0) ++mpls,mpls_label=1,actions=set_mpls_label(10) ++mpls,mpls_label=1,actions=set_mpls_label(0x10) ++mpls,mpls_label=1,actions=set_mpls_label(0xfffff) ++mpls,mpls_tc=1,actions=set_mpls_tc(0) ++mpls,mpls_tc=1,actions=set_mpls_tc(3) ++mpls,mpls_tc=1,actions=set_mpls_tc(7) ++mpls,mpls_ttl=1,actions=set_mpls_ttl(0) ++mpls,mpls_ttl=1,actions=set_mpls_ttl(200) ++mpls,mpls_ttl=1,actions=set_mpls_ttl(255) + ]]) + + AT_CHECK([ovs-ofctl parse-flows flows.txt +@@ -506,6 +516,16 @@ NXT_FLOW_MOD: ADD table:255 actions=output(port=123,max_len=100) + NXT_FLOW_MOD: ADD table:255 actions=output(port=100,max_len=123) + NXT_FLOW_MOD: ADD table:255 actions=output(port=LOCAL,max_len=123) + NXT_FLOW_MOD: ADD table:255 actions=output(port=IN_PORT,max_len=123) ++NXT_FLOW_MOD: ADD table:255 mpls,mpls_label=1 actions=set_mpls_label(0) ++NXT_FLOW_MOD: ADD table:255 mpls,mpls_label=1 actions=set_mpls_label(10) ++NXT_FLOW_MOD: ADD table:255 mpls,mpls_label=1 actions=set_mpls_label(16) ++NXT_FLOW_MOD: ADD table:255 mpls,mpls_label=1 actions=set_mpls_label(1048575) ++NXT_FLOW_MOD: ADD table:255 mpls,mpls_tc=1 actions=set_mpls_tc(0) ++NXT_FLOW_MOD: ADD table:255 mpls,mpls_tc=1 actions=set_mpls_tc(3) ++NXT_FLOW_MOD: ADD table:255 mpls,mpls_tc=1 actions=set_mpls_tc(7) ++NXT_FLOW_MOD: ADD table:255 mpls,mpls_ttl=1 actions=set_mpls_ttl(0) ++NXT_FLOW_MOD: ADD table:255 mpls,mpls_ttl=1 actions=set_mpls_ttl(200) ++NXT_FLOW_MOD: ADD table:255 mpls,mpls_ttl=1 actions=set_mpls_ttl(255) + ]]) + AT_CLEANUP + diff --git a/tests/ovs-vsctl.at b/tests/ovs-vsctl.at index c8babe3612..1f1fc3c79a 100644 --- a/tests/ovs-vsctl.at diff --git a/SPECS/openvswitch2.15.spec b/SPECS/openvswitch2.15.spec index beaa81f..83318ee 100644 --- a/SPECS/openvswitch2.15.spec +++ b/SPECS/openvswitch2.15.spec @@ -57,7 +57,7 @@ Summary: Open vSwitch Group: System Environment/Daemons daemon/database/utilities URL: http://www.openvswitch.org/ Version: 2.15.0 -Release: 22%{?dist} +Release: 23%{?dist} # Nearly all of openvswitch is ASL 2.0. The bugtool is LGPLv2+, and the # lib/sflow*.[ch] files are SISSL @@ -697,6 +697,15 @@ exit 0 %endif %changelog +* Thu May 27 2021 Open vSwitch CI - 2.15.0-23 +- Merging upstream branch-2.15 [RH gerrit: ba3ba16d42] + Commit list: + 8995d53112 dpif-netlink: Fix send of uninitialized memory in ct limit requests. + 0c056891c2 ofproto-dpif: Fix use of uninitialized attributes of timeout policy. + 121a67cad3 netdev-linux: Fix use of uninitialized LAG master name. + 5f27ff1cfa ofp_actions: Fix set_mpls_tc formatting. + + * Wed May 19 2021 Open vSwitch CI - 2.15.0-22 - Merging upstream branch-2.15 [RH gerrit: 8b6b82c2ed] Commit list: