Skip to content

Commit 46720c6

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 5b07720 commit 46720c6

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
@@ -109,6 +109,9 @@ int skb_gro_receive(struct sk_buff *p, struct sk_buff *skb)
109109
if (p->pp_recycle != skb->pp_recycle)
110110
return -ETOOMANYREFS;
111111

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

0 commit comments

Comments
 (0)