When enabling Secure Simple Pairing, the kernel first checks if BREDR is enabled. If it's not, enabling SSP fails. Therefore, it is necessary to make sure that BREDR is enabled before enabling SSP. Without this fix, bluetoothd would start without SSP enabled if started in dual or bredr mode after it had been run in le mode. --- src/adapter.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/adapter.c b/src/adapter.c index 2c3cf7600..86fff72bc 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -10229,12 +10229,12 @@ static void read_info_complete(uint8_t status, uint16_t length, switch (btd_opts.mode) { case BT_MODE_DUAL: - if (missing_settings & MGMT_SETTING_SSP) - set_mode(adapter, MGMT_OP_SET_SSP, 0x01); if (missing_settings & MGMT_SETTING_LE) set_mode(adapter, MGMT_OP_SET_LE, 0x01); if (missing_settings & MGMT_SETTING_BREDR) set_mode(adapter, MGMT_OP_SET_BREDR, 0x01); + if (missing_settings & MGMT_SETTING_SSP) + set_mode(adapter, MGMT_OP_SET_SSP, 0x01); break; case BT_MODE_BREDR: if (!(adapter->supported_settings & MGMT_SETTING_BREDR)) { @@ -10243,10 +10243,10 @@ static void read_info_complete(uint8_t status, uint16_t length, goto failed; } - if (missing_settings & MGMT_SETTING_SSP) - set_mode(adapter, MGMT_OP_SET_SSP, 0x01); if (missing_settings & MGMT_SETTING_BREDR) set_mode(adapter, MGMT_OP_SET_BREDR, 0x01); + if (missing_settings & MGMT_SETTING_SSP) + set_mode(adapter, MGMT_OP_SET_SSP, 0x01); if (adapter->current_settings & MGMT_SETTING_LE) set_mode(adapter, MGMT_OP_SET_LE, 0x00); break; -- 2.42.1