From nobody Thu Apr 2 20:22:05 2026 Received: from DU2PR03CU002.outbound.protection.outlook.com (mail-northeuropeazon11021082.outbound.protection.outlook.com [52.101.65.82]) (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 6B9463976B8; Thu, 26 Mar 2026 15:06:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.65.82 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774537569; cv=fail; b=E24dgKCAf/BP6/N/6aFEhCfSO1djPFBLf4cIWjjuQS00B6s4kwnuRxlSm8H9ybPdLYn8sLvi41sKejGhr+KILYe6vJRCS6GqHywZevMold/j2sSmnpztVmxYu9l5OvKuBhvYpV3SgZT215KzRaYKXso+f16DRcQhmhVz9AD9BQQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774537569; c=relaxed/simple; bh=z9CmOsCLzSTyVXQzgTUhTyW3BXjeXYB2Rl3KH0Sz22o=; h=From:To:CC:Subject:Date:Message-ID:Content-Type:MIME-Version; b=QPOUh6f77IMuwQ5k9NXygNE7Qnr8IMi51rNcaRXOywhj8/mQVaAA2nkMaP7/e6L9g5ykXN+Bd1uW6FKm39MF1DZ8jzCjeJXni6k4UfTNdOfdFhwZ7YgJDTHFxTj8C9ttLpUiDHRygF1WTbTkUBhFatHeOlz3zkJmvRtX0bGOAaE= 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=Em5wYp+8; arc=fail smtp.client-ip=52.101.65.82 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="Em5wYp+8" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=vH5RAZNZ8yb+LgFXuYc/U8nO2t6Sojgb/Gq4GEEUHbPA3nN7mGW/88mbvC52sbNrW48tOIVRuwpiLwTTThoqwYC2KVwDZ7m8CSnPLORvjsFawU/BFmImZFD82GhlmtyRSXjLFCNvoVTZRRBM8BDIdoJrEdWJv2QTmK6hGRaXfUQmPoMpHXqU1gzO78LcoI2qwrW1ZQ7oK4guLNR3JIlHunYX015xJKUWRgL8rjhrQnQavqcCS0Ujt2QJyWIZgCpxi67ROuIokBGO4kMu7NEvSarWiO0wPdYUb18gTDxaY5rUfRQR/boLzbyreQvAznzAv4kHbLJpF5VV1BrYh7lcqw== 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=z9CmOsCLzSTyVXQzgTUhTyW3BXjeXYB2Rl3KH0Sz22o=; b=QqjNqXiMYCtLqsdwC6Idj63JWUtfR+Mj3+W2VivAiit1IcGusIhoetyEczzrQmCE4UXHUazfQJDWusZzi09hi/bx/U6ZC2y34srI2tzD/oYBm/yKkVbatXYTbE0QWh6HxFAM4VZFZaeO8e5ZrqUJ2faVR1NAypp190Cd2qRin16go7oL3NRaGSOJp8VXsl0lVjL9dpxAErjoKVIKRzvfe4U+Z/JgMzVAGsaggP5xh9ISlYGv/E+Txit+JIF91uTi42C/wHMuRLgBGnQdkAjklpYZ1z17GDQpd1UyuIcVszbEWn/StwbKeQRNPaJtpclo8rV2vlnvqmTeC75FLuPLuQ== 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=z9CmOsCLzSTyVXQzgTUhTyW3BXjeXYB2Rl3KH0Sz22o=; b=Em5wYp+8caR+5OAHs3DKIst9ajhJ/ASw8UbKi9BmjG6Iai/bEo3ghbKSmuCIlthiJbq9KpLsaLNkLZA6QdcC5m5RDx8Os1CICIpx+KPsOID2m8+7ZJaEEKH6nf7Dqo7nV2JHDKysB2fcfScfw2PXDHu1NzNl5PpK9gk3ntp+DCW+0ULlB0qqpmu0SlX4UvyeAkxbMxruujIgira4gSp8laGmeFJcuG/xNJkipOT6f/GARMsNjocBEImy50RmafyB+TGJDNRESaBjaioZHBdIdoEjSpJUSzIthKrKp+RjsK2/WCyeDpuB9l1uM2ocE5SIxldZSDdbgurFpMO+w7IaLA== Received: from PA4PR04MB7679.eurprd04.prod.outlook.com (2603:10a6:102:e0::20) by DU4PR04MB12131.eurprd04.prod.outlook.com (2603:10a6:10:642::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9745.22; Thu, 26 Mar 2026 15:06:03 +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 15:06:03 +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 v5] Bluetooth: hci_event: move wake reason storage into validated event handlers Thread-Topic: [PATCH v5] Bluetooth: hci_event: move wake reason storage into validated event handlers Thread-Index: AQHcvTIQQjLu32jq2kSvRD5j2rlHlA== Date: Thu, 26 Mar 2026 15:06:03 +0000 Message-ID: <798ca355ce0144488610929e6c13e383.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_|DU4PR04MB12131:EE_ x-ms-office365-filtering-correlation-id: cead5286-e73e-4673-2257-08de8b4932ea x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|366016|1800799024|376014|38070700021|18002099003|7055299006|56012099003; x-microsoft-antispam-message-info: GS1ureHRgw6YX7h2l8X4AE857ctQV4GXX1bXDb7rOrktjTTQUpH6OhQqovR9fWz3xK9X6QKX3xIRUIRj449h87LN/ndozJshT9ZNUsLnzVmvHEp/lf0E1eQpNJyNtvkmokNWW0O90fqLvzkk2seRoLv2/F4wT6jooCoTbsd9610mvI5uwrVKMhhj1PSqGx5gGC+eQ662TKLHZjcVIFoIim0PeS4wQkDRjUIowZQuf7+HcZqKXG8FVtgVmtdE7yLN0MZWLxYfPGkMr5TeUu68RSXX/EI/kv++6NryGNbljQwyqygaiAEvfGgbfJiYdtY3I8XoCOtDrrNroS7fMMUJIOYq2p5wDZ8m5PFl83X0w+lxcs46CBdQ6cQporRPRt2Ri23echC9WUpVdAEqaN+6chn4pixs6t3TFrdm3WUlUXKAsAI71eXLX29cuodGQra0CQeddv35+CLysmEpYkhdU8uEPZRj7uYsIgsUW5UeHvd/Q1CTnuraESIyiYuuUZFdgANtg6Cygtwc7z8pAGk6Zj1kWK5tQWgJi9PFX+8bFH09x5IntkkNw2pzFfgcOf4K/V9Db85j78Tp18BUffYgA0sTSh9uyJyE35FwwUvWgaqT1rsHF74Lwj65tvY7GzDUH484X1w5d+F40/vwP5ce5Lye14IVrGiTWBmXoUlfk9Y2/aCX0V4CES2YcwxdUY05R8plNzuaBOT6HpLs4u+ABM7cI3RBPib+jjLmwih1A8ex30KSsMchUyw/wh9MUr+W3FKcn3iFy1urtpiY0to+q7+/pf5tuhItaH/BPBJrmdCxyad8r4YE8L35CaJMiltD 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)(366016)(1800799024)(376014)(38070700021)(18002099003)(7055299006)(56012099003);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?Nk9mK3kyTksybHNLQTFNcVRDRytGS0NGV1FhdVpuSk1ISVRyOU9YN1k5UThL?= =?utf-8?B?eFV5aGdkVmcxYjBoOGxhUDZKODVhdnZYYWJ4bUhGSHZjMXM3ZkpyWVJpWFNs?= =?utf-8?B?YnNKd011OXdJUWI1Q0VpVldyYTloS0pwTGlzdmlIQ3BJWlFKZHVTZGgrbTVP?= =?utf-8?B?WnFuN2Q5VTFINlN4NDRsYXBNVThQR0hPUU82Y2tOVnNZK0ZPUEdUTWhJaVNo?= =?utf-8?B?ZWJuQlJRamsxUEJWMUV0RG9OZ1VKam8vV3dtUGV6M0dZYjBkWVRXaEZUb2Jj?= =?utf-8?B?TWdHWjRpYVh3dnNuRUVBeEdLVE1hQzgweGFDVXg0djZqelJnTXRab1pnLzEy?= =?utf-8?B?am12TnNPWUE5MkFZSjc5TTJxblV1aFQ2UEJpRGhBTnZPcVZDMVJNV29jM3Vi?= =?utf-8?B?cmRLcjQ4UE9DMjdXOVE0aTBRTU5Wbkdnc0cvTUdsN05IcGQrOWx3SStNaEUy?= =?utf-8?B?WGJxVS9hMDhSTHhQNFVNcU4vejQ4MjJndFh2MWR2Q0NsdTkzU0JmUGxKZzFa?= =?utf-8?B?MWptd3lhSXRlS1dtTUlWTzZtRS82Q2Y3N1hYTGlCM2MzamMxN0xsNXRxRHVK?= =?utf-8?B?SFJaSDU0QUFCcHA0OVFDM0FpZjdWeWVjSEQyNGRQSjJuY1krMTNkcWJ6cDFK?= =?utf-8?B?UFYxb0xzQjlXMjNYdTE2OEEybldJN1NaeG5ZQkdiOXZpUUhFL0dsUkpJeVpY?= =?utf-8?B?WlN2YjZKWHBZeHRhbGREY1pBdjZrRVloK0o3Z2RGbnV6UXdYVVc0TEptOExX?= =?utf-8?B?TnVYTnNROWM4dTlDdmV5MGdRbnc1bUJqcUhqaVBpRUJBT2ZldU51emZzY2N3?= =?utf-8?B?V2poNGJrUndtVlVnR0ZiMVhKRzc0c094WHI2eUxzMFZiR05mdi9NOXEwczNS?= =?utf-8?B?TVJpQmtpRzRPUmQ0VnNWL2JVeWxyellrcjFLRU5OYkpSWnZZWDlDejd5Tksv?= =?utf-8?B?Z1A3ZHpZNC9ZMGIzS2FyNlZ4L0VQdTcvQmp6bE8vVVdyQjI2MVdubVhJUVl2?= =?utf-8?B?V2xKMzNCTmRqTm9VZ2tUS2dyOEZseFd1UFd4NHJ5MXJOV29WQmIyOTNzbGtq?= =?utf-8?B?cW5GVkQyd1hqaCtWZW9uYkl2UlNwam1GaWN6aGU4akJWZ1N3ZTh4eU1lRlhR?= =?utf-8?B?NS9NSTE4bnZVR2NiVWlWUFJYTTU3TzdTWm9hZVd4V2gxSGtTYjVYZ3NyTnZX?= =?utf-8?B?Ymt6UzlSSEljaGFrWUFHR0o3OFd6U2FqMnZIQ09lYXp2TWNNQ1dHTFNpWkJl?= =?utf-8?B?QlR3UU91Tm1pQ3pCWkEyNHFWbGE0Qy9iMkZxdGhPVVVBbGlxMUFkSWlSdHh1?= =?utf-8?B?aFhENEprYm41T2xLQW1zbmFWcDVaa3NuakJ1Q3MxRm5Xcjl1SWJ3UW1wTC9B?= =?utf-8?B?V1h0WTR5TU1LVjcxSzZPRzZ3THlaWEw5bVo5ejhRY2FnZzJDcEhKdTg0U3VG?= =?utf-8?B?UHRsbjNLWTRpTVdzL2xmVWIyb2dvbWdyZnlGSk1NOU51eUZGNDZLRmVjTUow?= =?utf-8?B?NVQvd2VkL2RQV0F5UmgvNDV5MWswb0x0alFJbk9jcVpYbWg1MkwzdnQwalhm?= =?utf-8?B?QXlaSEhSVTJyVUFJbWdvZ3RCSFdaQ3dkUmJFWWg1M3NCbHp3aTFFeTQ3N0ht?= =?utf-8?B?MS8vTWZDendwTEpubEltVWd5ZDNlVU1lQ1lPeXVaTUU2S3VGR0o5VW5HRmZZ?= =?utf-8?B?OFFDaFlOdFY5R3U3TTdSVk5DeERGN000dTR1Vzh6bnZYVE9ZaHl5d05VcW4v?= =?utf-8?B?a3U5aDNpR2ROOFVaVGN3M2RpWFFOcmNTd3pQSUhnM0tLWUozWERBUUZxeS9K?= =?utf-8?B?KzRsRTZKL0M3akpicW1wb1hBTkJjQmF6Yzc3ZENYNWhEemVkczlwclRnUUow?= =?utf-8?B?M0V5czNiYUZnWUFTcGlCY2tYUlpYRzZ2UXN2QzQvRFFFSkRiRFp3TklSUWww?= =?utf-8?B?TW80RnZNamV4cDZJMnZEVWx3eExxVk03ajZOUmJGVGNzV1hMZ1FueWc2OE5k?= =?utf-8?B?dkFzb29Qbnk2ZjRCK2cveFl2R1A3MFhJcTQzRUtOeVVhMEh3Q3Z2d1ZKbGZ4?= =?utf-8?B?ODhucWlxUGQvdEJ3VGlBN0hrSThabmpBb2JoOXZTcG1lUjNLQ0MzZjJxQnA5?= =?utf-8?B?UmFrTzA0MmpiOGRPb1dMTU54K2RLN05wd21OK0tZbzlzNjRHWFJSeXpkbWdV?= =?utf-8?B?Mk1UbWpwR2UxUGJXYlpSK3hyenRxMU5ldUpTSlc3YkIvaC9GOXhwUDdZT2NQ?= =?utf-8?B?ZGE5SEZLQllMWjh0ZDdXdzV1b0FhekF6M1JzdVJlQS9GTXpIa2Z3cldTL1hl?= =?utf-8?Q?fQjH8ciVHCPC5KweEZ?= Content-Type: text/plain; charset="utf-8" Content-ID: <3B34F7F85905634998E20EAAD308E599@eurprd04.prod.outlook.com> 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: cead5286-e73e-4673-2257-08de8b4932ea X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Mar 2026 15:06:03.5960 (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: 0FWWU/1nIMnURdgTk7H8e6665GmDy4QkV7WfNem2nYIaACkJwvwrl1TWFEbQjLW162UQeaeQglFyaiLGgesGKw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU4PR04MB12131 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. Annotate the helper with __must_hold(&hdev->lock) and add lockdep_assert_held(&hdev->lock) so future call paths keep the lock contract explicit. 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 --- v5: - add __must_hold(&hdev->lock) and lockdep_assert_held(&hdev->lock) net/bluetooth/hci_event.c | 90 ++++++++++++++------------------------- 1 file changed, 31 insertions(+), 59 deletions(-) diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c index 286529d2e554..cb27037eeef5 100644 --- a/net/bluetooth/hci_event.c +++ b/net/bluetooth/hci_event.c @@ -80,6 +80,10 @@ static void *hci_le_ev_skb_pull(struct hci_dev *hdev, st= ruct sk_buff *skb, return data; } =20 +static void hci_store_wake_reason(struct hci_dev *hdev, + const bdaddr_t *bdaddr, u8 addr_type) + __must_hold(&hdev->lock); + static u8 hci_cc_inquiry_cancel(struct hci_dev *hdev, void *data, struct sk_buff *skb) { @@ -3111,6 +3115,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 +3279,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 +6412,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 +6502,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 +6847,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 +7532,29 @@ 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) +static void hci_store_wake_reason(struct hci_dev *hdev, + const bdaddr_t *bdaddr, u8 addr_type) + __must_hold(&hdev->lock) { - 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); + lockdep_assert_held(&hdev->lock); =20 /* 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 +7801,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