lkml.org 
[lkml]   [2018]   [Feb]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL for 4.14 093/110] bpf: sockmap missing NULL psock check
    Date
    From: John Fastabend <john.fastabend@gmail.com>

    [ Upstream commit 5731a879d03bdaa00265f8ebc32dfd0e65d25276 ]

    Add psock NULL check to handle a racing sock event that can get the
    sk_callback_lock before this case but after xchg happens causing the
    refcnt to hit zero and sock user data (psock) to be null and queued
    for garbage collection.

    Also add a comment in the code because this is a bit subtle and
    not obvious in my opinion.

    Signed-off-by: John Fastabend <john.fastabend@gmail.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
    ---
    kernel/bpf/sockmap.c | 11 +++++++++--
    1 file changed, 9 insertions(+), 2 deletions(-)

    diff --git a/kernel/bpf/sockmap.c b/kernel/bpf/sockmap.c
    index dbd7b322a86b..1890be7ea9cd 100644
    --- a/kernel/bpf/sockmap.c
    +++ b/kernel/bpf/sockmap.c
    @@ -588,8 +588,15 @@ static void sock_map_free(struct bpf_map *map)

    write_lock_bh(&sock->sk_callback_lock);
    psock = smap_psock_sk(sock);
    - smap_list_remove(psock, &stab->sock_map[i]);
    - smap_release_sock(psock, sock);
    + /* This check handles a racing sock event that can get the
    + * sk_callback_lock before this case but after xchg happens
    + * causing the refcnt to hit zero and sock user data (psock)
    + * to be null and queued for garbage collection.
    + */
    + if (likely(psock)) {
    + smap_list_remove(psock, &stab->sock_map[i]);
    + smap_release_sock(psock, sock);
    + }
    write_unlock_bh(&sock->sk_callback_lock);
    }
    rcu_read_unlock();
    --
    2.11.0
    \
     
     \ /
      Last update: 2018-02-03 19:32    [W:4.611 / U:0.104 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site