From daf46a2b635f8cea5ae1f77f690b4ce27ac9f7e9 Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Sun, 16 Feb 2014 13:31:54 -0800 Subject: [PATCH] core: Ignore stored LTK from unresolvable and resolvable random addresses --- src/adapter.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/adapter.c b/src/adapter.c index 303979dd4..08296bd10 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -2261,6 +2261,24 @@ static struct smp_ltk_info *get_ltk(GKeyFile *key_file, const char *peer, str2ba(peer, <k->bdaddr); ltk->bdaddr_type = peer_type; + + /* + * Long term keys should respond to an identity address which can + * either be a public address or a random static address. Keys + * stored for resolvable random and unresolvable random addresses + * are ignored. + * + * This is an extra sanity check for older kernel versions or older + * daemons that might have been instructed to store long term keys + * for these temporary addresses. + */ + if (ltk->bdaddr_type == BDADDR_LE_RANDOM && + (ltk->bdaddr.b[5] & 0xc0) != 0xc0) { + g_free(ltk); + ltk = NULL; + goto failed; + } + str2buf(&key[2], ltk->val, sizeof(ltk->val)); str2buf(&rand[2], ltk->rand, sizeof(ltk->rand)); -- 2.47.3