Commit f9404d08 authored by Iulia Tanasescu's avatar Iulia Tanasescu Committed by Liu Chuang
Browse files

Bluetooth: ISO: Check socket flag instead of hcon

stable inclusion
from stable-v6.6.39
commit 045669710464a21c67e690ef14698fd71857cb11
category: bugfix
bugzilla: https://gitee.com/src-openeuler/kernel/issues/IAGRSM
CVE: CVE-2024-42141

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=

...

-------------------------------

[ Upstream commit 596b6f081336e77764ca35cfeab66d0fcdbe544e ]

This fixes the following Smatch static checker warning:

net/bluetooth/iso.c:1364 iso_sock_recvmsg()
error: we previously assumed 'pi->conn->hcon' could be null (line 1359)

net/bluetooth/iso.c
1347 static int iso_sock_recvmsg(struct socket *sock, struct msghdr *msg,
1348                             size_t len, int flags)
1349 {
1350         struct sock *sk = sock->sk;
1351         struct iso_pinfo *pi = iso_pi(sk);
1352
1353         BT_DBG("sk %p", sk);
1354
1355         if (test_and_clear_bit(BT_SK_DEFER_SETUP,
                                      &bt_sk(sk)->flags)) {
1356                 lock_sock(sk);
1357                 switch (sk->sk_state) {
1358                 case BT_CONNECT2:
1359                         if (pi->conn->hcon &&
                                     ^^^^^^^^^^^^^^ If ->hcon is NULL

1360                             test_bit(HCI_CONN_PA_SYNC,
                                         &pi->conn->hcon->flags)) {
1361                                 iso_conn_big_sync(sk);
1362                                 sk->sk_state = BT_LISTEN;
1363                         } else {
--> 1364                         iso_conn_defer_accept(pi->conn->hcon);
                                                       ^^^^^^^^^^^^^^
                                                       then we're toast

1365                                 sk->sk_state = BT_CONFIG;
1366                         }
1367                         release_sock(sk);
1368                         return 0;
1369                 case BT_CONNECTED:
1370                         if (test_bit(BT_SK_PA_SYNC,

Fixes: fbdc4bc4 ("Bluetooth: ISO: Use defer setup to separate PA sync and BIG sync")
Signed-off-by: default avatarIulia Tanasescu <iulia.tanasescu@nxp.com>
Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
Signed-off-by: default avatarLiu Chuang <liuchuang40@huawei.com>
parent e0427893
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -1233,8 +1233,7 @@ static int iso_sock_recvmsg(struct socket *sock, struct msghdr *msg,
		lock_sock(sk);
		switch (sk->sk_state) {
		case BT_CONNECT2:
			if (pi->conn->hcon &&
			    test_bit(HCI_CONN_PA_SYNC, &pi->conn->hcon->flags)) {
			if (test_bit(BT_SK_PA_SYNC, &pi->flags)) {
				iso_conn_big_sync(sk);
				sk->sk_state = BT_LISTEN;
			} else {