@@ -289,13 +289,11 @@ static int sco_chan_add(struct sco_conn *conn, struct sock *sk,
{
int err = 0;
- sco_conn_lock(conn);
if (conn->sk)
err = -EBUSY;
else
__sco_chan_add(conn, sk, parent);
- sco_conn_unlock(conn);
return err;
}
@@ -343,11 +341,13 @@ static int sco_connect(struct sock *sk)
goto unlock;
}
+ sco_conn_lock(conn);
lock_sock(sk);
err = sco_chan_add(conn, sk, NULL);
if (err) {
release_sock(sk);
+ sco_conn_unlock(conn);
goto unlock;
}
@@ -363,6 +363,7 @@ static int sco_connect(struct sock *sk)
}
release_sock(sk);
+ sco_conn_unlock(conn);
unlock:
hci_dev_unlock(hdev);
Caused by previous commit 405280887f8f causes ABBA deadlock. So we need to change the lock order to prevent deadlock. Fixes: 405280887f8f ("Bluetooth: Reduce critical section in sco_conn_ready") Signed-off-by: Jeongjun Park <aha310510@gmail.com> --- net/bluetooth/sco.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) --