Skip to content

Commit f3549a6

Browse files
qsnshreeya-patel98
authored andcommitted
net: gro: don't merge zcopy skbs
jira VULN- cve commit-author Sabrina Dubroca <sd@queasysnail.net> commit 4db79a3 upstream-diff | skb_gro_receive() can currently copy frags between the source and GRO skb, without checking the zerocopy status, and in particular the SKBFL_MANAGED_FRAG_REFS flag. When SKBFL_MANAGED_FRAG_REFS is set, the skb doesn't hold a reference on the pages in shinfo->frags. Appending those frags to another skb's frags without fixing up the page refcount can lead to UAF. When either the last skb in the GRO chain (the one we would append frags to) or the source skb is zerocopy, don't merge the skbs. Fixes: 753f1ca ("net: introduce managed frags infrastructure") Reported-by: Huzaifa Sidhpurwala <huzaifas@redhat.com> Signed-off-by: Sabrina Dubroca <sd@queasysnail.net> Reviewed-by: Willem de Bruijn <willemb@google.com> Link: https://patch.msgid.link/c3b7f906bbfcbdfd7b4fa9d6c18a438870df85be.1779307748.git.sd@queasysnail.net Signed-off-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: Shreeya Patel <spatel@ciq.com>
1 parent a444d36 commit f3549a6

1 file changed

Lines changed: 3 additions & 0 deletions

File tree

net/core/gro.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,9 @@ int skb_gro_receive(struct sk_buff *p, struct sk_buff *skb)
108108
if (p->pp_recycle != skb->pp_recycle)
109109
return -ETOOMANYREFS;
110110

111+
if (skb_zcopy(p) || skb_zcopy(skb))
112+
return -ETOOMANYREFS;
113+
111114
if (unlikely(p->len + len >= netif_get_gro_max_size(p->dev, p) ||
112115
NAPI_GRO_CB(skb)->flush))
113116
return -E2BIG;

0 commit comments

Comments
 (0)