summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPratyush Yadav <ptyadav@amazon.de>2023-05-22 17:30:20 +0200
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2023-05-30 12:38:38 +0100
commit82501f1ead557cbee1c2467654ec109a80334d22 (patch)
treebc0a3f8681d671833e2c0ecf57520828b5c9887a
parent3ed6a312ac1e7278f92b1b3d95377b335ae21e89 (diff)
downloadlinux-stable-82501f1ead557cbee1c2467654ec109a80334d22.tar.gz
linux-stable-82501f1ead557cbee1c2467654ec109a80334d22.tar.bz2
linux-stable-82501f1ead557cbee1c2467654ec109a80334d22.zip
net: fix skb leak in __skb_tstamp_tx()
commit 8a02fb71d7192ff1a9a47c9d937624966c6e09af upstream. Commit 50749f2dd685 ("tcp/udp: Fix memleaks of sk and zerocopy skbs with TX timestamp.") added a call to skb_orphan_frags_rx() to fix leaks with zerocopy skbs. But it ended up adding a leak of its own. When skb_orphan_frags_rx() fails, the function just returns, leaking the skb it just cloned. Free it before returning. This bug was discovered and resolved using Coverity Static Analysis Security Testing (SAST) by Synopsys, Inc. Fixes: 50749f2dd685 ("tcp/udp: Fix memleaks of sk and zerocopy skbs with TX timestamp.") Signed-off-by: Pratyush Yadav <ptyadav@amazon.de> Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com> Reviewed-by: Willem de Bruijn <willemb@google.com> Link: https://lore.kernel.org/r/20230522153020.32422-1-ptyadav@amazon.de Signed-off-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--net/core/skbuff.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/net/core/skbuff.c b/net/core/skbuff.c
index 71827da47274..6b6309ec7b1b 100644
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
@@ -4421,8 +4421,10 @@ void __skb_tstamp_tx(struct sk_buff *orig_skb,
} else {
skb = skb_clone(orig_skb, GFP_ATOMIC);
- if (skb_orphan_frags_rx(skb, GFP_ATOMIC))
+ if (skb_orphan_frags_rx(skb, GFP_ATOMIC)) {
+ kfree_skb(skb);
return;
+ }
}
if (!skb)
return;