Received: by 2002:a05:6358:4e97:b0:b3:742d:4702 with SMTP id ce23csp3831714rwb; Tue, 16 Aug 2022 09:26:31 -0700 (PDT) X-Google-Smtp-Source: AA6agR419qkxdJXrlDlClVCa+uGwft1MbKdyw/IcgTBpC/yznAfq26WdTsjVyMEPpx49BF9Fm3Bk X-Received: by 2002:a05:6a00:4c1b:b0:532:8f07:bba0 with SMTP id ea27-20020a056a004c1b00b005328f07bba0mr17744701pfb.37.1660667190969; Tue, 16 Aug 2022 09:26:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1660667190; cv=none; d=google.com; s=arc-20160816; b=F2nV6BdGErDIdAHQn4Dl+pTKupQOEjMn/ZS03raUNz8GPSy7hDn9inoOpzzoSk1dTt IouloqP4uf8cXu2VoAfJL5PTWsUrAzEDn0RiMpOCo7z5dldB8CDBi/TCA+GZaXUCeFNO j7zpEGNn4EJxHH9m0F/FzCudwkLKsOELpJTPiJW3UC1r+GB34jZ2OuRMZI0whEOIIGfp 1tLPWTkfS2oQO/ZEbtmVeKO33hmSHfwmQnBVP8/zgCDgiVEXk0rpSOOX7gbxXSk/aE/d 5enG7M+PAI8iUcDKqnmHLYRM4T1TOn7mI+oI3i7T0GZLXi63luOBMcfPBdoz7sq/INVL 8oPQ== 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:cc:to:from:dkim-signature; bh=rUh+9PWK2nfbiY6F4NnVQ30bpCeCjx82dbWkihVBJBs=; b=hAA3WBHFAhUeH5sM7e2kCpITHoQuNWK+xlVWpWNH9UpS63qkcGyu8emWOwI5IK4S5r 1IyTKzDyXdrpJocIc9bfb7GVZFG/dEMD/FFnbWWt4J4VoyMray7ep/iicmxiPiXP2ZiP hJkOJgawx3MIPFF9I1kneSTTJ1E4dMYjpHdIjwSjfxyI0mhhP8v6mlYPRWQVe4CipynZ jfJ838r1kPRBivb1B/o2NtmWwk3nGk26BF9/4yp0D4pSNyjHw7zFaow9uRZ7fws7NTVd R847ofgFIwtOCoeAhIIJG3ijOhG+ILpONWAAdPufD1X6hHFD36iEE0yoMXPCMeXmYpPe qx8A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=GEZT4SkH; 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=NONE dis=NONE) header.from=intel.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id b11-20020a631b4b000000b0041d4865235esi14638528pgm.874.2022.08.16.09.25.57; Tue, 16 Aug 2022 09:26:30 -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=@intel.com header.s=Intel header.b=GEZT4SkH; 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=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235754AbiHPQSK (ORCPT + 99 others); Tue, 16 Aug 2022 12:18:10 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50096 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231324AbiHPQSJ (ORCPT ); Tue, 16 Aug 2022 12:18:09 -0400 Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1191F78215 for ; Tue, 16 Aug 2022 09:18:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1660666685; x=1692202685; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=eHZMvTWHfkMF8DkHs8ZLyvMuv8nwHv6ZLWyTtYMzKZ0=; b=GEZT4SkHu/SmU7bRCW6ZmwA4IjqWjZTw+0iEDZw/mkjaWaG1Thr+yc4t OuO+MqbTlwwazgrdQP5iH8Zoeyj5b5FibOwqaCHBkhtpTBr24ua9P6lcD JhaMJbfFuy8glx7cmAG3DDmrq4c2gSQdhSFuT52C/5J2Jk9bfQkFpAPJO FIl2/3DYLEWBbcn2b1V5Ix2kcDOaXu2dDiArj0v6480CpxWX9pTm7eECa vJPGXeJix6Q2wEEesWfNM2+RIbP9gmXbR+P37Hy7gs/QoRgpocw24B+rG pgo6VREexDJ59Ohgh/om1qPyUMtH/MPFpMCLDQxx1OR0cFGCUkD1ZZVY0 g==; X-IronPort-AV: E=McAfee;i="6400,9594,10441"; a="272033746" X-IronPort-AV: E=Sophos;i="5.93,241,1654585200"; d="scan'208";a="272033746" Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 16 Aug 2022 09:18:04 -0700 X-IronPort-AV: E=Sophos;i="5.93,241,1654585200"; d="scan'208";a="557760671" Received: from frperuch-mobl1.amr.corp.intel.com (HELO bgi1-mobl2.amr.corp.intel.com) ([10.212.23.122]) by orsmga003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 16 Aug 2022 09:18:04 -0700 From: Brian Gix To: linux-bluetooth@vger.kernel.org Cc: marcel@holtmann.org, luiz.dentz@gmail.com, brian.gix@intel.com Subject: [PATCH] Bluetooth: Normalize HCI_OP_READ_ENC_KEY_SIZE cmdcmplt Date: Tue, 16 Aug 2022 09:17:56 -0700 Message-Id: <20220816161756.997539-1-brian.gix@intel.com> X-Mailer: git-send-email 2.37.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_PASS,SPF_NONE,T_SCC_BODY_TEXT_LINE autolearn=ham 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 The HCI_OP_READ_ENC_KEY_SIZE command is converted from using the deprecated hci_request mechanism to use hci_send_cmd, with an accompanying hci_cc_read_enc_key_size to handle it's return response. Signed-off-by: Brian Gix --- net/bluetooth/hci_event.c | 92 +++++++++++++++++++-------------------- 1 file changed, 45 insertions(+), 47 deletions(-) diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c index 938abe6352bf..a0c3583b29bb 100644 --- a/net/bluetooth/hci_event.c +++ b/net/bluetooth/hci_event.c @@ -712,6 +712,47 @@ static u8 hci_cc_read_local_version(struct hci_dev *hdev, void *data, return rp->status; } +static u8 hci_cc_read_enc_key_size(struct hci_dev *hdev, void *data, + struct sk_buff *skb) +{ + struct hci_rp_read_enc_key_size *rp = data; + struct hci_conn *conn; + u16 handle; + u8 status = rp->status; + + bt_dev_dbg(hdev, "status 0x%2.2x", status); + + handle = le16_to_cpu(rp->handle); + + hci_dev_lock(hdev); + + conn = hci_conn_hash_lookup_handle(hdev, handle); + if (!conn) { + status = 0xFF; + goto done; + } + + /* While unexpected, the read_enc_key_size command may fail. The most + * secure approach is to then assume the key size is 0 to force a + * disconnection. + */ + if (status) { + bt_dev_err(hdev, "failed to read key size for handle %u", + handle); + conn->enc_key_size = 0; + } else { + conn->enc_key_size = rp->key_size; + status = 0; + } + + hci_encrypt_cfm(conn, 0); + +done: + hci_dev_unlock(hdev); + + return status; +} + static u8 hci_cc_read_local_commands(struct hci_dev *hdev, void *data, struct sk_buff *skb) { @@ -3534,47 +3575,6 @@ static void hci_remote_name_evt(struct hci_dev *hdev, void *data, hci_dev_unlock(hdev); } -static void read_enc_key_size_complete(struct hci_dev *hdev, u8 status, - u16 opcode, struct sk_buff *skb) -{ - const struct hci_rp_read_enc_key_size *rp; - struct hci_conn *conn; - u16 handle; - - BT_DBG("%s status 0x%02x", hdev->name, status); - - if (!skb || skb->len < sizeof(*rp)) { - bt_dev_err(hdev, "invalid read key size response"); - return; - } - - rp = (void *)skb->data; - handle = le16_to_cpu(rp->handle); - - hci_dev_lock(hdev); - - conn = hci_conn_hash_lookup_handle(hdev, handle); - if (!conn) - goto unlock; - - /* While unexpected, the read_enc_key_size command may fail. The most - * secure approach is to then assume the key size is 0 to force a - * disconnection. - */ - if (rp->status) { - bt_dev_err(hdev, "failed to read key size for handle %u", - handle); - conn->enc_key_size = 0; - } else { - conn->enc_key_size = rp->key_size; - } - - hci_encrypt_cfm(conn, 0); - -unlock: - hci_dev_unlock(hdev); -} - static void hci_encrypt_change_evt(struct hci_dev *hdev, void *data, struct sk_buff *skb) { @@ -3639,7 +3639,6 @@ static void hci_encrypt_change_evt(struct hci_dev *hdev, void *data, /* Try reading the encryption key size for encrypted ACL links */ if (!ev->status && ev->encrypt && conn->type == ACL_LINK) { struct hci_cp_read_enc_key_size cp; - struct hci_request req; /* Only send HCI_Read_Encryption_Key_Size if the * controller really supports it. If it doesn't, assume @@ -3650,12 +3649,9 @@ static void hci_encrypt_change_evt(struct hci_dev *hdev, void *data, goto notify; } - hci_req_init(&req, hdev); - cp.handle = cpu_to_le16(conn->handle); - hci_req_add(&req, HCI_OP_READ_ENC_KEY_SIZE, sizeof(cp), &cp); - - if (hci_req_run_skb(&req, read_enc_key_size_complete)) { + if (hci_send_cmd(hdev, HCI_OP_READ_ENC_KEY_SIZE, + sizeof(cp), &cp)) { bt_dev_err(hdev, "sending read key size failed"); conn->enc_key_size = HCI_LINK_KEY_SIZE; goto notify; @@ -4037,6 +4033,8 @@ static const struct hci_cc { sizeof(struct hci_rp_read_local_amp_info)), HCI_CC(HCI_OP_READ_CLOCK, hci_cc_read_clock, sizeof(struct hci_rp_read_clock)), + HCI_CC(HCI_OP_READ_ENC_KEY_SIZE, hci_cc_read_enc_key_size, + sizeof(struct hci_rp_read_enc_key_size)), HCI_CC(HCI_OP_READ_INQ_RSP_TX_POWER, hci_cc_read_inq_rsp_tx_power, sizeof(struct hci_rp_read_inq_rsp_tx_power)), HCI_CC(HCI_OP_READ_DEF_ERR_DATA_REPORTING, -- 2.37.1