• Cong Wang's avatar
    l2tp: close all race conditions in l2tp_tunnel_register() · 0b2c5972
    Cong Wang authored
    The code in l2tp_tunnel_register() is racy in several ways:
    
    1. It modifies the tunnel socket _after_ publishing it.
    
    2. It calls setup_udp_tunnel_sock() on an existing socket without
       locking.
    
    3. It changes sock lock class on fly, which triggers many syzbot
       reports.
    
    This patch amends all of them by moving socket initialization code
    before publishing and under sock lock. As suggested by Jakub, the
    l2tp lockdep class is not necessary as we can just switch to
    bh_lock_sock_nested().
    
    Fixes: 37159ef2 ("l2tp: fix a lockdep splat")
    Fixes: 6b9f3423 ("l2tp: fix races in tunnel creation")
    Reported-by: syzbot+52866e24647f9a23403f@syzkaller.appspotmail.com
    Reported-by: syzbot+94cc2a66fc228b23f360@syzkaller.appspotmail.com
    Reported-by: default avatarTetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
    Cc: Guillaume Nault <gnault@redhat.com>
    Cc: Jakub Sitnicki <jakub@cloudflare.com>
    Cc: Eric Dumazet <edumazet@google.com>
    Cc: Tom Parkin <tparkin@katalix.com>
    Signed-off-by: default avatarCong Wang <cong.wang@bytedance.com>
    Reviewed-by: default avatarGuillaume Nault <gnault@redhat.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    0b2c5972
l2tp_core.c 45 KB