Patch "Bluetooth: Fix removing adv when processing cmd complete" has been added to the 5.16-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    Bluetooth: Fix removing adv when processing cmd complete

to the 5.16-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     bluetooth-fix-removing-adv-when-processing-cmd-compl.patch
and it can be found in the queue-5.16 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit f265b2833c65b0ad4f7433cff253dbc40a615e07
Author: Archie Pusaka <apusaka@xxxxxxxxxxxx>
Date:   Thu Oct 28 19:17:25 2021 +0800

    Bluetooth: Fix removing adv when processing cmd complete
    
    [ Upstream commit 2128939fe2e771645dd88e1938c27fdf96bd1cd0 ]
    
    If we remove one instance of adv using Set Extended Adv Enable, there
    is a possibility of issue occurs when processing the Command Complete
    event. Especially, the adv_info might not be found since we already
    remove it in hci_req_clear_adv_instance() -> hci_remove_adv_instance().
    If that's the case, we will mistakenly proceed to remove all adv
    instances instead of just one single instance.
    
    This patch fixes the issue by checking the content of the HCI command
    instead of checking whether the adv_info is found.
    
    Signed-off-by: Archie Pusaka <apusaka@xxxxxxxxxxxx>
    Reviewed-by: Sonny Sasaka <sonnysasaka@xxxxxxxxxxxx>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@xxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
index 6eba439487749..8882c6dfb48f4 100644
--- a/net/bluetooth/hci_event.c
+++ b/net/bluetooth/hci_event.c
@@ -1326,8 +1326,10 @@ static void hci_cc_le_set_ext_adv_enable(struct hci_dev *hdev,
 					   &conn->le_conn_timeout,
 					   conn->conn_timeout);
 	} else {
-		if (adv) {
-			adv->enabled = false;
+		if (cp->num_of_sets) {
+			if (adv)
+				adv->enabled = false;
+
 			/* If just one instance was disabled check if there are
 			 * any other instance enabled before clearing HCI_LE_ADV
 			 */



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux