* [PATCH v2 1/2] Bluetooth: MGMT: Fix always using HCI_MAX_AD_LENGTH
@ 2023-07-07 22:43 Luiz Augusto von Dentz
2023-07-07 22:43 ` [PATCH v2 2/2] Bluetooth: hci_sync: Fix using Legacy PDUs with certain advertising Luiz Augusto von Dentz
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Luiz Augusto von Dentz @ 2023-07-07 22:43 UTC (permalink / raw)
To: linux-bluetooth
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
HCI_MAX_AD_LENGTH shall only be used if the controller doesn't support
extended advertising, otherwise HCI_MAX_EXT_AD_LENGTH shall be used
instead.
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
---
include/net/bluetooth/hci_core.h | 4 ++++
net/bluetooth/hci_event.c | 12 +++++++-----
net/bluetooth/mgmt.c | 6 +++---
3 files changed, 14 insertions(+), 8 deletions(-)
diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h
index 105c1c394f82..8200a6689b39 100644
--- a/include/net/bluetooth/hci_core.h
+++ b/include/net/bluetooth/hci_core.h
@@ -1801,6 +1801,10 @@ void hci_conn_del_sysfs(struct hci_conn *conn);
/* Extended advertising support */
#define ext_adv_capable(dev) (((dev)->le_features[1] & HCI_LE_EXT_ADV))
+/* Maximum advertising length */
+#define max_adv_len(dev) \
+ (ext_adv_capable(dev) ? HCI_MAX_EXT_AD_LENGTH : HCI_MAX_AD_LENGTH)
+
/* BLUETOOTH CORE SPECIFICATION Version 5.3 | Vol 4, Part E page 1789:
*
* C24: Mandatory if the LE Controller supports Connection State and either
diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
index c29eece88d2c..f1fcece29e7d 100644
--- a/net/bluetooth/hci_event.c
+++ b/net/bluetooth/hci_event.c
@@ -1747,7 +1747,7 @@ static void store_pending_adv_report(struct hci_dev *hdev, bdaddr_t *bdaddr,
{
struct discovery_state *d = &hdev->discovery;
- if (len > HCI_MAX_AD_LENGTH)
+ if (len > max_adv_len(hdev))
return;
bacpy(&d->last_adv_addr, bdaddr);
@@ -6249,8 +6249,9 @@ static void process_adv_report(struct hci_dev *hdev, u8 type, bdaddr_t *bdaddr,
return;
}
- if (!ext_adv && len > HCI_MAX_AD_LENGTH) {
- bt_dev_err_ratelimited(hdev, "legacy adv larger than 31 bytes");
+ if (len > max_adv_len(hdev)) {
+ bt_dev_err_ratelimited(hdev,
+ "adv larger than maximum supported");
return;
}
@@ -6315,7 +6316,8 @@ static void process_adv_report(struct hci_dev *hdev, u8 type, bdaddr_t *bdaddr,
*/
conn = check_pending_le_conn(hdev, bdaddr, bdaddr_type, bdaddr_resolved,
type);
- if (!ext_adv && conn && type == LE_ADV_IND && len <= HCI_MAX_AD_LENGTH) {
+ if (!ext_adv && conn && type == LE_ADV_IND &&
+ len <= max_adv_len(hdev)) {
/* Store report for later inclusion by
* mgmt_device_connected
*/
@@ -6456,7 +6458,7 @@ static void hci_le_adv_report_evt(struct hci_dev *hdev, void *data,
info->length + 1))
break;
- if (info->length <= HCI_MAX_AD_LENGTH) {
+ if (info->length <= max_adv_len(hdev)) {
rssi = info->data[info->length];
process_adv_report(hdev, info->type, &info->bdaddr,
info->bdaddr_type, NULL, 0, rssi,
diff --git a/net/bluetooth/mgmt.c b/net/bluetooth/mgmt.c
index 3156bc27088e..33c06f7c7641 100644
--- a/net/bluetooth/mgmt.c
+++ b/net/bluetooth/mgmt.c
@@ -8428,8 +8428,8 @@ static int read_adv_features(struct sock *sk, struct hci_dev *hdev,
supported_flags = get_supported_adv_flags(hdev);
rp->supported_flags = cpu_to_le32(supported_flags);
- rp->max_adv_data_len = HCI_MAX_AD_LENGTH;
- rp->max_scan_rsp_len = HCI_MAX_AD_LENGTH;
+ rp->max_adv_data_len = max_adv_len(hdev);
+ rp->max_scan_rsp_len = max_adv_len(hdev);
rp->max_instances = hdev->le_num_of_adv_sets;
rp->num_instances = hdev->adv_instance_cnt;
@@ -8465,7 +8465,7 @@ static u8 calculate_name_len(struct hci_dev *hdev)
static u8 tlv_data_max_len(struct hci_dev *hdev, u32 adv_flags,
bool is_adv_data)
{
- u8 max_len = HCI_MAX_AD_LENGTH;
+ u8 max_len = max_adv_len(hdev);
if (is_adv_data) {
if (adv_flags & (MGMT_ADV_FLAG_DISCOV |
--
2.40.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH v2 2/2] Bluetooth: hci_sync: Fix using Legacy PDUs with certain advertising
2023-07-07 22:43 [PATCH v2 1/2] Bluetooth: MGMT: Fix always using HCI_MAX_AD_LENGTH Luiz Augusto von Dentz
@ 2023-07-07 22:43 ` Luiz Augusto von Dentz
2023-07-07 23:37 ` [v2,1/2] Bluetooth: MGMT: Fix always using HCI_MAX_AD_LENGTH bluez.test.bot
2023-07-10 21:30 ` [PATCH v2 1/2] " patchwork-bot+bluetooth
2 siblings, 0 replies; 4+ messages in thread
From: Luiz Augusto von Dentz @ 2023-07-07 22:43 UTC (permalink / raw)
To: linux-bluetooth
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
If the advertising instance is bigger than HCI_MAX_AD_LENGTH than it
cannot use LE_LEGACY_ADV_IND:
BLUETOOTH CORE SPECIFICATION Version 5.3 | Vol 4, Part E
page 2449:
'If legacy advertising PDU types are being used, then the parameter
value shall be one of those specified in Table 7.2. If the advertising
set already contains data, the type shall be one that supports
advertising data and the amount of data shall not exceed 31 octets.'
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
---
net/bluetooth/eir.c | 31 ++++++++++++++++++++-----------
net/bluetooth/hci_sync.c | 16 ++++++++++++++++
2 files changed, 36 insertions(+), 11 deletions(-)
diff --git a/net/bluetooth/eir.c b/net/bluetooth/eir.c
index 8a85f6cdfbc1..2fc375ddf787 100644
--- a/net/bluetooth/eir.c
+++ b/net/bluetooth/eir.c
@@ -302,20 +302,25 @@ u8 eir_create_adv_data(struct hci_dev *hdev, u8 instance, u8 *ptr)
* include the "Flags" AD field".
*/
if (flags) {
- ptr[0] = 0x02;
- ptr[1] = EIR_FLAGS;
- ptr[2] = flags;
+ if (ptr) {
+ ptr[0] = 0x02;
+ ptr[1] = EIR_FLAGS;
+ ptr[2] = flags;
+ ptr += 3;
+ }
ad_len += 3;
- ptr += 3;
}
}
skip_flags:
if (adv) {
- memcpy(ptr, adv->adv_data, adv->adv_data_len);
+ if (ptr) {
+ memcpy(ptr, adv->adv_data, adv->adv_data_len);
+ ptr += adv->adv_data_len;
+ }
+
ad_len += adv->adv_data_len;
- ptr += adv->adv_data_len;
}
if (instance_flags & MGMT_ADV_FLAG_TX_POWER) {
@@ -330,14 +335,18 @@ u8 eir_create_adv_data(struct hci_dev *hdev, u8 instance, u8 *ptr)
adv_tx_power = hdev->adv_tx_power;
}
- /* Provide Tx Power only if we can provide a valid value for it */
+ /* Provide Tx Power only if we can provide a valid value for
+ * it.
+ */
if (adv_tx_power != HCI_TX_POWER_INVALID) {
- ptr[0] = 0x02;
- ptr[1] = EIR_TX_POWER;
- ptr[2] = (u8)adv_tx_power;
+ if (ptr) {
+ ptr[0] = 0x02;
+ ptr[1] = EIR_TX_POWER;
+ ptr[2] = (u8)adv_tx_power;
+ ptr += 3;
+ }
ad_len += 3;
- ptr += 3;
}
}
diff --git a/net/bluetooth/hci_sync.c b/net/bluetooth/hci_sync.c
index 3348a1b0e3f7..f57bf554155e 100644
--- a/net/bluetooth/hci_sync.c
+++ b/net/bluetooth/hci_sync.c
@@ -1113,6 +1113,22 @@ int hci_setup_ext_adv_instance_sync(struct hci_dev *hdev, u8 instance)
secondary_adv = (flags & MGMT_ADV_FLAG_SEC_MASK);
+ /* Force use of EA if advertising data is bigger than maximum allowed
+ * over Legacy PDUS:
+ *
+ * BLUETOOTH CORE SPECIFICATION Version 5.3 | Vol 4, Part E
+ * page 2449:
+ *
+ * 'If legacy advertising PDU types are being used, then the parameter
+ * value shall be one of those specified in Table 7.2. If the
+ * advertising set already contains data, the type shall be one that
+ * supports advertising data and the amount of data shall not exceed
+ * 31 octets.'
+ */
+ if (!secondary_adv &&
+ eir_create_adv_data(hdev, instance, NULL) > HCI_MAX_AD_LENGTH)
+ secondary_adv = true;
+
if (connectable) {
if (secondary_adv)
cp.evt_properties = cpu_to_le16(LE_EXT_ADV_CONN_IND);
--
2.40.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* RE: [v2,1/2] Bluetooth: MGMT: Fix always using HCI_MAX_AD_LENGTH
2023-07-07 22:43 [PATCH v2 1/2] Bluetooth: MGMT: Fix always using HCI_MAX_AD_LENGTH Luiz Augusto von Dentz
2023-07-07 22:43 ` [PATCH v2 2/2] Bluetooth: hci_sync: Fix using Legacy PDUs with certain advertising Luiz Augusto von Dentz
@ 2023-07-07 23:37 ` bluez.test.bot
2023-07-10 21:30 ` [PATCH v2 1/2] " patchwork-bot+bluetooth
2 siblings, 0 replies; 4+ messages in thread
From: bluez.test.bot @ 2023-07-07 23:37 UTC (permalink / raw)
To: linux-bluetooth, luiz.dentz
[-- Attachment #1: Type: text/plain, Size: 2180 bytes --]
This is automated email and please do not reply to this email!
Dear submitter,
Thank you for submitting the patches to the linux bluetooth mailing list.
This is a CI test results with your patch series:
PW Link:https://patchwork.kernel.org/project/bluetooth/list/?series=763576
---Test result---
Test Summary:
CheckPatch PASS 1.76 seconds
GitLint PASS 0.56 seconds
SubjectPrefix PASS 0.18 seconds
BuildKernel PASS 34.73 seconds
CheckAllWarning PASS 37.00 seconds
CheckSparse WARNING 42.19 seconds
CheckSmatch WARNING 113.61 seconds
BuildKernel32 PASS 33.37 seconds
TestRunnerSetup PASS 500.57 seconds
TestRunner_l2cap-tester PASS 23.05 seconds
TestRunner_iso-tester PASS 41.37 seconds
TestRunner_bnep-tester PASS 10.82 seconds
TestRunner_mgmt-tester FAIL 217.84 seconds
TestRunner_rfcomm-tester PASS 15.73 seconds
TestRunner_sco-tester PASS 16.70 seconds
TestRunner_ioctl-tester PASS 17.81 seconds
TestRunner_mesh-tester PASS 13.42 seconds
TestRunner_smp-tester PASS 14.30 seconds
TestRunner_userchan-tester PASS 11.15 seconds
IncrementalBuild PASS 37.71 seconds
Details
##############################
Test: CheckSparse - WARNING
Desc: Run sparse tool with linux kernel
Output:
net/bluetooth/hci_event.c: note: in included file (through include/net/bluetooth/hci_core.h):
##############################
Test: CheckSmatch - WARNING
Desc: Run smatch tool with source
Output:
net/bluetooth/hci_event.c: note: in included file (through include/net/bluetooth/hci_core.h):
##############################
Test: TestRunner_mgmt-tester - FAIL
Desc: Run mgmt-tester with test-runner
Output:
Total: 497, Passed: 492 (99.0%), Failed: 2, Not Run: 3
Failed Test Cases
Read Ext Advertising Features - Success 3 (PHY flags) Failed 0.244 seconds
Ext Adv MGMT Params - (5.0) Success Failed 0.288 seconds
---
Regards,
Linux Bluetooth
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v2 1/2] Bluetooth: MGMT: Fix always using HCI_MAX_AD_LENGTH
2023-07-07 22:43 [PATCH v2 1/2] Bluetooth: MGMT: Fix always using HCI_MAX_AD_LENGTH Luiz Augusto von Dentz
2023-07-07 22:43 ` [PATCH v2 2/2] Bluetooth: hci_sync: Fix using Legacy PDUs with certain advertising Luiz Augusto von Dentz
2023-07-07 23:37 ` [v2,1/2] Bluetooth: MGMT: Fix always using HCI_MAX_AD_LENGTH bluez.test.bot
@ 2023-07-10 21:30 ` patchwork-bot+bluetooth
2 siblings, 0 replies; 4+ messages in thread
From: patchwork-bot+bluetooth @ 2023-07-10 21:30 UTC (permalink / raw)
To: Luiz Augusto von Dentz; +Cc: linux-bluetooth
Hello:
This series was applied to bluetooth/bluetooth-next.git (master)
by Luiz Augusto von Dentz <luiz.von.dentz@intel.com>:
On Fri, 7 Jul 2023 15:43:17 -0700 you wrote:
> From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
>
> HCI_MAX_AD_LENGTH shall only be used if the controller doesn't support
> extended advertising, otherwise HCI_MAX_EXT_AD_LENGTH shall be used
> instead.
>
> Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
>
> [...]
Here is the summary with links:
- [v2,1/2] Bluetooth: MGMT: Fix always using HCI_MAX_AD_LENGTH
https://git.kernel.org/bluetooth/bluetooth-next/c/c9a85685d0c1
- [v2,2/2] Bluetooth: hci_sync: Fix using Legacy PDUs with certain advertising
(no matching commit)
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2023-07-10 21:30 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-07-07 22:43 [PATCH v2 1/2] Bluetooth: MGMT: Fix always using HCI_MAX_AD_LENGTH Luiz Augusto von Dentz
2023-07-07 22:43 ` [PATCH v2 2/2] Bluetooth: hci_sync: Fix using Legacy PDUs with certain advertising Luiz Augusto von Dentz
2023-07-07 23:37 ` [v2,1/2] Bluetooth: MGMT: Fix always using HCI_MAX_AD_LENGTH bluez.test.bot
2023-07-10 21:30 ` [PATCH v2 1/2] " patchwork-bot+bluetooth
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).