• Martin KaFai Lau's avatar
    bpf: bpf_sk_storage: Fix the missing uncharge in sk_omem_alloc · 55d49f75
    Martin KaFai Lau authored
    The commit c83597fa ("bpf: Refactor some inode/task/sk storage functions
    for reuse"), refactored the bpf_{sk,task,inode}_storage_free() into
    bpf_local_storage_unlink_nolock() which then later renamed to
    bpf_local_storage_destroy(). The commit accidentally passed the
    "bool uncharge_mem = false" argument to bpf_selem_unlink_storage_nolock()
    which then stopped the uncharge from happening to the sk->sk_omem_alloc.
    
    This missing uncharge only happens when the sk is going away (during
    __sk_destruct).
    
    This patch fixes it by always passing "uncharge_mem = true". It is a
    noop to the task/inode/cgroup storage because they do not have the
    map_local_storage_(un)charge enabled in the map_ops. A followup patch
    will be done in bpf-next to remove the uncharge_mem argument.
    
    A selftest is added in the next patch.
    
    Fixes: c83597fa ("bpf: Refactor some inode/task/sk storage functions for reuse")
    Signed-off-by: default avatarMartin KaFai Lau <martin.lau@kernel.org>
    Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    Link: https://lore.kernel.org/bpf/20230901231129.578493-3-martin.lau@linux.dev
    55d49f75
bpf_local_storage.c 26.1 KB