* [PATCH v1] Bluetooth: btintel_pcie: Allow COMPILE_TEST without ACPI
@ 2026-10-22 15:46 Luiz Augusto von Dentz
2026-10-22 15:46 ` [PATCH v1] Bluetooth: L2CAP: Hold incoming data until encryption key size is known Luiz Augusto von Dentz
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Luiz Augusto von Dentz @ 2026-10-22 15:46 UTC (permalink / raw)
To: linux-bluetooth
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
The driver only uses ACPI for the product reset method, so make that
depend on CONFIG_ACPI and allow the driver with COMPILE_TEST, so it is
build tested on architectures without ACPI as well, such as User Mode
Linux. Without ACPI the reset method reports it is not supported, as it
does when the device has no ACPI handle.
Assisted-by: OpenCode:claude-opus-5.5
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
---
drivers/bluetooth/Kconfig | 2 +-
drivers/bluetooth/btintel_pcie.c | 8 ++++++++
2 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/drivers/bluetooth/Kconfig b/drivers/bluetooth/Kconfig
index db0189ca3cbe..68929d12f608 100644
--- a/drivers/bluetooth/Kconfig
+++ b/drivers/bluetooth/Kconfig
@@ -477,7 +477,7 @@ config BT_NXPUART
config BT_INTEL_PCIE
tristate "Intel HCI PCIe driver"
- depends on PCI && ACPI
+ depends on PCI && (ACPI || COMPILE_TEST)
select BT_INTEL
select FW_LOADER
help
diff --git a/drivers/bluetooth/btintel_pcie.c b/drivers/bluetooth/btintel_pcie.c
index df95d16a163c..4fbefaa3129a 100644
--- a/drivers/bluetooth/btintel_pcie.c
+++ b/drivers/bluetooth/btintel_pcie.c
@@ -4001,6 +4001,7 @@ static void btintel_pcie_inc_recovery_count(struct pci_dev *pdev,
}
}
+#ifdef CONFIG_ACPI
static int btintel_pcie_acpi_reset_method(struct btintel_pcie_data *data)
{
union acpi_object *obj, argv4;
@@ -4054,6 +4055,13 @@ static int btintel_pcie_acpi_reset_method(struct btintel_pcie_data *data)
pci_dev_unlock(data->pdev);
return ret;
}
+#else
+static int btintel_pcie_acpi_reset_method(struct btintel_pcie_data *data)
+{
+ bt_dev_err(data->hdev, "No support for ACPI, cold boot");
+ return -EOPNOTSUPP;
+}
+#endif
static void btintel_pcie_perform_pldr(struct btintel_pcie_data *data)
{
--
2.56.0
^ permalink raw reply related [flat|nested] 6+ messages in thread* [PATCH v1] Bluetooth: L2CAP: Hold incoming data until encryption key size is known 2026-10-22 15:46 [PATCH v1] Bluetooth: btintel_pcie: Allow COMPILE_TEST without ACPI Luiz Augusto von Dentz @ 2026-10-22 15:46 ` Luiz Augusto von Dentz 2026-10-22 18:20 ` [v1] " bluez.test.bot 2026-10-23 21:00 ` [PATCH v1] " patchwork-bot+bluetooth 2026-10-22 18:08 ` [v1] Bluetooth: btintel_pcie: Allow COMPILE_TEST without ACPI bluez.test.bot 2026-10-23 21:00 ` [PATCH v1] " patchwork-bot+bluetooth 2 siblings, 2 replies; 6+ messages in thread From: Luiz Augusto von Dentz @ 2026-10-22 15:46 UTC (permalink / raw) To: linux-bluetooth From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com> Once encryption is enabled on an ACL link, the encryption key size is read from the controller, using hdev->min_enc_key_size in the meantime. Data received before the reply is processed with that key size, so a peer starting SMP over BR/EDR right after encryption, which it may do, gets its Pairing Request rejected with "Encryption Key Size" whenever the pending security level is FIPS, as that requires a 16 octet key: > HCI Event: Encryption Change (0x08) plen 4 > ACL Data RX: Handle 1 flags 0x02 dlen 11 BR/EDR SMP: Pairing Request (0x01) len 6 @ MGMT Event: Authentication Failed (0x0011) plen 8 Status: Authentication Failed (0x05) < HCI Command: Read Encryption Key Size (0x05|0x0008) plen 2 > HCI Event: Command Complete (0x0e) plen 7 Key size: 16 < ACL Data TX: Handle 1 flags 0x00 dlen 6 BR/EDR SMP: Pairing Failed (0x05) len 1 Reason: Encryption key size (0x06) Mark the connection with HCI_CONN_ENC_KEY_SIZE_PEND while the key size is read and hold incoming L2CAP data back in pending_rx meanwhile, processing it once the reply is handled. Found with mgmt-tester "Pairing Acceptor - SMP over BR/EDR 2" under User Mode Linux time travel, where the emulated peer always replies before the key size is read. Fixes: e3f6a257a73d ("Bluetooth: Use actual encryption key size for SMP over BR/EDR") Assisted-by: OpenCode:claude-opus-5.5 Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com> --- include/net/bluetooth/hci_core.h | 1 + net/bluetooth/hci_event.c | 12 +++++++++++- net/bluetooth/l2cap_core.c | 16 ++++++++++++++-- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h index 8f32c860d492..f6fa6a327e11 100644 --- a/include/net/bluetooth/hci_core.h +++ b/include/net/bluetooth/hci_core.h @@ -1017,6 +1017,7 @@ enum { HCI_CONN_CREATE_PA_SYNC, HCI_CONN_PA_SYNC, HCI_CONN_PA_SYNC_FAILED, + HCI_CONN_ENC_KEY_SIZE_PEND, }; static inline bool hci_conn_ssp_enabled(struct hci_conn *conn) diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c index 56ad10ab96e3..565668d8d7cc 100644 --- a/net/bluetooth/hci_event.c +++ b/net/bluetooth/hci_event.c @@ -724,6 +724,8 @@ static u8 hci_cc_read_enc_key_size(struct hci_dev *hdev, void *data, goto done; } + clear_bit(HCI_CONN_ENC_KEY_SIZE_PEND, &conn->flags); + /* 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. @@ -3190,6 +3192,7 @@ static int hci_read_enc_key_size(struct hci_dev *hdev, struct hci_conn *conn) { struct hci_cp_read_enc_key_size cp; u8 *key_enc_size = hci_conn_key_enc_size(conn); + int err; if (!read_key_size_capable(hdev)) { conn->enc_key_size = HCI_LINK_KEY_SIZE; @@ -3211,7 +3214,14 @@ static int hci_read_enc_key_size(struct hci_dev *hdev, struct hci_conn *conn) else conn->enc_key_size = hdev->min_enc_key_size; - return hci_send_cmd(hdev, HCI_OP_READ_ENC_KEY_SIZE, sizeof(cp), &cp); + /* L2CAP holds incoming data back until the key size is known */ + set_bit(HCI_CONN_ENC_KEY_SIZE_PEND, &conn->flags); + + err = hci_send_cmd(hdev, HCI_OP_READ_ENC_KEY_SIZE, sizeof(cp), &cp); + if (err) + clear_bit(HCI_CONN_ENC_KEY_SIZE_PEND, &conn->flags); + + return err; } static void hci_conn_complete_evt(struct hci_dev *hdev, void *data, diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c index 4dd56e0074fd..361ed3ebe19e 100644 --- a/net/bluetooth/l2cap_core.c +++ b/net/bluetooth/l2cap_core.c @@ -7389,7 +7389,11 @@ static void l2cap_recv_frame(struct l2cap_conn *conn, struct sk_buff *skb) u16 cid, len; __le16 psm; - if (hcon->state != BT_CONNECTED) { + /* Also hold data back while the encryption key size is read, as + * the security of the link, e.g. for SMP over BR/EDR, depends on it. + */ + if (hcon->state != BT_CONNECTED || + test_bit(HCI_CONN_ENC_KEY_SIZE_PEND, &hcon->flags)) { BT_DBG("queueing pending rx skb"); skb_queue_tail(&conn->pending_rx, skb); return; @@ -7452,7 +7456,11 @@ static void process_pending_rx(struct work_struct *work) mutex_lock(&conn->lock); - while ((skb = skb_dequeue(&conn->pending_rx))) + /* l2cap_recv_frame() would queue it all again while the encryption + * key size is read, l2cap_security_cfm() schedules this once known. + */ + while (!test_bit(HCI_CONN_ENC_KEY_SIZE_PEND, &conn->hcon->flags) && + (skb = skb_dequeue(&conn->pending_rx))) l2cap_recv_frame(conn, skb); mutex_unlock(&conn->lock); @@ -8041,6 +8049,10 @@ static void l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt) } mutex_unlock(&conn->lock); + + /* Process data held back while the encryption key size was read */ + if (!skb_queue_empty(&conn->pending_rx)) + queue_work(hcon->hdev->workqueue, &conn->pending_rx_work); } /* Append fragment into frame respecting the maximum len of rx_skb */ -- 2.56.0 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* RE: [v1] Bluetooth: L2CAP: Hold incoming data until encryption key size is known 2026-10-22 15:46 ` [PATCH v1] Bluetooth: L2CAP: Hold incoming data until encryption key size is known Luiz Augusto von Dentz @ 2026-10-22 18:20 ` bluez.test.bot 2026-10-23 21:00 ` [PATCH v1] " patchwork-bot+bluetooth 1 sibling, 0 replies; 6+ messages in thread From: bluez.test.bot @ 2026-10-22 18:20 UTC (permalink / raw) To: linux-bluetooth, luiz.dentz [-- Attachment #1: Type: text/plain, Size: 1814 bytes --] This is automated email and please do not reply to this email! Dear submitter, Thank you for submitting the patches to the linux bluetooth mailing list. This is a CI test results with your patch series: PW Link:https://patchwork.kernel.org/series/1191411/ ---Test result--- Test Summary: CheckPatch PASS 1.20 seconds VerifyFixes PASS 0.31 seconds VerifySignedoff PASS 0.77 seconds GitLint PASS 2.28 seconds SubjectPrefix PASS 0.28 seconds BuildKernel PASS 28.74 seconds CheckAllWarning PASS 33.22 seconds CheckSparse WARNING 35.84 seconds BuildKernel32 PASS 28.98 seconds CheckKernelLLVM PASS 44.09 seconds TestRunnerSetup PASS 693.46 seconds TestRunner_l2cap-tester PASS 12.69 seconds TestRunner_iso-tester PASS 12.76 seconds TestRunner_bnep-tester PASS 3.09 seconds TestRunner_mgmt-tester PASS 87.58 seconds TestRunner_rfcomm-tester PASS 4.44 seconds TestRunner_sco-tester PASS 9.46 seconds TestRunner_ioctl-tester PASS 4.62 seconds TestRunner_mesh-tester PASS 5.67 seconds TestRunner_smp-tester PASS 4.70 seconds TestRunner_userchan-tester PASS 3.15 seconds TestRunner_6lowpan-tester PASS 4.38 seconds IncrementalBuild PASS 26.99 seconds Details ############################## Test: CheckSparse - WARNING Desc: Run sparse tool with linux kernel Output: net/bluetooth/hci_event.c: note: in included file (through include/net/bluetooth/hci_core.h): https://github.com/bluez/bluetooth-next/pull/984 --- Regards, Linux Bluetooth ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v1] Bluetooth: L2CAP: Hold incoming data until encryption key size is known 2026-10-22 15:46 ` [PATCH v1] Bluetooth: L2CAP: Hold incoming data until encryption key size is known Luiz Augusto von Dentz 2026-10-22 18:20 ` [v1] " bluez.test.bot @ 2026-10-23 21:00 ` patchwork-bot+bluetooth 1 sibling, 0 replies; 6+ messages in thread From: patchwork-bot+bluetooth @ 2026-10-23 21:00 UTC (permalink / raw) To: Luiz Augusto von Dentz; +Cc: linux-bluetooth Hello: This patch was applied to bluetooth/bluetooth-next.git (master) by Luiz Augusto von Dentz <luiz.von.dentz@intel.com>: On Thu, 22 Oct 2026 11:46:21 -0400 you wrote: > From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com> > > Once encryption is enabled on an ACL link, the encryption key size is > read from the controller, using hdev->min_enc_key_size in the meantime. > Data received before the reply is processed with that key size, so a > peer starting SMP over BR/EDR right after encryption, which it may do, > gets its Pairing Request rejected with "Encryption Key Size" whenever > the pending security level is FIPS, as that requires a 16 octet key: > > [...] Here is the summary with links: - [v1] Bluetooth: L2CAP: Hold incoming data until encryption key size is known https://git.kernel.org/bluetooth/bluetooth-next/c/2aa8a39c5a81 You are awesome, thank you! -- Deet-doot-dot, I am a bot. https://korg.docs.kernel.org/patchwork/pwbot.html ^ permalink raw reply [flat|nested] 6+ messages in thread
* RE: [v1] Bluetooth: btintel_pcie: Allow COMPILE_TEST without ACPI 2026-10-22 15:46 [PATCH v1] Bluetooth: btintel_pcie: Allow COMPILE_TEST without ACPI Luiz Augusto von Dentz 2026-10-22 15:46 ` [PATCH v1] Bluetooth: L2CAP: Hold incoming data until encryption key size is known Luiz Augusto von Dentz @ 2026-10-22 18:08 ` bluez.test.bot 2026-10-23 21:00 ` [PATCH v1] " patchwork-bot+bluetooth 2 siblings, 0 replies; 6+ messages in thread From: bluez.test.bot @ 2026-10-22 18:08 UTC (permalink / raw) To: linux-bluetooth, luiz.dentz [-- Attachment #1: Type: text/plain, Size: 1019 bytes --] This is automated email and please do not reply to this email! Dear submitter, Thank you for submitting the patches to the linux bluetooth mailing list. This is a CI test results with your patch series: PW Link:https://patchwork.kernel.org/series/1191410/ ---Test result--- Test Summary: CheckPatch PASS 2.07 seconds VerifyFixes PASS 0.11 seconds VerifySignedoff PASS 0.11 seconds GitLint PASS 0.49 seconds SubjectPrefix PASS 0.10 seconds BuildKernel PASS 22.64 seconds CheckAllWarning PASS 20.64 seconds CheckSparse PASS 23.52 seconds BuildKernel32 PASS 18.91 seconds CheckKernelLLVM PASS 21.88 seconds TestRunnerSetup PASS 435.67 seconds IncrementalBuild PASS 18.96 seconds https://github.com/bluez/bluetooth-next/pull/983 --- Regards, Linux Bluetooth ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v1] Bluetooth: btintel_pcie: Allow COMPILE_TEST without ACPI 2026-10-22 15:46 [PATCH v1] Bluetooth: btintel_pcie: Allow COMPILE_TEST without ACPI Luiz Augusto von Dentz 2026-10-22 15:46 ` [PATCH v1] Bluetooth: L2CAP: Hold incoming data until encryption key size is known Luiz Augusto von Dentz 2026-10-22 18:08 ` [v1] Bluetooth: btintel_pcie: Allow COMPILE_TEST without ACPI bluez.test.bot @ 2026-10-23 21:00 ` patchwork-bot+bluetooth 2 siblings, 0 replies; 6+ messages in thread From: patchwork-bot+bluetooth @ 2026-10-23 21:00 UTC (permalink / raw) To: Luiz Augusto von Dentz; +Cc: linux-bluetooth Hello: This patch was applied to bluetooth/bluetooth-next.git (master) by Luiz Augusto von Dentz <luiz.von.dentz@intel.com>: On Thu, 22 Oct 2026 11:46:20 -0400 you wrote: > From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com> > > The driver only uses ACPI for the product reset method, so make that > depend on CONFIG_ACPI and allow the driver with COMPILE_TEST, so it is > build tested on architectures without ACPI as well, such as User Mode > Linux. Without ACPI the reset method reports it is not supported, as it > does when the device has no ACPI handle. > > [...] Here is the summary with links: - [v1] Bluetooth: btintel_pcie: Allow COMPILE_TEST without ACPI https://git.kernel.org/bluetooth/bluetooth-next/c/eb9d9d401c84 You are awesome, thank you! -- Deet-doot-dot, I am a bot. https://korg.docs.kernel.org/patchwork/pwbot.html ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2026-10-23 21:00 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-10-22 15:46 [PATCH v1] Bluetooth: btintel_pcie: Allow COMPILE_TEST without ACPI Luiz Augusto von Dentz 2026-10-22 15:46 ` [PATCH v1] Bluetooth: L2CAP: Hold incoming data until encryption key size is known Luiz Augusto von Dentz 2026-10-22 18:20 ` [v1] " bluez.test.bot 2026-10-23 21:00 ` [PATCH v1] " patchwork-bot+bluetooth 2026-10-22 18:08 ` [v1] Bluetooth: btintel_pcie: Allow COMPILE_TEST without ACPI bluez.test.bot 2026-10-23 21:00 ` [PATCH v1] " patchwork-bot+bluetooth
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.