* [PATCH BlueZ 1/4] shared/mgmt: Set MTU to UINT16_MAX
@ 2021-09-22 21:33 Luiz Augusto von Dentz
2021-09-22 21:34 ` [PATCH BlueZ 2/4] lib: Fix HCI_MAX_ACL_SIZE Luiz Augusto von Dentz
` (4 more replies)
0 siblings, 5 replies; 7+ messages in thread
From: Luiz Augusto von Dentz @ 2021-09-22 21:33 UTC (permalink / raw)
To: linux-bluetooth
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
This sets MTU of MGMT socket to UINT16_MAX since some commands may
require more than the default size (e.g. Load LTKs).
Fixes: https://github.com/bluez/bluez/issues/201
---
src/shared/mgmt.c | 46 ++++++++++++++++++++++++++++++++++++++++------
1 file changed, 40 insertions(+), 6 deletions(-)
diff --git a/src/shared/mgmt.c b/src/shared/mgmt.c
index b869fa6ef..cec8993e7 100644
--- a/src/shared/mgmt.c
+++ b/src/shared/mgmt.c
@@ -42,6 +42,7 @@ struct mgmt {
bool in_notify;
void *buf;
uint16_t len;
+ uint16_t mtu;
mgmt_debug_func_t debug_callback;
mgmt_destroy_func_t debug_destroy;
void *debug_data;
@@ -380,6 +381,32 @@ static bool can_read_data(struct io *io, void *user_data)
return true;
}
+static void mgmt_set_mtu(struct mgmt *mgmt)
+{
+ socklen_t len = 0;
+
+ /* Check if kernel support BT_SNDMTU to read the current MTU set */
+ if (getsockopt(mgmt->fd, SOL_BLUETOOTH, BT_SNDMTU, &mgmt->mtu,
+ &len) < 0) {
+ /* If BT_SNDMTU is not supported then MTU cannot be changed and
+ * MTU is fixed to HCI_MAX_ACL_SIZE.
+ */
+ mgmt->mtu = HCI_MAX_ACL_SIZE;
+ return;
+ }
+
+ if (mgmt->mtu < UINT16_MAX) {
+ uint16_t mtu = UINT16_MAX;
+
+ /* Try increasing the MTU since some commands may go
+ * over HCI_MAX_ACL_SIZE (1024)
+ */
+ if (!setsockopt(mgmt->fd, SOL_BLUETOOTH, BT_SNDMTU, &mtu,
+ sizeof(mtu)))
+ mgmt->mtu = mtu;
+ }
+}
+
struct mgmt *mgmt_new(int fd)
{
struct mgmt *mgmt;
@@ -423,6 +450,8 @@ struct mgmt *mgmt_new(int fd)
mgmt->writer_active = false;
+ mgmt_set_mtu(mgmt);
+
return mgmt_ref(mgmt);
}
@@ -534,9 +563,9 @@ bool mgmt_set_close_on_unref(struct mgmt *mgmt, bool do_close)
return true;
}
-static struct mgmt_request *create_request(uint16_t opcode, uint16_t index,
- uint16_t length, const void *param,
- mgmt_request_func_t callback,
+static struct mgmt_request *create_request(struct mgmt *mgmt, uint16_t opcode,
+ uint16_t index, uint16_t length,
+ const void *param, mgmt_request_func_t callback,
void *user_data, mgmt_destroy_func_t destroy)
{
struct mgmt_request *request;
@@ -548,6 +577,11 @@ static struct mgmt_request *create_request(uint16_t opcode, uint16_t index,
if (length > 0 && !param)
return NULL;
+ if (length > mgmt->mtu) {
+ printf("length %u > %u mgmt->mtu", length, mgmt->mtu);
+ return NULL;
+ }
+
request = new0(struct mgmt_request, 1);
request->len = length + MGMT_HDR_SIZE;
request->buf = malloc(request->len);
@@ -711,7 +745,7 @@ unsigned int mgmt_send(struct mgmt *mgmt, uint16_t opcode, uint16_t index,
if (!mgmt)
return 0;
- request = create_request(opcode, index, length, param,
+ request = create_request(mgmt, opcode, index, length, param,
callback, user_data, destroy);
if (!request)
return 0;
@@ -742,7 +776,7 @@ unsigned int mgmt_send_nowait(struct mgmt *mgmt, uint16_t opcode, uint16_t index
if (!mgmt)
return 0;
- request = create_request(opcode, index, length, param,
+ request = create_request(mgmt, opcode, index, length, param,
callback, user_data, destroy);
if (!request)
return 0;
@@ -768,7 +802,7 @@ unsigned int mgmt_reply(struct mgmt *mgmt, uint16_t opcode, uint16_t index,
if (!mgmt)
return 0;
- request = create_request(opcode, index, length, param,
+ request = create_request(mgmt, opcode, index, length, param,
callback, user_data, destroy);
if (!request)
return 0;
--
2.31.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH BlueZ 2/4] lib: Fix HCI_MAX_ACL_SIZE
2021-09-22 21:33 [PATCH BlueZ 1/4] shared/mgmt: Set MTU to UINT16_MAX Luiz Augusto von Dentz
@ 2021-09-22 21:34 ` Luiz Augusto von Dentz
2021-09-22 21:34 ` [PATCH BlueZ 3/4] shared/mgmt: Add mgmt_get_mtu Luiz Augusto von Dentz
` (3 subsequent siblings)
4 siblings, 0 replies; 7+ messages in thread
From: Luiz Augusto von Dentz @ 2021-09-22 21:34 UTC (permalink / raw)
To: linux-bluetooth
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
HCI_MAX_ACL_SIZE actually includes the maximum frames in AMP controller
so this changes it to properly define the max ACL frames on non-AMP
controllers and introduces a dedicated define for AMP controller as
HCI_MAX_AMP_SIZE.
---
lib/hci.h | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/lib/hci.h b/lib/hci.h
index a61568bce..50f385c1e 100644
--- a/lib/hci.h
+++ b/lib/hci.h
@@ -21,10 +21,11 @@ extern "C" {
#define HCI_MAX_DEV 16
-#define HCI_MAX_ACL_SIZE (1492 + 4)
+#define HCI_MAX_AMP_SIZE (1492 + 4)
+#define HCI_MAX_ACL_SIZE 1024
#define HCI_MAX_SCO_SIZE 255
#define HCI_MAX_EVENT_SIZE 260
-#define HCI_MAX_FRAME_SIZE (HCI_MAX_ACL_SIZE + 4)
+#define HCI_MAX_FRAME_SIZE (HCI_MAX_AMP_SIZE + 4)
/* HCI dev events */
#define HCI_DEV_REG 1
--
2.31.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH BlueZ 3/4] shared/mgmt: Add mgmt_get_mtu
2021-09-22 21:33 [PATCH BlueZ 1/4] shared/mgmt: Set MTU to UINT16_MAX Luiz Augusto von Dentz
2021-09-22 21:34 ` [PATCH BlueZ 2/4] lib: Fix HCI_MAX_ACL_SIZE Luiz Augusto von Dentz
@ 2021-09-22 21:34 ` Luiz Augusto von Dentz
2021-09-22 21:34 ` [PATCH BlueZ 4/4] adapter: Truncate number of LTKs loaded if over MGMT MTU Luiz Augusto von Dentz
` (2 subsequent siblings)
4 siblings, 0 replies; 7+ messages in thread
From: Luiz Augusto von Dentz @ 2021-09-22 21:34 UTC (permalink / raw)
To: linux-bluetooth
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
This adds mgmt_get_mtu function which can be used to query the
transport MTU.
---
src/shared/mgmt.c | 8 ++++++++
src/shared/mgmt.h | 2 ++
2 files changed, 10 insertions(+)
diff --git a/src/shared/mgmt.c b/src/shared/mgmt.c
index cec8993e7..41457b430 100644
--- a/src/shared/mgmt.c
+++ b/src/shared/mgmt.c
@@ -963,3 +963,11 @@ bool mgmt_unregister_all(struct mgmt *mgmt)
return true;
}
+
+uint16_t mgmt_get_mtu(struct mgmt *mgmt)
+{
+ if (!mgmt)
+ return 0;
+
+ return mgmt->mtu;
+}
diff --git a/src/shared/mgmt.h b/src/shared/mgmt.h
index 808bf4c7f..56add613d 100644
--- a/src/shared/mgmt.h
+++ b/src/shared/mgmt.h
@@ -76,3 +76,5 @@ unsigned int mgmt_register(struct mgmt *mgmt, uint16_t event, uint16_t index,
bool mgmt_unregister(struct mgmt *mgmt, unsigned int id);
bool mgmt_unregister_index(struct mgmt *mgmt, uint16_t index);
bool mgmt_unregister_all(struct mgmt *mgmt);
+
+uint16_t mgmt_get_mtu(struct mgmt *mgmt);
--
2.31.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH BlueZ 4/4] adapter: Truncate number of LTKs loaded if over MGMT MTU
2021-09-22 21:33 [PATCH BlueZ 1/4] shared/mgmt: Set MTU to UINT16_MAX Luiz Augusto von Dentz
2021-09-22 21:34 ` [PATCH BlueZ 2/4] lib: Fix HCI_MAX_ACL_SIZE Luiz Augusto von Dentz
2021-09-22 21:34 ` [PATCH BlueZ 3/4] shared/mgmt: Add mgmt_get_mtu Luiz Augusto von Dentz
@ 2021-09-22 21:34 ` Luiz Augusto von Dentz
2021-09-22 21:55 ` [BlueZ,1/4] shared/mgmt: Set MTU to UINT16_MAX bluez.test.bot
2021-09-22 22:35 ` bluez.test.bot
4 siblings, 0 replies; 7+ messages in thread
From: Luiz Augusto von Dentz @ 2021-09-22 21:34 UTC (permalink / raw)
To: linux-bluetooth
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
If MGMT MTU cannot accomodate all the existing LTKs only send the ones
that fit in the MTU and leave the remaining as unpaired.
---
src/adapter.c | 32 ++++++++++++++++++--------------
1 file changed, 18 insertions(+), 14 deletions(-)
diff --git a/src/adapter.c b/src/adapter.c
index 45c187a18..5846f0396 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -4163,8 +4163,9 @@ static void load_ltks(struct btd_adapter *adapter, GSList *keys)
{
struct mgmt_cp_load_long_term_keys *cp;
struct mgmt_ltk_info *key;
- size_t key_count, cp_size;
+ size_t key_count, max_key_count, cp_size;
GSList *l;
+ uint16_t mtu;
/*
* If the controller does not support Low Energy operation,
@@ -4180,6 +4181,9 @@ static void load_ltks(struct btd_adapter *adapter, GSList *keys)
return;
key_count = g_slist_length(keys);
+ mtu = mgmt_get_mtu(adapter->mgmt);
+ max_key_count = (mtu - sizeof(*cp)) / sizeof(*key);
+ key_count = MIN(max_key_count, key_count);
DBG("hci%u keys %zu", adapter->dev_id, key_count);
@@ -4199,8 +4203,10 @@ static void load_ltks(struct btd_adapter *adapter, GSList *keys)
*/
cp->key_count = htobs(key_count);
- for (l = keys, key = cp->keys; l != NULL; l = g_slist_next(l), key++) {
+ for (l = keys, key = cp->keys; l && key_count;
+ l = g_slist_next(l), key++, key_count--) {
struct smp_ltk_info *info = l->data;
+ struct btd_device *dev;
bacpy(&key->addr.bdaddr, &info->bdaddr);
key->addr.type = info->bdaddr_type;
@@ -4210,6 +4216,16 @@ static void load_ltks(struct btd_adapter *adapter, GSList *keys)
key->type = info->authenticated;
key->central = info->central;
key->enc_size = info->enc_size;
+
+ /* Mark device as paired as their LTKs can be loaded. */
+ dev = btd_adapter_find_device(adapter, &info->bdaddr,
+ info->bdaddr_type);
+ if (dev) {
+ device_set_paired(dev, info->bdaddr_type);
+ device_set_bonded(dev, info->bdaddr_type);
+ device_set_ltk_enc_size(dev, info->enc_size);
+ device_set_ltk_enc_size(dev, info->enc_size);
+ }
}
adapter->load_ltks_id = mgmt_send(adapter->mgmt,
@@ -4769,18 +4785,6 @@ device_exist:
device_set_bonded(device, BDADDR_BREDR);
}
- if (ltk_info || peripheral_ltk_info) {
- device_set_paired(device, bdaddr_type);
- device_set_bonded(device, bdaddr_type);
-
- if (ltk_info)
- device_set_ltk_enc_size(device,
- ltk_info->enc_size);
- else if (peripheral_ltk_info)
- device_set_ltk_enc_size(device,
- peripheral_ltk_info->enc_size);
- }
-
free:
g_key_file_free(key_file);
}
--
2.31.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* RE: [BlueZ,1/4] shared/mgmt: Set MTU to UINT16_MAX
2021-09-22 21:33 [PATCH BlueZ 1/4] shared/mgmt: Set MTU to UINT16_MAX Luiz Augusto von Dentz
` (2 preceding siblings ...)
2021-09-22 21:34 ` [PATCH BlueZ 4/4] adapter: Truncate number of LTKs loaded if over MGMT MTU Luiz Augusto von Dentz
@ 2021-09-22 21:55 ` bluez.test.bot
2021-09-22 22:35 ` bluez.test.bot
4 siblings, 0 replies; 7+ messages in thread
From: bluez.test.bot @ 2021-09-22 21:55 UTC (permalink / raw)
To: linux-bluetooth, luiz.dentz
[-- Attachment #1: Type: text/plain, Size: 3297 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=551265
---Test result---
Test Summary:
CheckPatch FAIL 5.51 seconds
GitLint FAIL 3.56 seconds
Prep - Setup ELL PASS 50.85 seconds
Build - Prep PASS 0.47 seconds
Build - Configure PASS 9.27 seconds
Build - Make PASS 215.58 seconds
Make Check PASS 10.15 seconds
Make Distcheck PASS 256.89 seconds
Build w/ext ELL - Configure PASS 9.66 seconds
Build w/ext ELL - Make PASS 203.86 seconds
Details
##############################
Test: CheckPatch - FAIL
Desc: Run checkpatch.pl script with rule in .checkpatch.conf
Output:
[BlueZ,4/4] adapter: Truncate number of LTKs loaded if over MGMT MTU
WARNING:TYPO_SPELLING: 'accomodate' may be misspelled - perhaps 'accommodate'?
#91:
If MGMT MTU cannot accomodate all the existing LTKs only send the ones
^^^^^^^^^^
/github/workspace/src/12511495.patch total: 0 errors, 1 warnings, 64 lines checked
NOTE: For some of the reported defects, checkpatch may be able to
mechanically convert to the typical style using --fix or --fix-inplace.
/github/workspace/src/12511495.patch has style problems, please review.
NOTE: Ignored message types: COMMIT_MESSAGE COMPLEX_MACRO CONST_STRUCT FILE_PATH_CHANGES MISSING_SIGN_OFF PREFER_PACKED SPDX_LICENSE_TAG SPLIT_STRING SSCANF_TO_KSTRTO
NOTE: If any of the errors are false positives, please report
them to the maintainer, see CHECKPATCH in MAINTAINERS.
##############################
Test: GitLint - FAIL
Desc: Run gitlint with rule in .gitlint
Output:
[BlueZ,1/4] shared/mgmt: Set MTU to UINT16_MAX
Config Error: Source contains parsing errors: '/.gitlint'
[line 52]: '~ \n'
[line 53]: '~ \n'
[BlueZ,2/4] lib: Fix HCI_MAX_ACL_SIZE
Config Error: Source contains parsing errors: '/.gitlint'
[line 52]: '~ \n'
[line 53]: '~ \n'
[BlueZ,3/4] shared/mgmt: Add mgmt_get_mtu
Config Error: Source contains parsing errors: '/.gitlint'
[line 52]: '~ \n'
[line 53]: '~ \n'
[BlueZ,4/4] adapter: Truncate number of LTKs loaded if over MGMT MTU
Config Error: Source contains parsing errors: '/.gitlint'
[line 52]: '~ \n'
[line 53]: '~ \n'
---
Regards,
Linux Bluetooth
^ permalink raw reply [flat|nested] 7+ messages in thread
* RE: [BlueZ,1/4] shared/mgmt: Set MTU to UINT16_MAX
2021-09-22 21:33 [PATCH BlueZ 1/4] shared/mgmt: Set MTU to UINT16_MAX Luiz Augusto von Dentz
` (3 preceding siblings ...)
2021-09-22 21:55 ` [BlueZ,1/4] shared/mgmt: Set MTU to UINT16_MAX bluez.test.bot
@ 2021-09-22 22:35 ` bluez.test.bot
2021-09-23 21:25 ` Luiz Augusto von Dentz
4 siblings, 1 reply; 7+ messages in thread
From: bluez.test.bot @ 2021-09-22 22:35 UTC (permalink / raw)
To: linux-bluetooth, luiz.dentz
[-- Attachment #1: Type: text/plain, Size: 1867 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=551265
---Test result---
Test Summary:
CheckPatch FAIL 5.36 seconds
GitLint PASS 3.57 seconds
Prep - Setup ELL PASS 40.85 seconds
Build - Prep PASS 0.48 seconds
Build - Configure PASS 7.30 seconds
Build - Make PASS 173.82 seconds
Make Check PASS 8.95 seconds
Make Distcheck PASS 204.82 seconds
Build w/ext ELL - Configure PASS 7.29 seconds
Build w/ext ELL - Make PASS 163.18 seconds
Details
##############################
Test: CheckPatch - FAIL
Desc: Run checkpatch.pl script with rule in .checkpatch.conf
Output:
[BlueZ,4/4] adapter: Truncate number of LTKs loaded if over MGMT MTU
WARNING:TYPO_SPELLING: 'accomodate' may be misspelled - perhaps 'accommodate'?
#91:
If MGMT MTU cannot accomodate all the existing LTKs only send the ones
^^^^^^^^^^
/github/workspace/src/12511495.patch total: 0 errors, 1 warnings, 64 lines checked
NOTE: For some of the reported defects, checkpatch may be able to
mechanically convert to the typical style using --fix or --fix-inplace.
/github/workspace/src/12511495.patch has style problems, please review.
NOTE: Ignored message types: COMMIT_MESSAGE COMPLEX_MACRO CONST_STRUCT FILE_PATH_CHANGES MISSING_SIGN_OFF PREFER_PACKED SPDX_LICENSE_TAG SPLIT_STRING SSCANF_TO_KSTRTO
NOTE: If any of the errors are false positives, please report
them to the maintainer, see CHECKPATCH in MAINTAINERS.
---
Regards,
Linux Bluetooth
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [BlueZ,1/4] shared/mgmt: Set MTU to UINT16_MAX
2021-09-22 22:35 ` bluez.test.bot
@ 2021-09-23 21:25 ` Luiz Augusto von Dentz
0 siblings, 0 replies; 7+ messages in thread
From: Luiz Augusto von Dentz @ 2021-09-23 21:25 UTC (permalink / raw)
To: linux-bluetooth
Hi,
On Wed, Sep 22, 2021 at 3:35 PM <bluez.test.bot@gmail.com> wrote:
>
> 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=551265
>
> ---Test result---
>
> Test Summary:
> CheckPatch FAIL 5.36 seconds
> GitLint PASS 3.57 seconds
> Prep - Setup ELL PASS 40.85 seconds
> Build - Prep PASS 0.48 seconds
> Build - Configure PASS 7.30 seconds
> Build - Make PASS 173.82 seconds
> Make Check PASS 8.95 seconds
> Make Distcheck PASS 204.82 seconds
> Build w/ext ELL - Configure PASS 7.29 seconds
> Build w/ext ELL - Make PASS 163.18 seconds
>
> Details
> ##############################
> Test: CheckPatch - FAIL
> Desc: Run checkpatch.pl script with rule in .checkpatch.conf
> Output:
> [BlueZ,4/4] adapter: Truncate number of LTKs loaded if over MGMT MTU
> WARNING:TYPO_SPELLING: 'accomodate' may be misspelled - perhaps 'accommodate'?
> #91:
> If MGMT MTU cannot accomodate all the existing LTKs only send the ones
> ^^^^^^^^^^
>
> /github/workspace/src/12511495.patch total: 0 errors, 1 warnings, 64 lines checked
>
> NOTE: For some of the reported defects, checkpatch may be able to
> mechanically convert to the typical style using --fix or --fix-inplace.
>
> /github/workspace/src/12511495.patch has style problems, please review.
>
> NOTE: Ignored message types: COMMIT_MESSAGE COMPLEX_MACRO CONST_STRUCT FILE_PATH_CHANGES MISSING_SIGN_OFF PREFER_PACKED SPDX_LICENSE_TAG SPLIT_STRING SSCANF_TO_KSTRTO
>
> NOTE: If any of the errors are false positives, please report
> them to the maintainer, see CHECKPATCH in MAINTAINERS.
>
>
>
>
> ---
> Regards,
> Linux Bluetooth
>
Pushed.
--
Luiz Augusto von Dentz
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2021-09-23 21:26 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-22 21:33 [PATCH BlueZ 1/4] shared/mgmt: Set MTU to UINT16_MAX Luiz Augusto von Dentz
2021-09-22 21:34 ` [PATCH BlueZ 2/4] lib: Fix HCI_MAX_ACL_SIZE Luiz Augusto von Dentz
2021-09-22 21:34 ` [PATCH BlueZ 3/4] shared/mgmt: Add mgmt_get_mtu Luiz Augusto von Dentz
2021-09-22 21:34 ` [PATCH BlueZ 4/4] adapter: Truncate number of LTKs loaded if over MGMT MTU Luiz Augusto von Dentz
2021-09-22 21:55 ` [BlueZ,1/4] shared/mgmt: Set MTU to UINT16_MAX bluez.test.bot
2021-09-22 22:35 ` bluez.test.bot
2021-09-23 21:25 ` Luiz Augusto von Dentz
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.