]> git.baikalelectronics.ru Git - kernel.git/commit
xfrm: esp6: fix the location of the transport header with encapsulation
authorSabrina Dubroca <sd@queasysnail.net>
Mon, 27 Jul 2020 14:03:47 +0000 (16:03 +0200)
committerSteffen Klassert <steffen.klassert@secunet.com>
Tue, 28 Jul 2020 05:57:23 +0000 (07:57 +0200)
commite5b1b6fb47c8c31207db136c1cc1bc04d8efbe2a
tree40cdcec327da46d657fe6953886ddab61ff373c6
parent506de5e5823de7fdf5f55735051e076b77165ac5
xfrm: esp6: fix the location of the transport header with encapsulation

commit 5c8ab8510d8a ("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: 654d11700501 ("xfrm: add support for UDPv6 encapsulation of ESP")
Fixes: beaf74bfad15 ("xfrm: add IPv6 support for espintcp")
Reported-by: Xiumei Mu <xmu@redhat.com>
Signed-off-by: Sabrina Dubroca <sd@queasysnail.net>
Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
net/ipv6/esp6.c