2022-11-29 21:08:20

by Luiz Augusto von Dentz

[permalink] [raw]
Subject: [PATCH] Bluetooth: Fix crash when replugging CSR fake controllers

From: Luiz Augusto von Dentz <[email protected]>

It seems fake CSR 5.0 clones can cause the suspend notifier to be
registered twice causing the following kernel panic:

[ 71.986122] Call Trace:
[ 71.986124] <TASK>
[ 71.986125] blocking_notifier_chain_register+0x33/0x60
[ 71.986130] hci_register_dev+0x316/0x3d0 [bluetooth 99b5497ea3d09708fa1366c1dc03288bf3cca8da]
[ 71.986154] btusb_probe+0x979/0xd85 [btusb e1e0605a4f4c01984a4b9c8ac58c3666ae287477]
[ 71.986159] ? __pm_runtime_set_status+0x1a9/0x300
[ 71.986162] ? ktime_get_mono_fast_ns+0x3e/0x90
[ 71.986167] usb_probe_interface+0xe3/0x2b0
[ 71.986171] really_probe+0xdb/0x380
[ 71.986174] ? pm_runtime_barrier+0x54/0x90
[ 71.986177] __driver_probe_device+0x78/0x170
[ 71.986180] driver_probe_device+0x1f/0x90
[ 71.986183] __device_attach_driver+0x89/0x110
[ 71.986186] ? driver_allows_async_probing+0x70/0x70
[ 71.986189] bus_for_each_drv+0x8c/0xe0
[ 71.986192] __device_attach+0xb2/0x1e0
[ 71.986195] bus_probe_device+0x92/0xb0
[ 71.986198] device_add+0x422/0x9a0
[ 71.986201] ? sysfs_merge_group+0xd4/0x110
[ 71.986205] usb_set_configuration+0x57a/0x820
[ 71.986208] usb_generic_driver_probe+0x4f/0x70
[ 71.986211] usb_probe_device+0x3a/0x110
[ 71.986213] really_probe+0xdb/0x380
[ 71.986216] ? pm_runtime_barrier+0x54/0x90
[ 71.986219] __driver_probe_device+0x78/0x170
[ 71.986221] driver_probe_device+0x1f/0x90
[ 71.986224] __device_attach_driver+0x89/0x110
[ 71.986227] ? driver_allows_async_probing+0x70/0x70
[ 71.986230] bus_for_each_drv+0x8c/0xe0
[ 71.986232] __device_attach+0xb2/0x1e0
[ 71.986235] bus_probe_device+0x92/0xb0
[ 71.986237] device_add+0x422/0x9a0
[ 71.986239] ? _dev_info+0x7d/0x98
[ 71.986242] ? blake2s_update+0x4c/0xc0
[ 71.986246] usb_new_device.cold+0x148/0x36d
[ 71.986250] hub_event+0xa8a/0x1910
[ 71.986255] process_one_work+0x1c4/0x380
[ 71.986259] worker_thread+0x51/0x390
[ 71.986262] ? rescuer_thread+0x3b0/0x3b0
[ 71.986264] kthread+0xdb/0x110
[ 71.986266] ? kthread_complete_and_exit+0x20/0x20
[ 71.986268] ret_from_fork+0x1f/0x30
[ 71.986273] </TASK>
[ 71.986274] ---[ end trace 0000000000000000 ]---
[ 71.986284] btusb: probe of 2-1.6:1.0 failed with error -17

