On Wed, Feb 24, 2016 at 9:29 AM, Alexander Duyck <[email protected]> wrote: > This patch corrects the logic for the IPv4 parsing so that it is consistent > with how we handle IPv6. Specifically if we do not have the flow key > indicating we want the addresses we still may need to take a look at the IP > fragmentation bits and to see if we should stop after we have recognized > the L3 header. > > Fixes: 807e165dc44f ("flow_dissector: Add control/reporting of fragmentation") > Signed-off-by: Alexander Duyck <[email protected]>
Acked-by: Tom Herbert <[email protected]> > --- > net/core/flow_dissector.c | 17 +++++++++-------- > 1 file changed, 9 insertions(+), 8 deletions(-) > > diff --git a/net/core/flow_dissector.c b/net/core/flow_dissector.c > index 12e700332010..1f88f8280280 100644 > --- a/net/core/flow_dissector.c > +++ b/net/core/flow_dissector.c > @@ -178,15 +178,16 @@ ip: > > ip_proto = iph->protocol; > > - if (!dissector_uses_key(flow_dissector, > - FLOW_DISSECTOR_KEY_IPV4_ADDRS)) > - break; > + if (dissector_uses_key(flow_dissector, > + FLOW_DISSECTOR_KEY_IPV4_ADDRS)) { > + key_addrs = skb_flow_dissector_target(flow_dissector, > + > FLOW_DISSECTOR_KEY_IPV4_ADDRS, > + > target_container); > > - key_addrs = skb_flow_dissector_target(flow_dissector, > - FLOW_DISSECTOR_KEY_IPV4_ADDRS, > target_container); > - memcpy(&key_addrs->v4addrs, &iph->saddr, > - sizeof(key_addrs->v4addrs)); > - key_control->addr_type = FLOW_DISSECTOR_KEY_IPV4_ADDRS; > + memcpy(&key_addrs->v4addrs, &iph->saddr, > + sizeof(key_addrs->v4addrs)); > + key_control->addr_type = > FLOW_DISSECTOR_KEY_IPV4_ADDRS; > + } > > if (ip_is_fragment(iph)) { > key_control->flags |= FLOW_DIS_IS_FRAGMENT; >
