]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blame - releases/3.6.7/net-fix-secpath-kmemleak.patch
Linux 3.6.7
[thirdparty/kernel/stable-queue.git] / releases / 3.6.7 / net-fix-secpath-kmemleak.patch
CommitLineData
28cd9a8f
GKH
1From aa0dfee5c6f808526f4ca425343a4f95a7c5e6ad Mon Sep 17 00:00:00 2001
2From: Eric Dumazet <edumazet@google.com>
3Date: Mon, 22 Oct 2012 09:03:40 +0000
4Subject: net: fix secpath kmemleak
5
6
7From: Eric Dumazet <edumazet@google.com>
8
9[ Upstream commit 3d861f661006606bf159fd6bd973e83dbf21d0f9 ]
10
11Mike Kazantsev found 3.5 kernels and beyond were leaking memory,
12and tracked the faulty commit to a1c7fff7e18f59e ("net:
13netdev_alloc_skb() use build_skb()")
14
15While this commit seems fine, it uncovered a bug introduced
16in commit bad43ca8325 ("net: introduce skb_try_coalesce()), in function
17kfree_skb_partial()"):
18
19If head is stolen, we free the sk_buff,
20without removing references on secpath (skb->sp).
21
22So IPsec + IP defrag/reassembly (using skb coalescing), or
23TCP coalescing could leak secpath objects.
24
25Fix this bug by calling skb_release_head_state(skb) to properly
26release all possible references to linked objects.
27
28Reported-by: Mike Kazantsev <mk.fraggod@gmail.com>
29Signed-off-by: Eric Dumazet <edumazet@google.com>
30Bisected-by: Mike Kazantsev <mk.fraggod@gmail.com>
31Tested-by: Mike Kazantsev <mk.fraggod@gmail.com>
32Signed-off-by: David S. Miller <davem@davemloft.net>
33Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
34---
35 net/core/skbuff.c | 6 ++++--
36 1 file changed, 4 insertions(+), 2 deletions(-)
37
38--- a/net/core/skbuff.c
39+++ b/net/core/skbuff.c
40@@ -3384,10 +3384,12 @@ EXPORT_SYMBOL(__skb_warn_lro_forwarding)
41
42 void kfree_skb_partial(struct sk_buff *skb, bool head_stolen)
43 {
44- if (head_stolen)
45+ if (head_stolen) {
46+ skb_release_head_state(skb);
47 kmem_cache_free(skbuff_head_cache, skb);
48- else
49+ } else {
50 __kfree_skb(skb);
51+ }
52 }
53 EXPORT_SYMBOL(kfree_skb_partial);
54