Skip to content

Commit

Permalink
xfrm: esp6: fix the location of the transport header with encapsulation
Browse files Browse the repository at this point in the history
commit 17175d1 ("xfrm: esp6: fix encapsulation header offset
computation") changed esp6_input_done2 to correctly find the size of
the IPv6 header that precedes the TCP/UDP encapsulation header, but
didn't adjust the final call to skb_set_transport_header, which I
assumed was correct in using skb_network_header_len.

Xiumei Mu reported that when we create xfrm states that include port
numbers in the selector, traffic from the user sockets is dropped. It
turns out that we get a state mismatch in __xfrm_policy_check, because
we end up trying to compare the encapsulation header's ports with the
selector that's based on user traffic ports.

Fixes: 0146dca ("xfrm: add support for UDPv6 encapsulation of ESP")
Fixes: 26333c3 ("xfrm: add IPv6 support for espintcp")
Reported-by: Xiumei Mu <[email protected]>
Signed-off-by: Sabrina Dubroca <[email protected]>
Signed-off-by: Steffen Klassert <[email protected]>
  • Loading branch information
qsn authored and klassert committed Jul 28, 2020
1 parent 37bd224 commit d5dba13
Showing 1 changed file with 1 addition and 0 deletions.
1 change: 1 addition & 0 deletions net/ipv6/esp6.c
Original file line number Diff line number Diff line change
Expand Up @@ -815,6 +815,7 @@ int esp6_input_done2(struct sk_buff *skb, int err)
offset = ipv6_skip_exthdr(skb, offset, &nexthdr, &frag_off);
uh = (void *)(skb->data + offset);
th = (void *)(skb->data + offset);
hdr_len += offset;

switch (x->encap->encap_type) {
case TCP_ENCAP_ESPINTCP:
Expand Down

0 comments on commit d5dba13

Please sign in to comment.