summaryrefslogtreecommitdiffstats
path: root/recipes-kernel/linux/linux-cavium/CVE-2017-6345.patch
diff options
context:
space:
mode:
Diffstat (limited to 'recipes-kernel/linux/linux-cavium/CVE-2017-6345.patch')
-rw-r--r--recipes-kernel/linux/linux-cavium/CVE-2017-6345.patch65
1 files changed, 65 insertions, 0 deletions
diff --git a/recipes-kernel/linux/linux-cavium/CVE-2017-6345.patch b/recipes-kernel/linux/linux-cavium/CVE-2017-6345.patch
new file mode 100644
index 0000000..b0ac548
--- /dev/null
+++ b/recipes-kernel/linux/linux-cavium/CVE-2017-6345.patch
@@ -0,0 +1,65 @@
1From 42b52783a59cc706c71cdc7096edce4a6f086fd3 Mon Sep 17 00:00:00 2001
2From: Eric Dumazet <edumazet@google.com>
3Date: Sun, 12 Feb 2017 14:03:52 -0800
4Subject: [PATCH] net/llc: avoid BUG_ON() in skb_orphan()
5
6[ Upstream commit 8b74d439e1697110c5e5c600643e823eb1dd0762 ]
7
8It seems nobody used LLC since linux-3.12.
9
10Fortunately fuzzers like syzkaller still know how to run this code,
11otherwise it would be no fun.
12
13Setting skb->sk without skb->destructor leads to all kinds of
14bugs, we now prefer to be very strict about it.
15
16Ideally here we would use skb_set_owner() but this helper does not exist yet,
17only CAN seems to have a private helper for that.
18
19CVE: CVE-2017-6345
20Upstream-Status: Backport [from kernel.org longterm 4.9.52]
21
22Fixes: 376c7311bdb6 ("net: add a temporary sanity check in skb_orphan()")
23Signed-off-by: Eric Dumazet <edumazet@google.com>
24Reported-by: Andrey Konovalov <andreyknvl@google.com>
25Signed-off-by: David S. Miller <davem@davemloft.net>
26Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
27Signed-off-by: Sona Sarmadi <sona.sarmadi@enea.com>
28---
29 net/llc/llc_conn.c | 3 +++
30 net/llc/llc_sap.c | 3 +++
31 2 files changed, 6 insertions(+)
32
33diff --git a/net/llc/llc_conn.c b/net/llc/llc_conn.c
34index 3e821da..8bc5a1b 100644
35--- a/net/llc/llc_conn.c
36+++ b/net/llc/llc_conn.c
37@@ -821,7 +821,10 @@ void llc_conn_handler(struct llc_sap *sap, struct sk_buff *skb)
38 * another trick required to cope with how the PROCOM state
39 * machine works. -acme
40 */
41+ skb_orphan(skb);
42+ sock_hold(sk);
43 skb->sk = sk;
44+ skb->destructor = sock_efree;
45 }
46 if (!sock_owned_by_user(sk))
47 llc_conn_rcv(sk, skb);
48diff --git a/net/llc/llc_sap.c b/net/llc/llc_sap.c
49index d0e1e80..5404d0d 100644
50--- a/net/llc/llc_sap.c
51+++ b/net/llc/llc_sap.c
52@@ -290,7 +290,10 @@ static void llc_sap_rcv(struct llc_sap *sap, struct sk_buff *skb,
53
54 ev->type = LLC_SAP_EV_TYPE_PDU;
55 ev->reason = 0;
56+ skb_orphan(skb);
57+ sock_hold(sk);
58 skb->sk = sk;
59+ skb->destructor = sock_efree;
60 llc_sap_state_process(sap, skb);
61 }
62
63--
641.9.1
65