lkml.org 
[lkml]   [2018]   [Mar]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 63/65] bpf: add schedule points in percpu arrays management
    Date
    4.9-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Eric Dumazet <edumazet@google.com>

    [ upstream commit 32fff239de37ef226d5b66329dd133f64d63b22d ]

    syszbot managed to trigger RCU detected stalls in
    bpf_array_free_percpu()

    It takes time to allocate a huge percpu map, but even more time to free
    it.

    Since we run in process context, use cond_resched() to yield cpu if
    needed.

    Fixes: a10423b87a7e ("bpf: introduce BPF_MAP_TYPE_PERCPU_ARRAY map")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reported-by: syzbot <syzkaller@googlegroups.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    kernel/bpf/arraymap.c | 5 ++++-
    1 file changed, 4 insertions(+), 1 deletion(-)

    --- a/kernel/bpf/arraymap.c
    +++ b/kernel/bpf/arraymap.c
    @@ -20,8 +20,10 @@ static void bpf_array_free_percpu(struct
    {
    int i;

    - for (i = 0; i < array->map.max_entries; i++)
    + for (i = 0; i < array->map.max_entries; i++) {
    free_percpu(array->pptrs[i]);
    + cond_resched();
    + }
    }

    static int bpf_array_alloc_percpu(struct bpf_array *array)
    @@ -37,6 +39,7 @@ static int bpf_array_alloc_percpu(struct
    return -ENOMEM;
    }
    array->pptrs[i] = ptr;
    + cond_resched();
    }

    return 0;

    \
     
     \ /
      Last update: 2018-03-10 01:29    [W:5.684 / U:0.104 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site