Bluetooth: ISO: don't try to remove CIG if there are bound CIS left
authorPauli Virtanen <pav@iki.fi>
Thu, 1 Jun 2023 06:34:44 +0000 (09:34 +0300)
committerLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Tue, 6 Jun 2023 00:14:07 +0000 (17:14 -0700)
Consider existing BOUND & CONNECT state CIS to block CIG removal.
Otherwise, under suitable timing conditions we may attempt to remove CIG
while Create CIS is pending, which fails.

Fixes: 26afbd826ee3 ("Bluetooth: Add initial implementation of CIS connections")
Signed-off-by: Pauli Virtanen <pav@iki.fi>
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
net/bluetooth/hci_conn.c

index 1f906f8508bc3d0e5e5ac9987624216f0703c8be..1ef952bda97d8a48cc95610d2342db8c7a9fb238 100644 (file)
@@ -972,6 +972,8 @@ static void cis_cleanup(struct hci_conn *conn)
        /* Check if ISO connection is a CIS and remove CIG if there are
         * no other connections using it.
         */
+       hci_conn_hash_list_state(hdev, find_cis, ISO_LINK, BT_BOUND, &d);
+       hci_conn_hash_list_state(hdev, find_cis, ISO_LINK, BT_CONNECT, &d);
        hci_conn_hash_list_state(hdev, find_cis, ISO_LINK, BT_CONNECTED, &d);
        if (d.count)
                return;