On Thu, Aug 2, 2012 at 7:39 PM, Jesse Gross <je...@nicira.com> wrote: > When installing a flow with an action to set a particular field we > need to validate that the packets that are part of the flow actually > contain that header. With IP we use zeroed addresses and with TCP/UDP > the check is for zeroed ports. This check is overly broad and can catch > packets like DHCP requests that have a zero source address in a > legitimate header. This changes the check to look for a zeroed protocol > number for IP or for both ports be zero for TCP/UDP before considering > the header to not exist. > > Bug #12769 Looks good. Acked-by: Pravin B Shelar <pshe...@nicira.com>
> > Reported-by: Ethan Jackson <et...@nicira.com> > Signed-off-by: Jesse Gross <je...@nicira.com> > --- > datapath/datapath.c | 6 +++--- > lib/odp-util.c | 2 +- > 2 files changed, 4 insertions(+), 4 deletions(-) > > diff --git a/datapath/datapath.c b/datapath/datapath.c > index dc2cfad..7a7dc4c 100644 > --- a/datapath/datapath.c > +++ b/datapath/datapath.c > @@ -561,10 +561,10 @@ static int validate_sample(const struct nlattr *attr, > static int validate_tp_port(const struct sw_flow_key *flow_key) > { > if (flow_key->eth.type == htons(ETH_P_IP)) { > - if (flow_key->ipv4.tp.src && flow_key->ipv4.tp.dst) > + if (flow_key->ipv4.tp.src || flow_key->ipv4.tp.dst) > return 0; > } else if (flow_key->eth.type == htons(ETH_P_IPV6)) { > - if (flow_key->ipv6.tp.src && flow_key->ipv6.tp.dst) > + if (flow_key->ipv6.tp.src || flow_key->ipv6.tp.dst) > return 0; > } > > @@ -597,7 +597,7 @@ static int validate_set(const struct nlattr *a, > if (flow_key->eth.type != htons(ETH_P_IP)) > return -EINVAL; > > - if (!flow_key->ipv4.addr.src || !flow_key->ipv4.addr.dst) > + if (!flow_key->ip.proto) > return -EINVAL; > > ipv4_key = nla_data(ovs_key); > diff --git a/lib/odp-util.c b/lib/odp-util.c > index 7caab09..901dac3 100644 > --- a/lib/odp-util.c > +++ b/lib/odp-util.c > @@ -1976,7 +1976,7 @@ static void > commit_set_port_action(const struct flow *flow, struct flow *base, > struct ofpbuf *odp_actions) > { > - if (!base->tp_src || !base->tp_dst) { > + if (!base->tp_src && !base->tp_dst) { > return; > } > > -- > 1.7.9.5 > > _______________________________________________ > dev mailing list > dev@openvswitch.org > http://openvswitch.org/mailman/listinfo/dev _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev