On Sat, Aug 24, 2019 at 9:58 AM Justin Pettit <jpet...@ovn.org> wrote: > > Only the first fragment in a datagram contains the L4 headers. When the > Open vSwitch module parses a packet, it always sets the IP protocol > field in the key, but can only set the L4 fields on the first fragment. > The original behavior would not clear the L4 portion of the key, so > garbage values would be sent in the key for "later" fragments. This > patch clears the L4 fields in that circumstance to prevent sending those > garbage values as part of the upcall. > > Signed-off-by: Justin Pettit <jpet...@ovn.org> > --- > net/openvswitch/flow.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/net/openvswitch/flow.c b/net/openvswitch/flow.c > index bc89e16e0505..0fb2cec08523 100644 > --- a/net/openvswitch/flow.c > +++ b/net/openvswitch/flow.c > @@ -623,6 +623,7 @@ static int key_extract(struct sk_buff *skb, struct > sw_flow_key *key) > offset = nh->frag_off & htons(IP_OFFSET); > if (offset) { > key->ip.frag = OVS_FRAG_TYPE_LATER; > + memset(&key->tp, 0, sizeof(key->tp)); > return 0; > } > if (nh->frag_off & htons(IP_MF) || > @@ -740,8 +741,10 @@ static int key_extract(struct sk_buff *skb, struct > sw_flow_key *key) > return error; > } > > - if (key->ip.frag == OVS_FRAG_TYPE_LATER) > + if (key->ip.frag == OVS_FRAG_TYPE_LATER) { > + memset(&key->tp, 0, sizeof(key->tp)); > return 0; > + } > if (skb_shinfo(skb)->gso_type & SKB_GSO_UDP) > key->ip.frag = OVS_FRAG_TYPE_FIRST; >
Looks good to me. Acked-by: Pravin B Shelar <pshe...@ovn.org> Thanks, Pravin.