When parsing flow Netlink messages we currently have arrays to hold the attribute pointers for both values and masks. This results in a large stack, which some compilers warn about. It's not actually necessary to have both arrays at the same time, so we can collapse this to a single array.
Reported-by: Pravin B Shelar <pshe...@nicira.com> Signed-off-by: Jesse Gross <je...@nicira.com> --- datapath/flow.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/datapath/flow.c b/datapath/flow.c index 79d5d49..3a7bc9b 100644 --- a/datapath/flow.c +++ b/datapath/flow.c @@ -1479,7 +1479,6 @@ int ovs_match_from_nlattrs(struct sw_flow_match *match, const struct nlattr *mask) { const struct nlattr *a[OVS_KEY_ATTR_MAX + 1]; - const struct nlattr *m[OVS_KEY_ATTR_MAX + 1]; const struct nlattr *encap; u64 key_attrs = 0; u64 mask_attrs = 0; @@ -1516,19 +1515,19 @@ int ovs_match_from_nlattrs(struct sw_flow_match *match, return err; if (mask) { - err = parse_flow_mask_nlattrs(mask, m, &mask_attrs); + err = parse_flow_mask_nlattrs(mask, a, &mask_attrs); if (err) return err; if ((mask_attrs & 1ULL << OVS_KEY_ATTR_ENCAP) && encap_valid) { __be16 eth_type = 0; - if (m[OVS_KEY_ATTR_ETHERTYPE]) - eth_type = nla_get_be16(m[OVS_KEY_ATTR_ETHERTYPE]); + if (a[OVS_KEY_ATTR_ETHERTYPE]) + eth_type = nla_get_be16(a[OVS_KEY_ATTR_ETHERTYPE]); if (eth_type == htons(0xffff)) { mask_attrs &= ~(1ULL << OVS_KEY_ATTR_ETHERTYPE); - encap = m[OVS_KEY_ATTR_ENCAP]; - err = parse_flow_mask_nlattrs(encap, m, &mask_attrs); + encap = a[OVS_KEY_ATTR_ENCAP]; + err = parse_flow_mask_nlattrs(encap, a, &mask_attrs); } else err = -EINVAL; @@ -1536,7 +1535,7 @@ int ovs_match_from_nlattrs(struct sw_flow_match *match, return err; } - err = ovs_key_from_nlattrs(match, mask_attrs, m, true); + err = ovs_key_from_nlattrs(match, mask_attrs, a, true); if (err) return err; } else { -- 1.8.1.2 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev