mirror of
https://kernel.googlesource.com/pub/scm/linux/kernel/git/stable/linux-stable.git
synced 2025-10-05 01:10:56 +10:00
xfrm: Set transport header to fix UDP GRO handling
[ Upstream commit3ac9e29211
] The referenced commit replaced a call to __xfrm4|6_udp_encap_rcv() with a custom check for non-ESP markers. But what the called function also did was setting the transport header to the ESP header. The function that follows, esp4|6_gro_receive(), relies on that being set when it calls xfrm_parse_spi(). We have to set the full offset as the skb's head was not moved yet so adding just the UDP header length won't work. Fixes:e3fd057776
("xfrm: Fix UDP GRO handling for some corner cases") Signed-off-by: Tobias Brunner <tobias@strongswan.org> Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
085f24f0be
commit
07ab459024
@ -202,6 +202,9 @@ struct sk_buff *xfrm4_gro_udp_encap_rcv(struct sock *sk, struct list_head *head,
|
||||
if (len <= sizeof(struct ip_esp_hdr) || udpdata32[0] == 0)
|
||||
goto out;
|
||||
|
||||
/* set the transport header to ESP */
|
||||
skb_set_transport_header(skb, offset);
|
||||
|
||||
NAPI_GRO_CB(skb)->proto = IPPROTO_UDP;
|
||||
|
||||
pp = call_gro_receive(ops->callbacks.gro_receive, head, skb);
|
||||
|
@ -202,6 +202,9 @@ struct sk_buff *xfrm6_gro_udp_encap_rcv(struct sock *sk, struct list_head *head,
|
||||
if (len <= sizeof(struct ip_esp_hdr) || udpdata32[0] == 0)
|
||||
goto out;
|
||||
|
||||
/* set the transport header to ESP */
|
||||
skb_set_transport_header(skb, offset);
|
||||
|
||||
NAPI_GRO_CB(skb)->proto = IPPROTO_UDP;
|
||||
|
||||
pp = call_gro_receive(ops->callbacks.gro_receive, head, skb);
|
||||
|
Loading…
Reference in New Issue
Block a user