esp: limit skb_page_frag_refill use to a single page
authorSabrina Dubroca <sd@queasysnail.net>
Wed, 13 Apr 2022 08:10:50 +0000 (10:10 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 27 Apr 2022 12:38:52 +0000 (14:38 +0200)
commita583f2f3c8788bffd7fd7baeb76bd6d80543d7ea
tree4eeabc0dc52cbdd1a820b5553dc810e5994381de
parent76900a136b1a603add1f39fe4cf0df5cbe9a10d9
esp: limit skb_page_frag_refill use to a single page

[ Upstream commit 5bd8baab087dff657e05387aee802e70304cc813 ]

Commit ebe48d368e97 ("esp: Fix possible buffer overflow in ESP
transformation") tried to fix skb_page_frag_refill usage in ESP by
capping allocsize to 32k, but that doesn't completely solve the issue,
as skb_page_frag_refill may return a single page. If that happens, we
will write out of bounds, despite the check introduced in the previous
patch.

This patch forces COW in cases where we would end up calling
skb_page_frag_refill with a size larger than a page (first in
esp_output_head with tailen, then in esp_output_tail with
skb->data_len).

Fixes: cac2661c53f3 ("esp4: Avoid skb_cow_data whenever possible")
Fixes: 03e2a30f6a27 ("esp6: Avoid skb_cow_data whenever possible")
Signed-off-by: Sabrina Dubroca <sd@queasysnail.net>
Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
include/net/esp.h
net/ipv4/esp4.c
net/ipv6/esp6.c