• Xin Long's avatar
    sctp: delay auto_asconf init until binding the first addr · 34e5b011
    Xin Long authored
    As Or Cohen described:
    
      If sctp_destroy_sock is called without sock_net(sk)->sctp.addr_wq_lock
      held and sp->do_auto_asconf is true, then an element is removed
      from the auto_asconf_splist without any proper locking.
    
      This can happen in the following functions:
      1. In sctp_accept, if sctp_sock_migrate fails.
      2. In inet_create or inet6_create, if there is a bpf program
         attached to BPF_CGROUP_INET_SOCK_CREATE which denies
         creation of the sctp socket.
    
    This patch is to fix it by moving the auto_asconf init out of
    sctp_init_sock(), by which inet_create()/inet6_create() won't
    need to operate it in sctp_destroy_sock() when calling
    sk_common_release().
    
    It also makes more sense to do auto_asconf init while binding the
    first addr, as auto_asconf actually requires an ANY addr bind,
    see it in sctp_addr_wq_timeout_handler().
    
    This addresses CVE-2021-23133.
    
    Fixes: 61023658 ("bpf: Add new cgroup attach type to enable sock modifications")
    Reported-by: default avatarOr Cohen <orcohen@paloaltonetworks.com>
    Signed-off-by: default avatarXin Long <lucien.xin@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    34e5b011
socket.c 261 KB