• Roman Gushchin's avatar
    bpf: allocate local storage buffers using GFP_ATOMIC · 569a933b
    Roman Gushchin authored
    Naresh reported an issue with the non-atomic memory allocation of
    cgroup local storage buffers:
    
    [   73.047526] BUG: sleeping function called from invalid context at
    /srv/oe/build/tmp-rpb-glibc/work-shared/intel-corei7-64/kernel-source/mm/slab.h:421
    [   73.060915] in_atomic(): 1, irqs_disabled(): 0, pid: 3157, name: test_cgroup_sto
    [   73.068342] INFO: lockdep is turned off.
    [   73.072293] CPU: 2 PID: 3157 Comm: test_cgroup_sto Not tainted
    4.20.0-rc2-next-20181113 #1
    [   73.080548] Hardware name: Supermicro SYS-5019S-ML/X11SSH-F, BIOS
    2.0b 07/27/2017
    [   73.088018] Call Trace:
    [   73.090463]  dump_stack+0x70/0xa5
    [   73.093783]  ___might_sleep+0x152/0x240
    [   73.097619]  __might_sleep+0x4a/0x80
    [   73.101191]  __kmalloc_node+0x1cf/0x2f0
    [   73.105031]  ? cgroup_storage_update_elem+0x46/0x90
    [   73.109909]  cgroup_storage_update_elem+0x46/0x90
    
    cgroup_storage_update_elem() (as well as other update map update
    callbacks) is called with disabled preemption, so GFP_ATOMIC
    allocation should be used: e.g. alloc_htab_elem() in hashtab.c.
    Reported-by: default avatarNaresh Kamboju <naresh.kamboju@linaro.org>
    Tested-by: default avatarNaresh Kamboju <naresh.kamboju@linaro.org>
    Signed-off-by: default avatarRoman Gushchin <guro@fb.com>
    Cc: Alexei Starovoitov <ast@kernel.org>
    Cc: Daniel Borkmann <daniel@iogearbox.net>
    Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    569a933b
local_storage.c 11.6 KB