summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArchie Pusaka <apusaka@chromium.org>2021-10-28 14:17:25 +0300
committerLuiz Augusto von Dentz <luiz.von.dentz@intel.com>2021-10-29 01:11:04 +0300
commit2128939fe2e771645dd88e1938c27fdf96bd1cd0 (patch)
tree55d6f65fb5eb2b72e2d0384df8970c6237a468d6
parentc603bf1f94d0ef8ce3ef081112eae13cd744ef17 (diff)
downloadlinux-2128939fe2e771645dd88e1938c27fdf96bd1cd0.tar.xz
Bluetooth: Fix removing adv when processing cmd complete
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@chromium.org> Reviewed-by: Sonny Sasaka <sonnysasaka@chromium.org> Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
-rw-r--r--net/bluetooth/hci_event.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
index 3cba2bbefcd6..894670419a27 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
*/