Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp374739pxf; Wed, 7 Apr 2021 01:26:55 -0700 (PDT) X-Google-Smtp-Source: ABdhPJymQ6nOh0WMiF6JrKWsRO4kNLFoz99Dt1Gyq78uSqqUTXtNF2/S/Dw9QcrtD5ECNR5Rv4lM X-Received: by 2002:a05:6e02:80a:: with SMTP id u10mr1878025ilm.221.1617784015245; Wed, 07 Apr 2021 01:26:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1617784015; cv=none; d=google.com; s=arc-20160816; b=yvFq7M/CEq6EX8Z4MGefXMhKkY/L2oUoVuhShqFp66DdgWnXkfQP/tPDbD9H2ACXsW ixIyk75KowP0o8cQaPi31gEYhWoTt89GWX3Fws9CD4oaSJ6mTvOKA106XGsm/Glq/8nh Y2sS5GqwFXFXWG7oRtu8WnGV4ApOUjBymjIvdkc7DMCZkkQLc0UNBrneYYgBiFdUn8uA bumPMF57vPyUwv8Dp8wizRFrXclgh2EM7ToDchhODHQYXC8FkwdCPxLsjF7XDk1bYr6a 854HAMTzEermIBEGumO3bjaAwjV5bmq9LO3RG7E1pjpnXW+1VffIhJ4PKmCbyqEoqWoc mdug== 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 :message-id:date:subject:to:from; bh=dirVEGVwalJhVo7jAPFJW/eZupeea9N0/U1dWDPYDwM=; b=Hf0/JlLE4OdAISoRgivKdl/hYVmewI0aITnVSodSjVxAmMMiNAiXGDb8KGZTqy/hJK y47O5vvi2UNZzwoA4FzU46hU2WryPG+4SkFaeHbmaYKKmg5cwLhFkaQJlsf/9jmKgDz4 +Uwap9WDaIdcQ7bDvgctCHih+Elk3ULHfyVrFnfG0j8WhdDVXaLy7++3qA/miAbzhBAu dMvzwlw4FBHcTH1iWIqMlEgZbUsYDAwkkN0h2V+xnalwOYWlTi1bPCnhgBFZlTzfYtMy FrEE7hKJLZrNrb3kv0olBrzIRRK5t78n8OAtY1nXhtgVjeXhyttUWVTqap4kc9OSWq73 IDBw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-bluetooth-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-bluetooth-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id n6si20041414jaj.81.2021.04.07.01.26.41; Wed, 07 Apr 2021 01:26:55 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-bluetooth-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-bluetooth-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-bluetooth-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235595AbhDFT4N (ORCPT + 99 others); Tue, 6 Apr 2021 15:56:13 -0400 Received: from coyote.holtmann.net ([212.227.132.17]:45469 "EHLO mail.holtmann.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237939AbhDFT4K (ORCPT ); Tue, 6 Apr 2021 15:56:10 -0400 Received: from localhost.localdomain (p4ff9f418.dip0.t-ipconnect.de [79.249.244.24]) by mail.holtmann.org (Postfix) with ESMTPSA id 4E2A0CECC9 for ; Tue, 6 Apr 2021 22:03:44 +0200 (CEST) From: Marcel Holtmann To: linux-bluetooth@vger.kernel.org Subject: [PATCH v3 5/5] Bluetooth: Allow Microsoft extension to indicate curve validation Date: Tue, 6 Apr 2021 21:55:56 +0200 Message-Id: <20210406195556.316663-5-marcel@holtmann.org> X-Mailer: git-send-email 2.30.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org Some controllers don't support the Simple Pairing Options feature that can indicate the support for P-192 and P-256 public key validation. However they might support the Microsoft vendor extension that can indicate the validiation capability as well. Signed-off-by: Marcel Holtmann --- include/net/bluetooth/hci_core.h | 1 + net/bluetooth/mgmt.c | 5 ++++- net/bluetooth/msft.c | 8 ++++++++ net/bluetooth/msft.h | 6 ++++++ 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h index 58f7eada26fd..c73ac52af186 100644 --- a/include/net/bluetooth/hci_core.h +++ b/include/net/bluetooth/hci_core.h @@ -584,6 +584,7 @@ struct hci_dev { #if IS_ENABLED(CONFIG_BT_MSFTEXT) __u16 msft_opcode; void *msft_data; + bool msft_curve_validity; #endif #if IS_ENABLED(CONFIG_BT_AOSPEXT) diff --git a/net/bluetooth/mgmt.c b/net/bluetooth/mgmt.c index 59f8016c4866..f9be7f9084d6 100644 --- a/net/bluetooth/mgmt.c +++ b/net/bluetooth/mgmt.c @@ -3730,8 +3730,11 @@ static int read_controller_cap(struct sock *sk, struct hci_dev *hdev, /* When the Read Simple Pairing Options command is supported, then * the remote public key validation is supported. + * + * Alternatively, when Microsoft extensions are available, they can + * indicate support for public key validation as well. */ - if (hdev->commands[41] & 0x08) + if ((hdev->commands[41] & 0x08) || msft_curve_validity(hdev)) flags |= 0x01; /* Remote public key validation (BR/EDR) */ flags |= 0x02; /* Remote public key validation (LE) */ diff --git a/net/bluetooth/msft.c b/net/bluetooth/msft.c index 47b104f318e9..e28f15439ce4 100644 --- a/net/bluetooth/msft.c +++ b/net/bluetooth/msft.c @@ -142,6 +142,9 @@ static bool read_supported_features(struct hci_dev *hdev, msft->evt_prefix_len = rp->evt_prefix_len; msft->features = __le64_to_cpu(rp->features); + if (msft->features & MSFT_FEATURE_MASK_CURVE_VALIDITY) + hdev->msft_curve_validity = true; + kfree_skb(skb); return true; @@ -605,3 +608,8 @@ int msft_set_filter_enable(struct hci_dev *hdev, bool enable) return err; } + +bool msft_curve_validity(struct hci_dev *hdev) +{ + return hdev->msft_curve_validity; +} diff --git a/net/bluetooth/msft.h b/net/bluetooth/msft.h index 88ed613dfa08..6e56d94b88d8 100644 --- a/net/bluetooth/msft.h +++ b/net/bluetooth/msft.h @@ -22,6 +22,7 @@ int msft_remove_monitor(struct hci_dev *hdev, struct adv_monitor *monitor, u16 handle); void msft_req_add_set_filter_enable(struct hci_request *req, bool enable); int msft_set_filter_enable(struct hci_dev *hdev, bool enable); +bool msft_curve_validity(struct hci_dev *hdev); #else @@ -54,4 +55,9 @@ static inline int msft_set_filter_enable(struct hci_dev *hdev, bool enable) return -EOPNOTSUPP; } +static inline bool msft_curve_validity(struct hci_dev *hdev) +{ + return false; +} + #endif -- 2.30.2