mirror of
https://github.com/torvalds/linux.git
synced 2024-11-26 22:21:42 +00:00
openvswitch: Fix IPv6 later frags parsing
The previous commitfa642f0883
("openvswitch: Derive IP protocol number for IPv6 later frags") introduces IP protocol number parsing for IPv6 later frags that can mess up the network header length calculation logic, i.e. nh_len < 0. However, the network header length calculation is mainly for deriving the transport layer header in the key extraction process which the later fragment does not apply. Therefore, this commit skips the network header length calculation to fix the issue. Reported-by: Chris Mi <chrism@mellanox.com> Reported-by: Greg Rose <gvrose8192@gmail.com> Fixes:fa642f0883
("openvswitch: Derive IP protocol number for IPv6 later frags") Signed-off-by: Yi-Hung Wei <yihung.wei@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
ba3e1847d6
commit
41e4e2cd75
@ -276,10 +276,12 @@ static int parse_ipv6hdr(struct sk_buff *skb, struct sw_flow_key *key)
|
||||
|
||||
nexthdr = ipv6_find_hdr(skb, &payload_ofs, -1, &frag_off, &flags);
|
||||
if (flags & IP6_FH_F_FRAG) {
|
||||
if (frag_off)
|
||||
if (frag_off) {
|
||||
key->ip.frag = OVS_FRAG_TYPE_LATER;
|
||||
else
|
||||
key->ip.frag = OVS_FRAG_TYPE_FIRST;
|
||||
key->ip.proto = nexthdr;
|
||||
return 0;
|
||||
}
|
||||
key->ip.frag = OVS_FRAG_TYPE_FIRST;
|
||||
} else {
|
||||
key->ip.frag = OVS_FRAG_TYPE_NONE;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user