[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20210702001123.728035-2-john.fastabend@gmail.com>
Date: Thu, 1 Jul 2021 17:11:22 -0700
From: John Fastabend <john.fastabend@...il.com>
To: ast@...nel.org, daniel@...earbox.net, andriin@...com
Cc: bpf@...r.kernel.org, netdev@...r.kernel.org,
john.fastabend@...il.com
Subject: [PATCH v2 bpf 1/2] bpf, sockmap: fix potential msg memory leak
If skb_linearize is needed and fails we could leak a msg on the error
handling. To fix ensure we kfree the msg block before returning error.
Found during code review.
Fixes: 4363023d2668e ("bpf, sockmap: Avoid failures from skb_to_sgvec when skb has frag_list")
Signed-off-by: John Fastabend <john.fastabend@...il.com>
---
net/core/skmsg.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/net/core/skmsg.c b/net/core/skmsg.c
index 9b6160a191f8..22603289c2b2 100644
--- a/net/core/skmsg.c
+++ b/net/core/skmsg.c
@@ -505,8 +505,10 @@ static int sk_psock_skb_ingress_enqueue(struct sk_buff *skb,
* drop the skb. We need to linearize the skb so that the mapping
* in skb_to_sgvec can not error.
*/
- if (skb_linearize(skb))
+ if (skb_linearize(skb)) {
+ kfree(msg);
return -EAGAIN;
+ }
num_sge = skb_to_sgvec(skb, msg->sg.data, 0, skb->len);
if (unlikely(num_sge < 0)) {
kfree(msg);
--
2.25.1
Powered by blists - more mailing lists