FAILED: patch "[PATCH] esp: Fix possible buffer overflow in ESP transformation" failed to apply to 5.10-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 5.10-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From ebe48d368e97d007bfeb76fcb065d6cfc4c96645 Mon Sep 17 00:00:00 2001
From: Steffen Klassert <[email protected]>
Date: Mon, 7 Mar 2022 13:11:39 +0100
Subject: [PATCH] esp: Fix possible buffer overflow in ESP transformation
The maximum message size that can be send is bigger than the maximum site that skb_page_frag_refill can allocate. So it is possible to write beyond the allocated buffer.
Fix this by doing a fallback to COW in that case.
v2:
Avoid get get_order() costs as suggested by Linus Torvalds.
include/net/esp.h +2 -0
@@ -4,6 +4,8 @@#include <linux/skbuff.h> +#define ESP_SKB_FRAG_MAXSIZE (PAGE_SIZE << SKB_FRAG_PAGE_ORDER) +struct ip_esp_hdr ;static inline struct ip_esp_hdr *ip_esp_hdr (const struct sk_buff *skb)
net/ipv4/esp4.c +5 -0
@@ -446,6 +446,7 @@ int esp_output_head(struct xfrm_state *x, struct sk_buff *skb, struct esp_info *struct page *page;struct sk_buff *trailer;int tailen = esp->tailen; +unsigned int allocsz;/* this is non-NULL only with TCP/UDP Encapsulation */ if (x->encap) {
@@ -455,6 +456,10 @@ int esp_output_head(struct xfrm_state *x, struct sk_buff *skb, struct esp_info *return err; } + allocsz =ALIGN (skb->data_len + tailen,L1_CACHE_BYTES ); +if (allocsz >ESP_SKB_FRAG_MAXSIZE ) + goto cow; +if (!skb_cloned (skb)) {if (tailen <=skb_tailroom (skb)) { nfrags =1 ;
net/ipv6/esp6.c +5 -0
@@ -482,6 +482,7 @@ int esp6_output_head(struct xfrm_state *x, struct sk_buff *skb, struct esp_infostruct page *page;struct sk_buff *trailer;int tailen = esp->tailen; +unsigned int allocsz;if (x->encap) {int err =esp6_output_encap (x, skb, esp);
@@ -490,6 +491,10 @@ int esp6_output_head(struct xfrm_state *x, struct sk_buff *skb, struct esp_inforeturn err; } + allocsz =ALIGN (skb->data_len + tailen,L1_CACHE_BYTES ); +if (allocsz >ESP_SKB_FRAG_MAXSIZE ) + goto cow; +if (!skb_cloned (skb)) {if (tailen <=skb_tailroom (skb)) { nfrags =1 ;
PATCH 1/1 esp: Fix possible buffer overflow in ESP transformation
From: Steffen Klassert <[email protected]>
Plese apply this on 5.10.y stable as well as it fixes the following syzbot issues:
Here is a working patch.
---8<---
The maximum message size that can be send is bigger than the maximum site that skb_page_frag_refill can allocate. So it is possible to write beyond the allocated buffer.
Fix this by doing a fallback to COW in that case.
--- include/net/esp.h | 2 ++ include/net/sock.h | 1 + net/ipv4/esp4.c | 5 +++++ net/ipv6/esp6.c | 5 +++++ 4 files changed, 13 insertions(+)
include/net/esp.h +2 -0
@@ -4,6 +4,8 @@#include <linux/skbuff.h> +#define ESP_SKB_FRAG_MAXSIZE (PAGE_SIZE << SKB_FRAG_PAGE_ORDER) +struct ip_esp_hdr ;static inline struct ip_esp_hdr *ip_esp_hdr (const struct sk_buff *skb)
include/net/sock.h +1 -0
@@ -2688,6 +2688,7 @@ extern int sysctl_optmem_max;extern __u32 sysctl_wmem_default;extern __u32 sysctl_rmem_default; +#define SKB_FRAG_PAGE_ORDER get_order(32768)DECLARE_STATIC_KEY_FALSE (net_high_order_alloc_disable_key);static inline int sk_get_wmem0 (const struct sock *sk,const struct proto *proto)
net/ipv4/esp4.c +5 -0
@@ -448,6 +448,7 @@ int esp_output_head(struct xfrm_state *x, struct sk_buff *skb, struct esp_info *struct page *page;struct sk_buff *trailer;int tailen = esp->tailen; +unsigned int allocsz;/* this is non-NULL only with TCP/UDP Encapsulation */ if (x->encap) {
@@ -457,6 +458,10 @@ int esp_output_head(struct xfrm_state *x, struct sk_buff *skb, struct esp_info *return err; } + allocsz =ALIGN (skb->data_len + tailen,L1_CACHE_BYTES ); +if (allocsz >ESP_SKB_FRAG_MAXSIZE ) + goto cow; +if (!skb_cloned (skb)) {if (tailen <=skb_tailroom (skb)) { nfrags =1 ;
net/ipv6/esp6.c +5 -0
@@ -483,6 +483,7 @@ int esp6_output_head(struct xfrm_state *x, struct sk_buff *skb, struct esp_infostruct page *page;struct sk_buff *trailer;int tailen = esp->tailen; +unsigned int allocsz;if (x->encap) {int err =esp6_output_encap (x, skb, esp);
@@ -491,6 +492,10 @@ int esp6_output_head(struct xfrm_state *x, struct sk_buff *skb, struct esp_inforeturn err; } + allocsz =ALIGN (skb->data_len + tailen,L1_CACHE_BYTES ); +if (allocsz >ESP_SKB_FRAG_MAXSIZE ) + goto cow; +if (!skb_cloned (skb)) {if (tailen <=skb_tailroom (skb)) { nfrags =1 ;
Signature · 1 line
2.35.1
Greg KH
maintainerRe: [PATCH 5.10] esp: Fix possible buffer overflow in ESP transformation
Quoted 23 lines · Tadeusz Struk
From: Steffen Klassert <[email protected]>
Plese apply this on 5.10.y stable as well as it fixes the following syzbot issues:
Here is a working patch.
---8<---The maximum message size that can be send is bigger than the maximum site that
skb_page_frag_refillcan allocate. So it is possible to write beyond the allocated buffer.Fix this by doing a fallback to COW in that case.
Fixes cac2661c53f3 ("esp4: Avoid skb_cow_data whenever possible")Fixes 03e2a30f6a27 ("esp6: Avoid skb_cow_data whenever possible")Reported-by valis <[email protected]>Reported-by <[email protected]>Signed-off-by Steffen Klassert <[email protected]>Signed-off-by Tadeusz Struk <[email protected]>
Quoted 6 lines
--- include/net/esp.h | 2 ++ include/net/sock.h | 1 + net/ipv4/esp4.c | 5 +++++ net/ipv6/esp6.c | 5 +++++ 4 files changed, 13 insertions(+)
What is the git commit id of this commit in Linus's tree?
thanks,
greg k-h
Re: [PATCH 5.10] esp: Fix possible buffer overflow in ESP transformation
Quoted 31 lines · Greg KH
Quoted 23 lines · Tadeusz Struk
From: Steffen Klassert <[email protected]>
Plese apply this on 5.10.y stable as well as it fixes the following syzbot issues:
Here is a working patch.
---8<---The maximum message size that can be send is bigger than the maximum site that
skb_page_frag_refillcan allocate. So it is possible to write beyond the allocated buffer.Fix this by doing a fallback to COW in that case.
Fixes cac2661c53f3 ("esp4: Avoid skb_cow_data whenever possible")Fixes 03e2a30f6a27 ("esp6: Avoid skb_cow_data whenever possible")Reported-by valis <[email protected]>Reported-by <[email protected]>Signed-off-by Steffen Klassert <[email protected]>Signed-off-by Tadeusz Struk <[email protected]>Quoted 6 lines
--- include/net/esp.h | 2 ++ include/net/sock.h | 1 + net/ipv4/esp4.c | 5 +++++ net/ipv6/esp6.c | 5 +++++ 4 files changed, 13 insertions(+)
Quoted 2 lines
What is the git commit id of this commit in Linus's tree?
It's this one:
ebe48d368e97 ("esp: Fix possible buffer overflow in ESP transformation")
Sorry I forgot to include it in the backport.
Signature · 2 lines
Thanks, Tadeusz
Greg KH
maintainerRe: [PATCH 5.10] esp: Fix possible buffer overflow in ESP transformation
Quoted 32 lines · Tadeusz Struk
Quoted 31 lines · Greg KH
Quoted 29 lines · Tadeusz Struk
From: Steffen Klassert <[email protected]>
Plese apply this on 5.10.y stable as well as it fixes the following syzbot issues:
Here is a working patch.
---8<---The maximum message size that can be send is bigger than the maximum site that
skb_page_frag_refillcan allocate. So it is possible to write beyond the allocated buffer.Fix this by doing a fallback to COW in that case.
Fixes cac2661c53f3 ("esp4: Avoid skb_cow_data whenever possible")Fixes 03e2a30f6a27 ("esp6: Avoid skb_cow_data whenever possible")Reported-by valis <[email protected]>Reported-by <[email protected]>Signed-off-by Steffen Klassert <[email protected]>Signed-off-by Tadeusz Struk <[email protected]>--- include/net/esp.h | 2 ++ include/net/sock.h | 1 + net/ipv4/esp4.c | 5 +++++ net/ipv6/esp6.c | 5 +++++ 4 files changed, 13 insertions(+)
Quoted 8 lines
Quoted 2 lines
What is the git commit id of this commit in Linus's tree?
It's this one:
ebe48d368e97("esp: Fix possible buffer overflow in ESP transformation")Sorry I forgot to include it in the backport.
Now queued up, thanks.
gre gk-h