All of lore.kernel.org
 help / color / mirror / Atom feed
* [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: 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: [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: 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

* 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

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.