• Kuniyuki Iwashima's avatar
    af_unix: Define locking order for U_LOCK_SECOND in unix_stream_connect(). · 98f706de
    Kuniyuki Iwashima authored
    While a SOCK_(STREAM|SEQPACKET) socket connect()s to another, we hold
    two locks of them by unix_state_lock() and unix_state_lock_nested() in
    unix_stream_connect().
    
    Before unix_state_lock_nested(), the following is guaranteed by checking
    sk->sk_state:
    
      1. The first socket is TCP_LISTEN
      2. The second socket is not the first one
      3. Simultaneous connect() must fail
    
    So, the client state can be TCP_CLOSE or TCP_LISTEN or TCP_ESTABLISHED.
    
    Let's define the expected states as unix_state_lock_cmp_fn() instead of
    using unix_state_lock_nested().
    
    Note that 2. is detected by debug_spin_lock_before() and 3. cannot be
    expressed as lock_cmp_fn.
    Signed-off-by: default avatarKuniyuki Iwashima <kuniyu@amazon.com>
    Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
    98f706de
af_unix.c 87.5 KB