Takashi Iwai 73d3a4
From 27c24fda62b601d6f9ca5e992502578c4310876f Mon Sep 17 00:00:00 2001
Takashi Iwai 73d3a4
From: Desmond Cheong Zhi Xi <desmondcheongzx@gmail.com>
Takashi Iwai 73d3a4
Date: Tue, 10 Aug 2021 12:14:07 +0800
Takashi Iwai 73d3a4
Subject: [PATCH] Bluetooth: switch to lock_sock in SCO
Takashi Iwai 73d3a4
Git-commit: 27c24fda62b601d6f9ca5e992502578c4310876f
Takashi Iwai 52a00c
Patch-mainline: v5.15-rc1
Takashi Iwai 73d3a4
References: CVE-2021-3640 bsc#1188172
Takashi Iwai 73d3a4
Takashi Iwai 73d3a4
Since sco_sock_timeout is now scheduled using delayed work, it is no
Takashi Iwai 73d3a4
longer run in SOFTIRQ context. Hence bh_lock_sock is no longer
Takashi Iwai 73d3a4
necessary in SCO to synchronise between user contexts and SOFTIRQ
Takashi Iwai 73d3a4
processing.
Takashi Iwai 73d3a4
Takashi Iwai 73d3a4
As such, calls to bh_lock_sock should be replaced with lock_sock to
Takashi Iwai 73d3a4
synchronize with other concurrent processes that use lock_sock.
Takashi Iwai 73d3a4
Takashi Iwai 73d3a4
Signed-off-by: Desmond Cheong Zhi Xi <desmondcheongzx@gmail.com>
Takashi Iwai 73d3a4
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Takashi Iwai 73d3a4
Acked-by: Takashi Iwai <tiwai@suse.de>
Takashi Iwai 73d3a4
Takashi Iwai 73d3a4
---
Takashi Iwai 73d3a4
 net/bluetooth/sco.c |   18 +++++++++---------
Takashi Iwai 73d3a4
 1 file changed, 9 insertions(+), 9 deletions(-)
Takashi Iwai 73d3a4
Takashi Iwai 73d3a4
--- a/net/bluetooth/sco.c
Takashi Iwai 73d3a4
+++ b/net/bluetooth/sco.c
Takashi Iwai adfd84
@@ -92,10 +92,10 @@ static void sco_sock_timeout(struct work
Takashi Iwai 73d3a4
 
Takashi Iwai 73d3a4
 	BT_DBG("sock %p state %d", sk, sk->sk_state);
Takashi Iwai 73d3a4
 
Takashi Iwai 73d3a4
-	bh_lock_sock(sk);
Takashi Iwai 73d3a4
+	lock_sock(sk);
Takashi Iwai 73d3a4
 	sk->sk_err = ETIMEDOUT;
Takashi Iwai 73d3a4
 	sk->sk_state_change(sk);
Takashi Iwai 73d3a4
-	bh_unlock_sock(sk);
Takashi Iwai 73d3a4
+	release_sock(sk);
Takashi Iwai 73d3a4
 
Takashi Iwai 73d3a4
 	sco_sock_kill(sk);
Takashi Iwai 73d3a4
 	sock_put(sk);
Takashi Iwai adfd84
@@ -192,10 +192,10 @@ static void sco_conn_del(struct hci_conn
Takashi Iwai 73d3a4
 
Takashi Iwai 73d3a4
 	if (sk) {
Takashi Iwai 73d3a4
 		sock_hold(sk);
Takashi Iwai 73d3a4
-		bh_lock_sock(sk);
Takashi Iwai 73d3a4
+		lock_sock(sk);
Takashi Iwai 73d3a4
 		sco_sock_clear_timer(sk);
Takashi Iwai 73d3a4
 		sco_chan_del(sk, err);
Takashi Iwai 73d3a4
-		bh_unlock_sock(sk);
Takashi Iwai 73d3a4
+		release_sock(sk);
Takashi Iwai 73d3a4
 		sco_sock_kill(sk);
Takashi Iwai 73d3a4
 		sock_put(sk);
Takashi Iwai adfd84
 
Takashi Iwai adfd84
@@ -1047,10 +1047,10 @@ static void sco_conn_ready(struct sco_co
Takashi Iwai 73d3a4
 
Takashi Iwai 73d3a4
 	if (sk) {
Takashi Iwai 73d3a4
 		sco_sock_clear_timer(sk);
Takashi Iwai 73d3a4
-		bh_lock_sock(sk);
Takashi Iwai 73d3a4
+		lock_sock(sk);
Takashi Iwai 73d3a4
 		sk->sk_state = BT_CONNECTED;
Takashi Iwai 73d3a4
 		sk->sk_state_change(sk);
Takashi Iwai 73d3a4
-		bh_unlock_sock(sk);
Takashi Iwai 73d3a4
+		release_sock(sk);
Takashi Iwai 73d3a4
 	} else {
Takashi Iwai 73d3a4
 		sco_conn_lock(conn);
Takashi Iwai 73d3a4
 
Takashi Iwai adfd84
@@ -1065,12 +1065,12 @@ static void sco_conn_ready(struct sco_co
Takashi Iwai 73d3a4
 			return;
Takashi Iwai 73d3a4
 		}
Takashi Iwai 73d3a4
 
Takashi Iwai 73d3a4
-		bh_lock_sock(parent);
Takashi Iwai 73d3a4
+		lock_sock(parent);
Takashi Iwai 73d3a4
 
Takashi Iwai 73d3a4
 		sk = sco_sock_alloc(sock_net(parent), NULL,
Takashi Iwai 73d3a4
 				    BTPROTO_SCO, GFP_ATOMIC, 0);
Takashi Iwai 73d3a4
 		if (!sk) {
Takashi Iwai 73d3a4
-			bh_unlock_sock(parent);
Takashi Iwai 73d3a4
+			release_sock(parent);
Takashi Iwai 73d3a4
 			sco_conn_unlock(conn);
Takashi Iwai 73d3a4
 			return;
Takashi Iwai 73d3a4
 		}
Takashi Iwai adfd84
@@ -1091,7 +1091,7 @@ static void sco_conn_ready(struct sco_co
Takashi Iwai 73d3a4
 		/* Wake up parent */
Takashi Iwai 73d3a4
 		parent->sk_data_ready(parent);
Takashi Iwai 73d3a4
 
Takashi Iwai 73d3a4
-		bh_unlock_sock(parent);
Takashi Iwai 73d3a4
+		release_sock(parent);
Takashi Iwai 73d3a4
 
Takashi Iwai 73d3a4
 		sco_conn_unlock(conn);
Takashi Iwai 73d3a4
 	}