aboutsummaryrefslogtreecommitdiffstats
path: root/net/unix/garbage.c
diff options
context:
space:
mode:
authorKuniyuki Iwashima <[email protected]>2024-06-20 20:56:16 +0000
committerPaolo Abeni <[email protected]>2024-06-25 09:10:18 +0000
commit98f706de445b464f25220360210a4bcb9cc6c41a (patch)
tree0e8e4ab3a0f914ff960bc165282008f94c91e888 /net/unix/garbage.c
parentaf_unix: Don't retry after unix_state_lock_nested() in unix_stream_connect(). (diff)
downloadkernel-98f706de445b464f25220360210a4bcb9cc6c41a.tar.gz
kernel-98f706de445b464f25220360210a4bcb9cc6c41a.zip
af_unix: Define locking order for U_LOCK_SECOND in unix_stream_connect().
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: Kuniyuki Iwashima <[email protected]> Signed-off-by: Paolo Abeni <[email protected]>
Diffstat (limited to 'net/unix/garbage.c')
0 files changed, 0 insertions, 0 deletions