| From b302db36c3b08abc6257d6bb03e5289d4706cf38 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Fri, 13 Nov 2020 16:44:33 -0800 |
| Subject: Bluetooth: Fix not sending Set Extended Scan Response |
| |
| From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com> |
| |
| [ Upstream commit a76a0d365077711594ce200a9553ed6d1ff40276 ] |
| |
| Current code is actually failing on the following tests of mgmt-tester |
| because get_adv_instance_scan_rsp_len did not account for flags that |
| cause scan response data to be included resulting in non-scannable |
| instance when in fact it should be scannable. |
| |
| Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com> |
| Signed-off-by: Marcel Holtmann <marcel@holtmann.org> |
| Signed-off-by: Johan Hedberg <johan.hedberg@intel.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| net/bluetooth/hci_request.c | 14 ++++++-------- |
| 1 file changed, 6 insertions(+), 8 deletions(-) |
| |
| diff --git a/net/bluetooth/hci_request.c b/net/bluetooth/hci_request.c |
| index 161ea93a5382..33dc78c24b73 100644 |
| --- a/net/bluetooth/hci_request.c |
| +++ b/net/bluetooth/hci_request.c |
| @@ -1060,9 +1060,10 @@ static u8 get_adv_instance_scan_rsp_len(struct hci_dev *hdev, u8 instance) |
| if (!adv_instance) |
| return 0; |
| |
| - /* TODO: Take into account the "appearance" and "local-name" flags here. |
| - * These are currently being ignored as they are not supported. |
| - */ |
| + if (adv_instance->flags & MGMT_ADV_FLAG_APPEARANCE || |
| + adv_instance->flags & MGMT_ADV_FLAG_LOCAL_NAME) |
| + return 1; |
| + |
| return adv_instance->scan_rsp_len; |
| } |
| |
| @@ -1599,14 +1600,11 @@ void __hci_req_update_scan_rsp_data(struct hci_request *req, u8 instance) |
| |
| memset(&cp, 0, sizeof(cp)); |
| |
| - /* Extended scan response data doesn't allow a response to be |
| - * set if the instance isn't scannable. |
| - */ |
| - if (get_adv_instance_scan_rsp_len(hdev, instance)) |
| + if (instance) |
| len = create_instance_scan_rsp_data(hdev, instance, |
| cp.data); |
| else |
| - len = 0; |
| + len = create_default_scan_rsp_data(hdev, cp.data); |
| |
| if (hdev->scan_rsp_data_len == len && |
| !memcmp(cp.data, hdev->scan_rsp_data, len)) |
| -- |
| 2.30.2 |
| |