From nobody Thu Apr 2 20:25:27 2026 Received: from MRWPR03CU001.outbound.protection.outlook.com (mail-francesouthazon11021114.outbound.protection.outlook.com [40.107.130.114]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E252F2D6E4B; Thu, 26 Mar 2026 13:32:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.130.114 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774531975; cv=fail; b=QRu58PNQ6n3vyIFMd334SwGZSqMOp3cTFH+v0OqKw8HjRPe/bDoX/EPdZOne8+09ZZD7PvLZhtJcaxsd4pHJ8CQnqvmMp6Mt2OVZRQ/A3mDpRTBBwrQT+ja/4HY6gQTvD0BpLjzrX8dK3/ZMEeBMrmHNgVnc87j/ENzWYV1WOQE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774531975; c=relaxed/simple; bh=Nz/NsebAXnofWjEw6aqwTRhwpHYrGm0wtp90N/IAAZ0=; h=From:To:CC:Subject:Date:Message-ID:Content-Type:MIME-Version; b=p7fPAPzruN3cSWt/oDJaOvtA19L7lEetYHZQtVHEeDtBhxEJFzmT6xbuQLRqBdVUrLymHy6zTSUUG5iRrlGwqiZio8ktNFbq4nA8w/HdKBqr9668Uhd3ClV3anZD3954yAmU6f39NPks28VuvYbpnlHhQ1tk3Cnmsu/8dtx6JL8= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=1seal.org; spf=pass smtp.mailfrom=1seal.org; dkim=pass (2048-bit key) header.d=1seal.org header.i=@1seal.org header.b=WRqORwsW; arc=fail smtp.client-ip=40.107.130.114 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=1seal.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=1seal.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=1seal.org header.i=@1seal.org header.b="WRqORwsW" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Kz+VSUDdLH2rjeTvRg4CuBH7tsbIyaQzVe7tT8MFMckn2WHzzd1We3z+hDCIFPpp4FkKreLndOcTL+XfrScKijP7SILZq9H7UyaPNaqEWEaN+W3pHnMv4BNDpVRA0MIruOGbyL4cn1f2NDbdedYUJBtqUujHZ89pQf7lC0lmFyrMCybfm2Ugh8mGldw87ZXdsKYOA08fJA0BThBU8xFl9TmdsMqVICdhxE2I27BE/7mf6G+PhavHAQniMEvTMIIWD59OqIiJay/qFpkcDyOa6/pGb2Dc+Riq0kYf+BT67rK3qwb2ukSU30Hf+wJ9O1ABz0DEHw619m3RY4het5pUkg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Nz/NsebAXnofWjEw6aqwTRhwpHYrGm0wtp90N/IAAZ0=; b=axAcOL7eERKwwlq9CUZZmxMtNpcrRQiFDoAfqPjdqJ/CZIMuVpoWv613mvAMTRMT6Mn+6wjUyEsl3uEA+0E3lNORWaq38vW7bIpeIBZy3Nhds4EINoYQQ/Ue17JTGsDW4ElpniO+RLq2hI2nLF9Oul8TXkUWnc2ir7tdGdQ63aiD6mWXPkZlLVEpiGTLOkACKXEm5cuDZP7jcSNtCr+m9r4K8B5ky2x/ZinBHvBxZpRrAxBI6MqIz6J0jexPXAkUthP5/GrOaA/wCQACEKRQ3XkGD8viPi7qb2NLiq0W/YHEXRfpdy9OYefNTkYUpzO713LH+yzE7EgL4X2JhaRTKQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=1seal.org; dmarc=pass action=none header.from=1seal.org; dkim=pass header.d=1seal.org; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1seal.org; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Nz/NsebAXnofWjEw6aqwTRhwpHYrGm0wtp90N/IAAZ0=; b=WRqORwsWyCRUZn9zwQX15+fnz/X/FfwtB65qJU/X8wk3RCgsfAOmqXcPu+hkEGdWUt0qqsFvHOxJ3R0W1rxecSZcrG4hEeH3yHLAW53pVRHDOUBXUleOFZYIObD69QDjJBnWt96ts+FJNLhPOUXwq8Rq5zRbHfvc1Y6ASLkcm065qxhldssrTlZ54/B02GKL+zeo7WyfiDD28lrSLgyzyN/HwdbqPFqhCUN0bYl4ejiGXCcSR5aNwuPFKZNYuI/dwx3wnoiSsTYXxk0NJoazLvyZVtiu9+xa6Jp9vlbxD1wxyrNyOpm8bB9v/zpCRoBPLHjKrwbsBYYetQE37YhT2w== Received: from PA4PR04MB7679.eurprd04.prod.outlook.com (2603:10a6:102:e0::20) by AS8PR04MB8500.eurprd04.prod.outlook.com (2603:10a6:20b:343::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9745.20; Thu, 26 Mar 2026 13:32:50 +0000 Received: from PA4PR04MB7679.eurprd04.prod.outlook.com ([fe80::7e8:b5fc:9762:7a6d]) by PA4PR04MB7679.eurprd04.prod.outlook.com ([fe80::7e8:b5fc:9762:7a6d%5]) with mapi id 15.20.9723.030; Thu, 26 Mar 2026 13:32:50 +0000 From: Oleh Konko To: "linux-bluetooth@vger.kernel.org" CC: "marcel@holtmann.org" , "luiz.dentz@gmail.com" , "gregkh@linuxfoundation.org" , "linux-kernel@vger.kernel.org" , "stable@vger.kernel.org" Subject: [PATCH v3] Bluetooth: hci_event: move wake reason storage into validated event handlers Thread-Topic: [PATCH v3] Bluetooth: hci_event: move wake reason storage into validated event handlers Thread-Index: AQHcvSUK7PL4RIBG1k6HyOgoH+VmKw== Date: Thu, 26 Mar 2026 13:32:50 +0000 Message-ID: <9b8a0917d56b4a67ba541e8a5eb3abb8.security@1.0.0.127.in-addr.arpa> Accept-Language: ru-RU, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=1seal.org; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PA4PR04MB7679:EE_|AS8PR04MB8500:EE_ x-ms-office365-filtering-correlation-id: 15c32368-2d29-45e7-adad-08de8b3c2cfb x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|376014|1800799024|366016|38070700021|18002099003|56012099003|7055299006; x-microsoft-antispam-message-info: YMSAkovzt0NfPcG4MII9uXSek/yx+w6aSQalkqGQLX1a3hplea0LRwFBw8uQCziAnd4GY8dGVzKLNywzXfELkG7PkF7OokewLUZKdNhDOPWkTFkGjCM1YRJRHwfUvUrmfXeM4IXhsqBX1DfWNbuv4BYCv1ak25+BlSkPK7CXQOf7mhMGOO5k0++wLNov31yLUqvTxWp901j/4S3lRavZNDlu/X0/6mEeQuZPsIjIdtp7Z1es8fcvipEGlzlaS6YzBhZldKWz+B3FhIgJuEoIadMP270bgVKhOaVpJaKEbMbX5MM//jSg4ftPm4JoHreSCdgiKb/WmnCHQdLrsCm1340YezlaRjpZzpke3E5dCtTRwFCnR24Q79MM5uIQgiDJyJEvczpTXkSHxKjSUZubnHrC4IL8yHaB0u2wER+m2PXziQa5aV6VVQU5BK1RBNBfENlGmFUfOP0fS9IWeoZsT7sSCancMsHdHwPKOtC5r91KHFKhTnvMmKEOHYHo8P95MVDEZu0BBwtz3HkHDZqse2r2vZooihl0dkypWoK1x8e8cP4HPxHVRuohAjfcBSl0VUapSBcidZV1RCNmp5WCF7Z2BasHMRtdTP41klciXKvKpZTggHDBqx0YTAZGaS+xw/z0hFJRnLc+Q8el7zt/SmtQ8v38Ws24Og+P8NPDEJrRnfS+ivuJZU413PMDB698faO0pgFSOuMOv0TBQZVdgEh9D6yodaP6Br2scRxMjP1Ev3k1+dnWjRTFriOlzwuLdU1w3r6W29JlJn2OimH8JmMJTiR0HMSVhtefn3bz2AfpgOZb4SXG1XqSgyf7/hxj x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PA4PR04MB7679.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016)(38070700021)(18002099003)(56012099003)(7055299006);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?Y3NrczkzYkEwOFVkLzVZQXZjOHVyZm5aYWJqaWhSRTFPRXVRcDduWWVaNERZ?= =?utf-8?B?U2JEQVp4YmRKMU42VTFBTkZtZ3F1TnV5NVZiTEQxeWZRcGRYRlAxQXZMTkNX?= =?utf-8?B?L3pvWE85ZGFYRkljUllwbHpBaHBubkxEVGgzR25VbnBkWUxRN3JzSWRmdys5?= =?utf-8?B?bWkxUWZmR0RKK0I1amg1L2RIQTc5dVcrcGRxdVhiZ0JZbFhQUFRFQVlldmk0?= =?utf-8?B?QmxEekE1enp1eXAxMHhPekQyclZJVWFmTUM5M1VPbGdWTnBTQzROL0FjQXpM?= =?utf-8?B?VHRtQlF3K0ZnUXhJcjQ4aDFXd2N4WnpJSDRtWDlwendqNlZkQ0RCNlVsdERy?= =?utf-8?B?VjJYQ1ptbG9KVVByWGNiWEVGcTBTYUpVY1E2S3NSTzI2d3loUEhvM3BKa1pn?= =?utf-8?B?clpldTNxQVE0WEQ4aHZIMlJQNml0MlYzNzA1NWZoQTFpcnFnYzA5cnp5NmFj?= =?utf-8?B?Mm9oTUYrKzN4bmlCV1NvMFBETEJ6S2krRFE3VHRra1ZOcW94RjZRRk5DaC9Y?= =?utf-8?B?SEtRRDgvc1Y5WkpEUW56TFhHSmp0azJFampkaW5xVEpNdFcrUS9kZi9QdHVY?= =?utf-8?B?UU9oY3ZzRGFFWWlZWW9vSGdLUm1QUko1a1dJbFdIQVN5cHprSmsydEtSbHl5?= =?utf-8?B?VGR5Ynl0TTNyakduaGVYczRWNDM5NXFYcnhvdzVBOXczNUZhenF4aVZTR1d1?= =?utf-8?B?SFBxbTREekpBdGI2S2p1LzZseW9SekZjNnlZS01PdDBTRGIwWERjd0ZrYmhp?= =?utf-8?B?U200TzQwWkw0ZCtiSEZNdnZVaUd5QThUb29WTVR2TDhwaDBiYldGQUZDTURW?= =?utf-8?B?aEkvVnIwMXVzMUkrbEhObFNMdldaZWQ4QWxGYW9MSGRTc2hHRlluWEVnejJ5?= =?utf-8?B?OEh1YTQ4SWRNYkpnVkZOM0QzVm9hNWxZQjJXZkRzNXM1bDgxcloyTjJLNkNz?= =?utf-8?B?ZEpNbjVsMVJZWFlPZERoTFZMdDlIV1JoL29aMXM5SmJwUlcxOEVOZS9iMlh5?= =?utf-8?B?RzdCa1ZNSGx3YlZXb2w1d3UxeURxOTMxQ2dUMis5Yk12YXEvTXVKTEYxeEY1?= =?utf-8?B?ODB0U0Q4WXllRXQvR3doTDNkcTdKZWJmYVlDTUZvTytlWjVZRm1OajA0dUhG?= =?utf-8?B?QVBjT3JJcDhxRlhIa3R5dXF2VE1tT2tnWkcvUjVWay8zaG1BaWhRdFBkSi9P?= =?utf-8?B?VDBhMVhWbUk4RHNWcnRxWEIyL05zcXV5eEtlZWswWFFKYUVUZVFpeUgrTFhB?= =?utf-8?B?cU5YNHhIRGVFNVAza2t1TWNoUmR2RUxXYndoUkcyN2RpeitnT3QrWEFwZHU1?= =?utf-8?B?U3RDbEJQcU1FLzRFNzc4UGVZRHpJQ2dCR2tqdWkvYjFybTl4Q0lpQUpnL2RB?= =?utf-8?B?MmxkYU1OV3ExTUdsektxY20vWFczcmR2Z1Z2Y3ZzaGNqVTRwZjg4TUNwN3lI?= =?utf-8?B?OUxVM2pRcDZpN1BUeXdoSU9yYXFkMHgxK2RGb2RIMkdGcFl0Y2R4aUlQSVJT?= =?utf-8?B?OGdzNUdGOGR3bXRhTmNkdk45ckZPK21TRE4xTllrN2orUmMzYUk2U3FaWHNX?= =?utf-8?B?c0dUQ01jd01nQ0RobjlKZDVVRlpGdjh5REJUQlpzRmdPWkgrTk55MnNBQndS?= =?utf-8?B?d2dNMElLT0hzbGx3Q2FzSG9RYWlZT0p6SGp6ZW56QVFlbjduei9hZ2t6elhu?= =?utf-8?B?UlVmOGlWNjJBUit2OHNqai9FYU90STRjZUtzYTh1dFRNL25ZYUVCam55MDhC?= =?utf-8?B?RzA4dEh5cThJR2JxTkppYlptbXRrZUx2eDRhcjR2ZmxrS0p0NC9rUGV3Z25w?= =?utf-8?B?QXJpcmVZK2I4cUhQU3pCRmZkU3FPdGh2d1ZGc01KRk1qQk83M2tHRzBrN0R1?= =?utf-8?B?eWFob0dXUk5JUTdWYU9nNjltcHl5OUUzN0RFVkY1eXJjYU9GRjJaTWd6dmd6?= =?utf-8?B?M3YrTjB1SjE4dnFSelpxSkJ1RjdaSHJ1MDVqbU9pSVhHc3lELzU1WVRUY2tU?= =?utf-8?B?QU10SWx3SndVOHZSeVBNSEFET3Y0N2ptcVhEblhMTkN6Y2lLWHp1Rnp6RDcy?= =?utf-8?B?YitBcjZ4R09vbUpoQUVoZElQd0phUFVlY29MMTloK24zVmdPb1VqRVdVcmFY?= =?utf-8?B?cWxEUmJTeEVMSEp5dWU5OTdaY3RmK28vWmgrNWxpTzUzbWN4ak5tSWRPUlhM?= =?utf-8?B?WFM0eU95UzdlN0hTbVVCWG1iRS9hM3B1MllDQ0NkZXBPcVJBaE1FMEtQYXQz?= =?utf-8?B?RVlGMUErN1dWdDRwUVZaSFVMZVlvSEViT2hJVWtHK09uSkU3YnZneWdnMity?= =?utf-8?Q?Vvgfpay0cVLZyCu2Rm?= Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: quoted-printable Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-OriginatorOrg: 1seal.org X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PA4PR04MB7679.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 15c32368-2d29-45e7-adad-08de8b3c2cfb X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Mar 2026 13:32:50.1771 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: e701d992-0f02-433e-a019-4256abe96ea1 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: ziDwfe6ikqLtrJ0tptr5gwW1F6wEm3KkQT94njS0nEkPN9nC35O22XTz3kGOtksJVjbOccy2EXSxAyUKLbdulg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR04MB8500 From f0e8b2abaf4a895fad81756277014582c773808d Mon Sep 17 00:00:00 2001 From: Oleh Konko Date: Thu, 26 Mar 2026 14:29:58 +0100 Subject: [PATCH v3] Bluetooth: hci_event: move wake reason storage into validated event handlers hci_store_wake_reason() is called from hci_event_packet() immediately after stripping the HCI event header but before hci_event_func() enforces the per-event minimum payload length from hci_ev_table. This means a short HCI event frame can reach bacpy() before any bounds check runs. Rather than duplicating skb parsing and per-event length checks inside hci_store_wake_reason(), move wake-address storage into the individual event handlers after their existing event-length validation has succeeded. Convert hci_store_wake_reason() into a small helper that only stores an already-validated bdaddr while the caller holds hci_dev_lock(). Use the same helper after hci_event_func() with a NULL address to preserve the existing unexpected-wake fallback semantics when no validated event handler records a wake address. Call the helper from hci_conn_request_evt(), hci_conn_complete_evt(), hci_le_adv_report_evt(), hci_le_ext_adv_report_evt(), and hci_le_direct_adv_report_evt(). Fixes: 2f20216c1d6f ("Bluetooth: Emit controller suspend and resume events") Cc: stable@vger.kernel.org Signed-off-by: Oleh Konko --- v3: - route the unexpected-wake fallback through hci_store_wake_reason(NULL, 0) after hci_event_func(), as suggested in review net/bluetooth/hci_event.c | 89 +++++++++++++-------------------------- 1 file changed, 29 insertions(+), 60 deletions(-) diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c index 286529d2e..c0e0b4a1c 100644 --- a/net/bluetooth/hci_event.c +++ b/net/bluetooth/hci_event.c @@ -80,6 +80,9 @@ static void *hci_le_ev_skb_pull(struct hci_dev *hdev, str= uct sk_buff *skb, return data; } =20 +static void hci_store_wake_reason(struct hci_dev *hdev, + const bdaddr_t *bdaddr, u8 addr_type); + static u8 hci_cc_inquiry_cancel(struct hci_dev *hdev, void *data, struct sk_buff *skb) { @@ -3111,6 +3114,7 @@ static void hci_conn_complete_evt(struct hci_dev *hde= v, void *data, bt_dev_dbg(hdev, "status 0x%2.2x", status); =20 hci_dev_lock(hdev); + hci_store_wake_reason(hdev, &ev->bdaddr, BDADDR_BREDR); =20 /* Check for existing connection: * @@ -3274,6 +3278,10 @@ static void hci_conn_request_evt(struct hci_dev *hde= v, void *data, =20 bt_dev_dbg(hdev, "bdaddr %pMR type 0x%x", &ev->bdaddr, ev->link_type); =20 + hci_dev_lock(hdev); + hci_store_wake_reason(hdev, &ev->bdaddr, BDADDR_BREDR); + hci_dev_unlock(hdev); + /* Reject incoming connection from device with same BD ADDR against * CVE-2020-26555 */ @@ -6403,6 +6411,8 @@ static void hci_le_adv_report_evt(struct hci_dev *hde= v, void *data, info->length + 1)) break; =20 + hci_store_wake_reason(hdev, &info->bdaddr, info->bdaddr_type); + if (info->length <=3D max_adv_len(hdev)) { rssi =3D info->data[info->length]; process_adv_report(hdev, info->type, &info->bdaddr, @@ -6491,6 +6501,8 @@ static void hci_le_ext_adv_report_evt(struct hci_dev = *hdev, void *data, info->length)) break; =20 + hci_store_wake_reason(hdev, &info->bdaddr, info->bdaddr_type); + evt_type =3D __le16_to_cpu(info->type) & LE_EXT_ADV_EVT_TYPE_MASK; legacy_evt_type =3D ext_evt_type_to_legacy(hdev, evt_type); =20 @@ -6834,6 +6846,8 @@ static void hci_le_direct_adv_report_evt(struct hci_d= ev *hdev, void *data, for (i =3D 0; i < ev->num; i++) { struct hci_ev_le_direct_adv_info *info =3D &ev->info[i]; =20 + hci_store_wake_reason(hdev, &info->bdaddr, info->bdaddr_type); + process_adv_report(hdev, info->type, &info->bdaddr, info->bdaddr_type, &info->direct_addr, info->direct_addr_type, HCI_ADV_PHY_1M, 0, @@ -7517,73 +7531,27 @@ static bool hci_get_cmd_complete(struct hci_dev *hd= ev, u16 opcode, return true; } =20 -static void hci_store_wake_reason(struct hci_dev *hdev, u8 event, - struct sk_buff *skb) +/* hdev lock must be held. pass NULL bdaddr to record an unexpected wake. = */ +static void hci_store_wake_reason(struct hci_dev *hdev, + const bdaddr_t *bdaddr, u8 addr_type) { - struct hci_ev_le_advertising_info *adv; - struct hci_ev_le_direct_adv_info *direct_adv; - struct hci_ev_le_ext_adv_info *ext_adv; - const struct hci_ev_conn_complete *conn_complete =3D (void *)skb->data; - const struct hci_ev_conn_request *conn_request =3D (void *)skb->data; - - hci_dev_lock(hdev); - /* If we are currently suspended and this is the first BT event seen, * save the wake reason associated with the event. */ if (!hdev->suspended || hdev->wake_reason) - goto unlock; + return; + + if (!bdaddr) { + hdev->wake_reason =3D MGMT_WAKE_REASON_UNEXPECTED; + return; + } =20 /* Default to remote wake. Values for wake_reason are documented in the * Bluez mgmt api docs. */ hdev->wake_reason =3D MGMT_WAKE_REASON_REMOTE_WAKE; - - /* Once configured for remote wakeup, we should only wake up for - * reconnections. It's useful to see which device is waking us up so - * keep track of the bdaddr of the connection event that woke us up. - */ - if (event =3D=3D HCI_EV_CONN_REQUEST) { - bacpy(&hdev->wake_addr, &conn_request->bdaddr); - hdev->wake_addr_type =3D BDADDR_BREDR; - } else if (event =3D=3D HCI_EV_CONN_COMPLETE) { - bacpy(&hdev->wake_addr, &conn_complete->bdaddr); - hdev->wake_addr_type =3D BDADDR_BREDR; - } else if (event =3D=3D HCI_EV_LE_META) { - struct hci_ev_le_meta *le_ev =3D (void *)skb->data; - u8 subevent =3D le_ev->subevent; - u8 *ptr =3D &skb->data[sizeof(*le_ev)]; - u8 num_reports =3D *ptr; - - if ((subevent =3D=3D HCI_EV_LE_ADVERTISING_REPORT || - subevent =3D=3D HCI_EV_LE_DIRECT_ADV_REPORT || - subevent =3D=3D HCI_EV_LE_EXT_ADV_REPORT) && - num_reports) { - adv =3D (void *)(ptr + 1); - direct_adv =3D (void *)(ptr + 1); - ext_adv =3D (void *)(ptr + 1); - - switch (subevent) { - case HCI_EV_LE_ADVERTISING_REPORT: - bacpy(&hdev->wake_addr, &adv->bdaddr); - hdev->wake_addr_type =3D adv->bdaddr_type; - break; - case HCI_EV_LE_DIRECT_ADV_REPORT: - bacpy(&hdev->wake_addr, &direct_adv->bdaddr); - hdev->wake_addr_type =3D direct_adv->bdaddr_type; - break; - case HCI_EV_LE_EXT_ADV_REPORT: - bacpy(&hdev->wake_addr, &ext_adv->bdaddr); - hdev->wake_addr_type =3D ext_adv->bdaddr_type; - break; - } - } - } else { - hdev->wake_reason =3D MGMT_WAKE_REASON_UNEXPECTED; - } - -unlock: - hci_dev_unlock(hdev); + bacpy(&hdev->wake_addr, bdaddr); + hdev->wake_addr_type =3D addr_type; } =20 #define HCI_EV_VL(_op, _func, _min_len, _max_len) \ @@ -7830,14 +7798,15 @@ void hci_event_packet(struct hci_dev *hdev, struct = sk_buff *skb) =20 skb_pull(skb, HCI_EVENT_HDR_SIZE); =20 - /* Store wake reason if we're suspended */ - hci_store_wake_reason(hdev, event, skb); - bt_dev_dbg(hdev, "event 0x%2.2x", event); =20 hci_event_func(hdev, event, skb, &opcode, &status, &req_complete, &req_complete_skb); =20 + hci_dev_lock(hdev); + hci_store_wake_reason(hdev, NULL, 0); + hci_dev_unlock(hdev); + if (req_complete) { req_complete(hdev, status, opcode); } else if (req_complete_skb) { --=20 2.50.0