[PATCH] Bluetooth: SCO: fix ABBA deadlock in sco_connect_cfm
From: Jeongjun Park
Date: Sat Feb 22 2025 - 06:48:31 EST
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@xxxxxxxxx>
---
net/bluetooth/sco.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/net/bluetooth/sco.c b/net/bluetooth/sco.c
index aa7bfe26cb40..8f1377f4a27c 100644
--- a/net/bluetooth/sco.c
+++ b/net/bluetooth/sco.c
@@ -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);
--