From f71feab36538a02d9b4dbed549e52dcaa75384c9 Mon Sep 17 00:00:00 2001 From: Luiz Augusto von Dentz Date: Fri, 13 Aug 2021 13:54:10 -0700 Subject: [PATCH] bthost: Fix not initializing address types properly The address type given to the init_conn is the peer address type (btdev) not the bthost address type, the old code assume it could use since only BDADDR_BREDR or BDADDR_LE_PUBLIC was tested but with the upcoming support for LL Privacy the peer address type would become BDADDR_LE_RANDOM which cannot be used as address type of bthost as that doesn't support random addresses and would likely cause SMP to fail when pairing. --- emulator/bthost.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/emulator/bthost.c b/emulator/bthost.c index 547685208..4f1598f0d 100644 --- a/emulator/bthost.c +++ b/emulator/bthost.c @@ -951,14 +951,20 @@ static void init_conn(struct bthost *bthost, uint16_t handle, if (bthost->conn_init) { ia = bthost->bdaddr; - ia_type = addr_type; - ra = conn->bdaddr; - ra_type = conn->addr_type; + if (addr_type == BDADDR_BREDR) + ia_type = addr_type; + else + ia_type = BDADDR_LE_PUBLIC; + ra = bdaddr; + ra_type = addr_type; } else { - ia = conn->bdaddr; - ia_type = conn->addr_type; + ia = bdaddr; + ia_type = addr_type; ra = bthost->bdaddr; - ra_type = addr_type; + if (addr_type == BDADDR_BREDR) + ra_type = addr_type; + else + ra_type = BDADDR_LE_PUBLIC; } conn->smp_data = smp_conn_add(bthost->smp_data, handle, ia, ia_type, -- 2.47.3