Link: https://bugzilla.kernel.org/show_bug.cgi?id=216683
Cc: [email protected]
Signed-off-by: Luiz Augusto von Dentz <[email protected]>
---
net/bluetooth/hci_core.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
index 9d9fb3dff22a..56f8569ace86 100644
--- a/net/bluetooth/hci_core.c
+++ b/net/bluetooth/hci_core.c
@@ -2764,7 +2764,8 @@ int hci_register_suspend_notifier(struct hci_dev *hdev)
{
int ret = 0;

- if (!test_bit(HCI_QUIRK_NO_SUSPEND_NOTIFIER, &hdev->quirks)) {
+ if (!hdev->suspend_notifier.notifier_call &&
+ !test_bit(HCI_QUIRK_NO_SUSPEND_NOTIFIER, &hdev->quirks)) {
hdev->suspend_notifier.notifier_call = hci_suspend_notifier;
ret = register_pm_notifier(&hdev->suspend_notifier);
}
@@ -2776,8 +2777,11 @@ int hci_unregister_suspend_notifier(struct hci_dev *hdev)
{
int ret = 0;

- if (!test_bit(HCI_QUIRK_NO_SUSPEND_NOTIFIER, &hdev->quirks))
+ if (hdev->suspend_notifier.notifier_call) {
ret = unregister_pm_notifier(&hdev->suspend_notifier);
+ if (!ret)
+ hdev->suspend_notifier.notifier_call = NULL;
+ }

return ret;
}
--
2.37.3


2022-11-29 21:52:27

by bluez.test.bot

[permalink] [raw]
Subject: RE: Bluetooth: Fix crash when replugging CSR fake controllers

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/project/bluetooth/list/?series=700236

---Test result---

Test Summary:
CheckPatch PASS 0.68 seconds
GitLint FAIL 0.58 seconds
SubjectPrefix PASS 0.09 seconds
BuildKernel PASS 43.46 seconds
BuildKernel32 PASS 39.22 seconds
TestRunnerSetup PASS 542.86 seconds
TestRunner_l2cap-tester PASS 18.75 seconds
TestRunner_iso-tester PASS 19.38 seconds
TestRunner_bnep-tester PASS 6.76 seconds
TestRunner_mgmt-tester PASS 128.18 seconds
TestRunner_rfcomm-tester PASS 11.48 seconds
TestRunner_sco-tester PASS 10.40 seconds
TestRunner_ioctl-tester PASS 12.38 seconds
TestRunner_mesh-tester PASS 8.84 seconds
TestRunner_smp-tester PASS 10.18 seconds
TestRunner_userchan-tester PASS 7.07 seconds
IncrementalBuild PASS 39.71 seconds

Details
##############################
Test: GitLint - FAIL
Desc: Run gitlint
Output:
Bluetooth: Fix crash when replugging CSR fake controllers

11: B1 Line exceeds max length (97>80): "[ 71.986130] hci_register_dev+0x316/0x3d0 [bluetooth 99b5497ea3d09708fa1366c1dc03288bf3cca8da]"
12: B1 Line exceeds max length (88>80): "[ 71.986154] btusb_probe+0x979/0xd85 [btusb e1e0605a4f4c01984a4b9c8ac58c3666ae287477]"


---
Regards,
Linux Bluetooth

2022-12-02 21:34:05

by patchwork-bot+bluetooth

[permalink] [raw]
Subject: Re: [PATCH] Bluetooth: Fix crash when replugging CSR fake controllers

Hello:

This patch was applied to bluetooth/bluetooth-next.git (master)
by Luiz Augusto von Dentz <[email protected]>:

On Tue, 29 Nov 2022 12:54:13 -0800 you wrote:
> From: Luiz Augusto von Dentz <[email protected]>
>
> It seems fake CSR 5.0 clones can cause the suspend notifier to be
> registered twice causing the following kernel panic:
>
> [ 71.986122] Call Trace:
> [ 71.986124] <TASK>
> [ 71.986125] blocking_notifier_chain_register+0x33/0x60
> [ 71.986130] hci_register_dev+0x316/0x3d0 [bluetooth 99b5497ea3d09708fa1366c1dc03288bf3cca8da]
> [ 71.986154] btusb_probe+0x979/0xd85 [btusb e1e0605a4f4c01984a4b9c8ac58c3666ae287477]
> [ 71.986159] ? __pm_runtime_set_status+0x1a9/0x300
> [ 71.986162] ? ktime_get_mono_fast_ns+0x3e/0x90
> [ 71.986167] usb_probe_interface+0xe3/0x2b0
> [ 71.986171] really_probe+0xdb/0x380
> [ 71.986174] ? pm_runtime_barrier+0x54/0x90
> [ 71.986177] __driver_probe_device+0x78/0x170
> [ 71.986180] driver_probe_device+0x1f/0x90
> [ 71.986183] __device_attach_driver+0x89/0x110
> [ 71.986186] ? driver_allows_async_probing+0x70/0x70
> [ 71.986189] bus_for_each_drv+0x8c/0xe0
> [ 71.986192] __device_attach+0xb2/0x1e0
> [ 71.986195] bus_probe_device+0x92/0xb0
> [ 71.986198] device_add+0x422/0x9a0
> [ 71.986201] ? sysfs_merge_group+0xd4/0x110
> [ 71.986205] usb_set_configuration+0x57a/0x820
> [ 71.986208] usb_generic_driver_probe+0x4f/0x70
> [ 71.986211] usb_probe_device+0x3a/0x110
> [ 71.986213] really_probe+0xdb/0x380
> [ 71.986216] ? pm_runtime_barrier+0x54/0x90
> [ 71.986219] __driver_probe_device+0x78/0x170
> [ 71.986221] driver_probe_device+0x1f/0x90
> [ 71.986224] __device_attach_driver+0x89/0x110
> [ 71.986227] ? driver_allows_async_probing+0x70/0x70
> [ 71.986230] bus_for_each_drv+0x8c/0xe0
> [ 71.986232] __device_attach+0xb2/0x1e0
> [ 71.986235] bus_probe_device+0x92/0xb0
> [ 71.986237] device_add+0x422/0x9a0
> [ 71.986239] ? _dev_info+0x7d/0x98
> [ 71.986242] ? blake2s_update+0x4c/0xc0
> [ 71.986246] usb_new_device.cold+0x148/0x36d
> [ 71.986250] hub_event+0xa8a/0x1910
> [ 71.986255] process_one_work+0x1c4/0x380
> [ 71.986259] worker_thread+0x51/0x390
> [ 71.986262] ? rescuer_thread+0x3b0/0x3b0
> [ 71.986264] kthread+0xdb/0x110
> [ 71.986266] ? kthread_complete_and_exit+0x20/0x20
> [ 71.986268] ret_from_fork+0x1f/0x30
> [ 71.986273] </TASK>
> [ 71.986274] ---[ end trace 0000000000000000 ]---
> [ 71.986284] btusb: probe of 2-1.6:1.0 failed with error -17
>
> [...]

Here is the summary with links:
- Bluetooth: Fix crash when replugging CSR fake controllers
https://git.kernel.org/bluetooth/bluetooth-next/c/dbd24be48422

You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html