]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blame - releases/4.14.26/bpf-add-schedule-points-in-percpu-arrays-management.patch
Fixes for 5.10
[thirdparty/kernel/stable-queue.git] / releases / 4.14.26 / bpf-add-schedule-points-in-percpu-arrays-management.patch
CommitLineData
5351d7ec
GKH
1From foo@baz Fri Mar 9 14:18:36 PST 2018
2From: Daniel Borkmann <daniel@iogearbox.net>
3Date: Thu, 8 Mar 2018 13:14:45 +0100
4Subject: bpf: add schedule points in percpu arrays management
5To: gregkh@linuxfoundation.org
6Cc: ast@kernel.org, daniel@iogearbox.net, stable@vger.kernel.org, Eric Dumazet <edumazet@google.com>
7Message-ID: <498449c87b8c123b6ab6ffe2882a9b108473e256.1520504748.git.daniel@iogearbox.net>
8
9From: Eric Dumazet <edumazet@google.com>
10
11[ upstream commit 32fff239de37ef226d5b66329dd133f64d63b22d ]
12
13syszbot managed to trigger RCU detected stalls in
14bpf_array_free_percpu()
15
16It takes time to allocate a huge percpu map, but even more time to free
17it.
18
19Since we run in process context, use cond_resched() to yield cpu if
20needed.
21
22Fixes: a10423b87a7e ("bpf: introduce BPF_MAP_TYPE_PERCPU_ARRAY map")
23Signed-off-by: Eric Dumazet <edumazet@google.com>
24Reported-by: syzbot <syzkaller@googlegroups.com>
25Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
26Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
27---
28 kernel/bpf/arraymap.c | 5 ++++-
29 1 file changed, 4 insertions(+), 1 deletion(-)
30
31--- a/kernel/bpf/arraymap.c
32+++ b/kernel/bpf/arraymap.c
33@@ -23,8 +23,10 @@ static void bpf_array_free_percpu(struct
34 {
35 int i;
36
37- for (i = 0; i < array->map.max_entries; i++)
38+ for (i = 0; i < array->map.max_entries; i++) {
39 free_percpu(array->pptrs[i]);
40+ cond_resched();
41+ }
42 }
43
44 static int bpf_array_alloc_percpu(struct bpf_array *array)
45@@ -40,6 +42,7 @@ static int bpf_array_alloc_percpu(struct
46 return -ENOMEM;
47 }
48 array->pptrs[i] = ptr;
49+ cond_resched();
50 }
51
52 return 0;