Received: by 2002:a05:6358:11c7:b0:104:8066:f915 with SMTP id i7csp1832873rwl; Fri, 24 Mar 2023 16:40:59 -0700 (PDT) X-Google-Smtp-Source: AKy350YMK7i98zOnbHBCkfFEJLnfQ1BijSiSMKJsPOU39adsx3Gis4h1MKYxAEfx5g3EuNffgWrq X-Received: by 2002:a17:907:a0b:b0:93e:739f:b0b3 with SMTP id bb11-20020a1709070a0b00b0093e739fb0b3mr3958294ejc.50.1679701259228; Fri, 24 Mar 2023 16:40:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1679701259; cv=none; d=google.com; s=arc-20160816; b=hyH+3c6V/V5A3SxZDBFaSt/8Xp8wviZzFfLx28PUuWMLnO85GWh7Ji3BB8MA3O+6FO XuzneOIb87u08/oy3q7cS4EgkWKfIYzipA8ienXrOZD/r+yTP3iF4N8z8lOQ09/tXn97 nZ9xvUWrfS0nDhU4cBxoAry3DqFRwHiUbMuEuXnwIPP/wAx+8Xf4C11YlPHG/O31EXLr YyZE5OsCo3HVFKSuM8BvtRCgroLtpgTD5FJ2GtW+bL6GqwskdEMJnbGA4SaYv52nc+7e 8SZfsEUfKVx9GSBhintP1kp1zJd1QFv+RvTsTdrOeTKsl2lMyFwvOmMhYAMlGP2B00fE 1lyA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:to:from :dkim-signature; bh=f+cQEHrmQWsCeZ3GOeOx+fTEZktLd6o7sz8WB+r/j/U=; b=WWb/eH5z9HM01hb71G7OuRSPSDix/jRRb8V4yE/7Cgx/E1Wh480VOqzqCX6Eh6TWWL pME2HeZ85x/oLYhpljHlm2HheQVhI4rtFxT7ptmasrKodZTNZOQqjxspGACHTPTozPQf DtgQdGx+1Ia0Wv2RIGIcnkboCflctQS/jdsAaMSH33xw2jVUM/20Dx2c3SXfcjPDvgT7 iVtn7H4d8v6FxrKVyAwF00p1Ua1d6vrmE3C4/UwDTymf3xczQNRZHvmQmAhLMOnHjqEn IBhIm6N5ucbDRSfsaHT7/ceZKsHMm7o9TrEB3wpgEp+egJEHoedV2pt/PULGptN+ly2j JyhA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=FBfgbLRD; spf=pass (google.com: domain of linux-bluetooth-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-bluetooth-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id lc15-20020a170906dfef00b00929b501af1asi6756512ejc.1008.2023.03.24.16.40.24; Fri, 24 Mar 2023 16:40:59 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-bluetooth-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=FBfgbLRD; spf=pass (google.com: domain of linux-bluetooth-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-bluetooth-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232060AbjCXXjJ (ORCPT + 99 others); Fri, 24 Mar 2023 19:39:09 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42658 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231985AbjCXXjH (ORCPT ); Fri, 24 Mar 2023 19:39:07 -0400 Received: from mail-pl1-x62e.google.com (mail-pl1-x62e.google.com [IPv6:2607:f8b0:4864:20::62e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 17E601E1E1 for ; Fri, 24 Mar 2023 16:39:04 -0700 (PDT) Received: by mail-pl1-x62e.google.com with SMTP id kq3so3243279plb.13 for ; Fri, 24 Mar 2023 16:39:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1679701143; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=f+cQEHrmQWsCeZ3GOeOx+fTEZktLd6o7sz8WB+r/j/U=; b=FBfgbLRDgWfi3vly0rp0Ly++WOMz/SRgzRrLbBFgpfe3Iu2aebTmUpxd3QUBp8LXG0 yv8LxbSiGwBK8stE9v25MELGfnD6TGhEpCOS+mU+KeoR2mLBzKqBH++xZn/YM8qvuPyt KAW2MhI5qhRIUJmM5mrfxeAzJfzywkXPuZAmUQBZa0BjLI6uog8nXCwh3MJ1kp2T5elp UTlXMrrYyeMf7ATl89/QXE+LQlFmyHOxcSavr+iQkZaxvx+8eQWMxuQlkjs4E1ZZH4LO mOvr8j/uDWdmvkX+q0w+C3r4qxw8sRJ9yeP+Ku/F3cBQxH6iDL5CC8cbWh2I0RXeeMop ErfQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1679701143; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=f+cQEHrmQWsCeZ3GOeOx+fTEZktLd6o7sz8WB+r/j/U=; b=PMWCS92L+TQxKLovvbZT35+RvYvq3igtr139U8ZCmfZjERsJbZhorzF82UwtpzJO79 36gcbW8xO2lBeiB0tD83DSwOH4vrOClaqcJcqMWf0rDI0p84VYGZt79ICur0GVKzEzPI 40PBrbAJwObi/uRx7yT7q7CIDBp1x5WSt+fikuCA9obeYB9L38dIt6348lwJzbhBrQBO l87Qnv8BE2/J3TU2/IDL74wdBYaamUDKEUrZl5WL/yJ5zgqVuSsAr4ACxVvv36BE7zwI 0Md90yk0xrw8xKvuce35EQ/j3V5aXsufXJWfQivVs9pxUITJjmTUaMNSh9uFFZM5DI83 0Tuw== X-Gm-Message-State: AAQBX9dsKAtLVV3V155LdQ0CESOhSnMbDlE8TkjmCkH4j8dKY9sc/IIA EZpCm9pC/8eu86GmKJm/KRDMRGeAzzo= X-Received: by 2002:a17:903:2291:b0:1a0:549d:3996 with SMTP id b17-20020a170903229100b001a0549d3996mr4538353plh.25.1679701143056; Fri, 24 Mar 2023 16:39:03 -0700 (PDT) Received: from lvondent-mobl4.. (c-71-59-129-171.hsd1.or.comcast.net. [71.59.129.171]) by smtp.gmail.com with ESMTPSA id d18-20020a170902aa9200b001a1add0d616sm13666771plr.161.2023.03.24.16.39.01 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Mar 2023 16:39:02 -0700 (PDT) From: Luiz Augusto von Dentz To: linux-bluetooth@vger.kernel.org Subject: [PATCH BlueZ 4/4] monitor: Cache IRK being parsed Date: Fri, 24 Mar 2023 16:38:56 -0700 Message-Id: <20230324233856.3693370-4-luiz.dentz@gmail.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230324233856.3693370-1-luiz.dentz@gmail.com> References: <20230324233856.3693370-1-luiz.dentz@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-0.2 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org From: Luiz Augusto von Dentz This caches any IRK being parsed so they can be used to resolve addresses later which fixes the problem of only being able to resolve addresses if the monitor happens to be active while SMP exchange the keys. --- monitor/keys.c | 26 ++++++++++++++++++++++++++ monitor/keys.h | 2 ++ monitor/packet.c | 1 + 3 files changed, 29 insertions(+) diff --git a/monitor/keys.c b/monitor/keys.c index d2fa3b23ffec..c1eebae82ac2 100644 --- a/monitor/keys.c +++ b/monitor/keys.c @@ -112,3 +112,29 @@ bool keys_resolve_identity(const uint8_t addr[6], uint8_t ident[6], return false; } + +static bool match_key(const void *data, const void *match_data) +{ + const struct irk_data *irk = data; + const uint8_t *key = match_data; + + return !memcmp(irk->key, key, 16); +} + +bool keys_add_identity(const uint8_t addr[6], uint8_t addr_type, + const uint8_t key[16]) +{ + struct irk_data *irk; + + irk = queue_find(irk_list, match_key, key); + if (!irk) { + irk = new0(struct irk_data, 1); + memcpy(irk->key, key, 16); + queue_push_tail(irk_list, irk); + } + + memcpy(irk->addr, addr, 6); + irk->addr_type = addr_type; + + return true; +} diff --git a/monitor/keys.h b/monitor/keys.h index e40c90fa9c72..f44d33295269 100644 --- a/monitor/keys.h +++ b/monitor/keys.h @@ -20,3 +20,5 @@ void keys_update_identity_addr(const uint8_t addr[6], uint8_t addr_type); bool keys_resolve_identity(const uint8_t addr[6], uint8_t ident[6], uint8_t *ident_type); +bool keys_add_identity(const uint8_t addr[6], uint8_t addr_type, + const uint8_t key[16]); diff --git a/monitor/packet.c b/monitor/packet.c index d9e8abf41fed..c6ff16eda9cf 100644 --- a/monitor/packet.c +++ b/monitor/packet.c @@ -12870,6 +12870,7 @@ static void mgmt_print_identity_resolving_key(const void *data) mgmt_print_address(data, address_type); print_hex_field("Key", data + 7, 16); + keys_add_identity(data, address_type, data + 7); } static void mgmt_print_signature_resolving_key(const void *data) -- 2.39.2