Received: by 2002:a05:6a10:f347:0:0:0:0 with SMTP id d7csp1843795pxu; Tue, 24 Nov 2020 10:10:24 -0800 (PST) X-Google-Smtp-Source: ABdhPJxGuhvRJvk/NgtDTMvQNddDpEQdGfEAv9V1Yfz+3/rAqBkyykZ9wIek7F5HsYdEBPOKQfGE X-Received: by 2002:a17:906:e53:: with SMTP id q19mr5561223eji.254.1606241424040; Tue, 24 Nov 2020 10:10:24 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1606241424; cv=none; d=google.com; s=arc-20160816; b=VwPSHJfUD8O5o5cxZlTVvdts/ZlpE8gmcZT+EYWp+yEiwSKFb+t70JOJxNZeyDaNGy qMHnM/4r+k3Lr99yjIrzJonM6BMNTrYirPIqN1kKCCDjYqVYwIHdzx/y6tmK43tHsRLR F2q8ayvMzdAfeK8r0ymvxEQcHpm8Y2FUu2Oilh757hDYRPS1QkdBHz2CN0LPB6XyKY1u Z4PFTjmBPD5RVxCwnI2eKvz7O5wWNndSxpjXmf1QD/5GKwvGe932lP/ulIhKlQ1US0W8 VaRQx63a6gaTzsQBQDvX9156SECJkJd8eyS3U4xZb3CXWZnFBpO1kgyv9lvPDINHBR02 4Kqg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:references:mime-version :message-id:in-reply-to:date:sender:dkim-signature; bh=jr6n+gGQ0gPUfD8Udg6Byq8ZbVVPkJmpa2QPyf3HxP0=; b=TKV52f+0qcNpyvLvRLEzA7GZcdWfVrZ8NTtaHvq3fJNF1L8sEescxmBcgh5fn8CUZp xxs0LWwAG/BI2A6vuTSskQY6RKtqDb24s6JPdGuPE4JZ8TEYzehAFbs+loW6V3RvI74u 91HtU2TU2SynFOwMJyIt3VqBQ0FyxK0R6XehZIZsT8vD3AdoizHWTK96uk6Q2E5bTEQ/ meLAx+Gd/anZCWQjA8UNdV88oH8ZJoXdJGRtHUUnHuBNtLS3JVSr92vY352+bjTeJDBI SItKtHib/VeYH3LhLpieuBtoWXhaxJvi4al+hme3wFNeAihC2IsHWNl7d6JqSPX0WQK4 nAaA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=bRjdXk+Y; 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; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id y23si8736289eju.563.2020.11.24.10.09.59; Tue, 24 Nov 2020 10:10:24 -0800 (PST) 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; dkim=pass header.i=@google.com header.s=20161025 header.b=bRjdXk+Y; 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; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2404154AbgKXSIL (ORCPT + 99 others); Tue, 24 Nov 2020 13:08:11 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49024 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2404275AbgKXSID (ORCPT ); Tue, 24 Nov 2020 13:08:03 -0500 Received: from mail-qk1-x74a.google.com (mail-qk1-x74a.google.com [IPv6:2607:f8b0:4864:20::74a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D0A64C0613D6 for ; Tue, 24 Nov 2020 10:08:01 -0800 (PST) Received: by mail-qk1-x74a.google.com with SMTP id p129so2485184qkc.20 for ; Tue, 24 Nov 2020 10:08:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=sender:date:in-reply-to:message-id:mime-version:references:subject :from:to:cc; bh=jr6n+gGQ0gPUfD8Udg6Byq8ZbVVPkJmpa2QPyf3HxP0=; b=bRjdXk+YNRs6MGMHpIX7PpUx3mpM9cFJM/71xN+gyLK2BLi19VstuHwyktRYwQoaCS Veb2hjhaqQLqSh6rmORx+hGHxW9/EdaRy+yQ9o42B7NjlGknybT/Og3dvR2PWcTF/Pvd n32vpF3CAPSFFJ84aBNlG+vZvjkVt0y8DULM8AnzYd5sZ/N9K6RiJOBNQdJKi3JrEf8Y KzWIY+rgW5ddA3oMIT78HCvdNlcfT8Q8iNQka59QjBXcs+VMP5DB21kmYnxbhSdGHeyt hKcrx9qIoz8mB8HamXwima6aOi7SweqXE+ia2dMIpj+eV735ZUYhyKFxQ21vPvflyqv9 xYsQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=jr6n+gGQ0gPUfD8Udg6Byq8ZbVVPkJmpa2QPyf3HxP0=; b=HL9J5aL3l0GULIg2bCBDJkY/q9MYLuBQer8DFzJSUQqgHIhcabibQLsBSAWJCpaZi7 vOHUOiGADB7mAhHHPKbVqzvT9TPnGARnW0Y63TD3/3Ssf6cnyP4Lsbocw2S8b1f4SPtv w40fHR/SgZ0q/27qn+oIg2zs7gK864oMjqBt35MvHLzvB518yClMuDotK83E3GIaDyZ0 onvXJHuakXQZuqOTY+hLFEASJThCIdeLqTQo1/hp85WA1WLeH7mUd1Kr5CiBOIOMSTaD J4C2qxSc5NRS6caSRfgoyKLXYDjickov4Gqpp+iRZyYtFz/iPMmdoHuV3i1f7F0cfYzg jIfw== X-Gm-Message-State: AOAM531R6gBekMJV+KoKgaPKHhffqCwKwLFAiae4wQWjemBRC9MujeQv SB9oWDgB7VzTbWGuSjcxyZgiSDBW0U+Iftc7fBiv Sender: "danielwinkler via sendgmr" X-Received: from danielwinkler-linux.mtv.corp.google.com ([2620:15c:202:201:f693:9fff:fef4:4e59]) (user=danielwinkler job=sendgmr) by 2002:a0c:ba20:: with SMTP id w32mr6092787qvf.50.1606241281016; Tue, 24 Nov 2020 10:08:01 -0800 (PST) Date: Tue, 24 Nov 2020 10:07:46 -0800 In-Reply-To: <20201124180746.1773091-1-danielwinkler@google.com> Message-Id: <20201124100610.v5.5.I5068c01cae3cea674a96e103a0cf4d8c81425a4f@changeid> Mime-Version: 1.0 References: <20201124180746.1773091-1-danielwinkler@google.com> X-Mailer: git-send-email 2.29.2.454.gaff20da3a2-goog Subject: [PATCH v5 5/5] Bluetooth: Change MGMT security info CMD to be more generic From: Daniel Winkler To: marcel@holtmann.org Cc: chromeos-bluetooth-upstreaming@chromium.org, linux-bluetooth@vger.kernel.org, Daniel Winkler , Sonny Sasaka , "David S. Miller" , Jakub Kicinski , Johan Hedberg , linux-kernel@vger.kernel.org, netdev@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org For advertising, we wish to know the LE tx power capabilities of the controller in userspace, so this patch edits the Security Info MGMT command to be more generic, such that other various controller capabilities can be included in the EIR data. This change also includes the LE min and max tx power into this newly-named command. The change was tested by manually verifying that the MGMT command returns the tx power range as expected in userspace. Reviewed-by: Sonny Sasaka Signed-off-by: Daniel Winkler --- Changes in v5: None Changes in v4: - Combine LE tx range into a single EIR field for MGMT capabilities cmd Changes in v3: - Re-using security info MGMT command to carry controller capabilities Changes in v2: - Fixed sparse error in Capabilities MGMT command include/net/bluetooth/mgmt.h | 15 +++++++++----- net/bluetooth/mgmt.c | 39 +++++++++++++++++++++++------------- 2 files changed, 35 insertions(+), 19 deletions(-) diff --git a/include/net/bluetooth/mgmt.h b/include/net/bluetooth/mgmt.h index 2e18e4173e2fa5..f9a6638e20b3c6 100644 --- a/include/net/bluetooth/mgmt.h +++ b/include/net/bluetooth/mgmt.h @@ -686,11 +686,16 @@ struct mgmt_cp_set_blocked_keys { #define MGMT_OP_SET_WIDEBAND_SPEECH 0x0047 -#define MGMT_OP_READ_SECURITY_INFO 0x0048 -#define MGMT_READ_SECURITY_INFO_SIZE 0 -struct mgmt_rp_read_security_info { - __le16 sec_len; - __u8 sec[]; +#define MGMT_CAP_SEC_FLAGS 0x01 +#define MGMT_CAP_MAX_ENC_KEY_SIZE 0x02 +#define MGMT_CAP_SMP_MAX_ENC_KEY_SIZE 0x03 +#define MGMT_CAP_LE_TX_PWR 0x04 + +#define MGMT_OP_READ_CONTROLLER_CAP 0x0048 +#define MGMT_READ_CONTROLLER_CAP_SIZE 0 +struct mgmt_rp_read_controller_cap { + __le16 cap_len; + __u8 cap[0]; } __packed; #define MGMT_OP_READ_EXP_FEATURES_INFO 0x0049 diff --git a/net/bluetooth/mgmt.c b/net/bluetooth/mgmt.c index 668a62c8181eb1..d8adf78a437e0b 100644 --- a/net/bluetooth/mgmt.c +++ b/net/bluetooth/mgmt.c @@ -110,7 +110,7 @@ static const u16 mgmt_commands[] = { MGMT_OP_SET_APPEARANCE, MGMT_OP_SET_BLOCKED_KEYS, MGMT_OP_SET_WIDEBAND_SPEECH, - MGMT_OP_READ_SECURITY_INFO, + MGMT_OP_READ_CONTROLLER_CAP, MGMT_OP_READ_EXP_FEATURES_INFO, MGMT_OP_SET_EXP_FEATURE, MGMT_OP_READ_DEF_SYSTEM_CONFIG, @@ -176,7 +176,7 @@ static const u16 mgmt_untrusted_commands[] = { MGMT_OP_READ_CONFIG_INFO, MGMT_OP_READ_EXT_INDEX_LIST, MGMT_OP_READ_EXT_INFO, - MGMT_OP_READ_SECURITY_INFO, + MGMT_OP_READ_CONTROLLER_CAP, MGMT_OP_READ_EXP_FEATURES_INFO, MGMT_OP_READ_DEF_SYSTEM_CONFIG, MGMT_OP_READ_DEF_RUNTIME_CONFIG, @@ -3710,13 +3710,14 @@ static int set_wideband_speech(struct sock *sk, struct hci_dev *hdev, return err; } -static int read_security_info(struct sock *sk, struct hci_dev *hdev, - void *data, u16 data_len) +static int read_controller_cap(struct sock *sk, struct hci_dev *hdev, + void *data, u16 data_len) { - char buf[16]; - struct mgmt_rp_read_security_info *rp = (void *)buf; - u16 sec_len = 0; + char buf[20]; + struct mgmt_rp_read_controller_cap *rp = (void *)buf; + u16 cap_len = 0; u8 flags = 0; + u8 tx_power_range[2]; bt_dev_dbg(hdev, "sock %p", sk); @@ -3740,23 +3741,33 @@ static int read_security_info(struct sock *sk, struct hci_dev *hdev, flags |= 0x08; /* Encryption key size enforcement (LE) */ - sec_len = eir_append_data(rp->sec, sec_len, 0x01, &flags, 1); + cap_len = eir_append_data(rp->cap, cap_len, MGMT_CAP_SEC_FLAGS, + &flags, 1); /* When the Read Simple Pairing Options command is supported, then * also max encryption key size information is provided. */ if (hdev->commands[41] & 0x08) - sec_len = eir_append_le16(rp->sec, sec_len, 0x02, + cap_len = eir_append_le16(rp->cap, cap_len, + MGMT_CAP_MAX_ENC_KEY_SIZE, hdev->max_enc_key_size); - sec_len = eir_append_le16(rp->sec, sec_len, 0x03, SMP_MAX_ENC_KEY_SIZE); + cap_len = eir_append_le16(rp->cap, cap_len, + MGMT_CAP_SMP_MAX_ENC_KEY_SIZE, + SMP_MAX_ENC_KEY_SIZE); + + /* Append the min/max LE tx power parameters */ + memcpy(&tx_power_range[0], &hdev->min_le_tx_power, 1); + memcpy(&tx_power_range[1], &hdev->max_le_tx_power, 1); + cap_len = eir_append_data(rp->cap, cap_len, MGMT_CAP_LE_TX_PWR, + tx_power_range, 2); - rp->sec_len = cpu_to_le16(sec_len); + rp->cap_len = cpu_to_le16(cap_len); hci_dev_unlock(hdev); - return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_READ_SECURITY_INFO, 0, - rp, sizeof(*rp) + sec_len); + return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_READ_CONTROLLER_CAP, 0, + rp, sizeof(*rp) + cap_len); } #ifdef CONFIG_BT_FEATURE_DEBUG @@ -8193,7 +8204,7 @@ static const struct hci_mgmt_handler mgmt_handlers[] = { { set_blocked_keys, MGMT_OP_SET_BLOCKED_KEYS_SIZE, HCI_MGMT_VAR_LEN }, { set_wideband_speech, MGMT_SETTING_SIZE }, - { read_security_info, MGMT_READ_SECURITY_INFO_SIZE, + { read_controller_cap, MGMT_READ_CONTROLLER_CAP_SIZE, HCI_MGMT_UNTRUSTED }, { read_exp_features_info, MGMT_READ_EXP_FEATURES_INFO_SIZE, HCI_MGMT_UNTRUSTED | -- 2.29.2.454.gaff20da3a2-goog