Verified backport commit 5c5e8c52e3caf ("Bluetooth: btmtk: move
btusb_mtk_[setup, shutdown] to btmtk.c") fixes the issue.
https://people.canonical.com/~acelan/bugs/lp2165873
** Also affects: linux-hwe-6.8 (Ubuntu Noble)
Importance: Undecided
Status: New
** Changed in: linux-hwe-6.8 (Ubuntu Noble)
Status: New => In Progress
** Changed in: linux-hwe-6.8 (Ubuntu Noble)
Assignee: (unassigned) => AceLan Kao (acelankao)
** Description changed:
+ SRU Justification
+
+ [Impact]
+ Bluetooth fails to start on HP systems with a MediaTek MT7922 controller
+ (CID: 202401-33402) running 6.8.0-139.139~22.04.1.
+
+ The kernel oopses during Bluetooth power-on. The worker thread dies, so
+ hci0 stays in DOWN INIT and its BD address is all zeros. Bluetooth is
+ unusable. rfkill unblock and hciconfig do not help.
+
+ Error log:
+
+ Bluetooth: hci0: HW/SW Version: 0x008a008a, Build Time: 20231120183620
+ BUG: kernel NULL pointer dereference, address: 0000000000000219
+ Oops: 0000 [#1] PREEMPT SMP NOPTI
+ CPU: 9 PID: 340 Comm: kworker/u33:1 Not tainted 6.8.0-139-generic
+ Workqueue: hci0 hci_power_on [bluetooth]
+ RIP: 0010:__pm_runtime_resume+0x1b/0x80
+ Call Trace:
+ <TASK>
+ usb_autopm_get_interface+0x1d/0x60
+ btmtk_usb_hci_wmt_sync+0xb9/0x340 [btmtk]
+ btmtk_setup_firmware_79xx+0x1c7/0x360 [btmtk]
+ btusb_mtk_setup+0x2d6/0x610 [btusb]
+ hci_dev_setup_sync+0x6c/0x440 [bluetooth]
+ hci_dev_init_sync+0x3e/0x1c0 [bluetooth]
+ hci_dev_open_sync+0x8b/0x350 [bluetooth]
+ hci_dev_do_open+0x28/0x70 [bluetooth]
+ hci_power_on+0x50/0x210 [bluetooth]
+
+ Hits 3 out of 3 boots. 6.8.0-138.138~22.04.1 is fine.
+
+ This breaks these checkbox tests:
+ com.canonical.certification::bluetooth/detect-output
+ com.canonical.certification::bluetooth4/beacon_eddystone_url_hc0
+
+ This is not limited to the reporting machine. Any MediaTek MT766x or
+ MT79xx USB Bluetooth controller takes the same path and hits the same
+ oops on 6.8.0-139.
+
+ [Fix]
+ 6.8.0-139 picked up d019930b0049 ("Bluetooth: btmtk: move
+ btusb_mtk_hci_wmt_sync to btmtk.c", v6.11) as a stable dependency of the
+ urb->setup_packet leak fix. That commit moves the WMT command path into
+ btmtk.c, where it reads intf, udev and ctrl_anchor out of struct
+ btmtk_data.
+
+ The commit that fills those three fields in is the next one in the same
+ upstream series, and it was not picked:
+
+ 5c5e8c52e3ca Bluetooth: btmtk: move btusb_mtk_[setup, shutdown] to
+ btmtk.c (v6.11)
+
+ So the pointers stay NULL. The first WMT command calls
+ usb_autopm_get_interface(NULL) and oopses.
+
+ The fix is to backport 5c5e8c52e3ca so the series is complete again. It
+ adds the missing assignments in btusb_mtk_setup():
+
+ btmtk_data->drv_name = btusb_driver.name;
+ btmtk_data->intf = data->intf;
+ btmtk_data->udev = data->udev;
+ btmtk_data->ctrl_anchor = &data->ctrl_anchor;
+ btmtk_data->reset_sync = btusb_mtk_reset;
+
+ udev and ctrl_anchor are just as NULL as intf, and are used by the WMT
+ receive URB, so all of them are needed. A NULL check on intf alone would
+ only move the oops.
+
+ [Test Plan]
+ On a machine with a MediaTek MT7922 Bluetooth controller.
+
+ Boot the machine, then check for the oops:
+
+ $ dmesg | grep -A20 'NULL pointer'
+ $ journalctl -b -0 -k | grep btmtk
+
+ Check the controller came up:
+
+ $ sudo rfkill unblock bluetooth
+ $ hciconfig -a
+ $ hcitool dev
+
+ Without patch:
+ dmesg shows the NULL pointer oops in __pm_runtime_resume with
+ btmtk_usb_hci_wmt_sync in the call trace.
+ hciconfig shows hci0 DOWN INIT with BD Address 00:00:00:00:00:00.
+ hcitool dev lists no device.
+
+ With patch:
+ no oops in dmesg.
+ hciconfig shows hci0 UP RUNNING with a real BD address.
+ hcitool dev lists hci0.
+
+ Then run the two failing tests:
+
+ $ checkbox-cli run com.canonical.certification::bluetooth/detect-output
+ $ checkbox-cli run
com.canonical.certification::bluetooth4/beacon_eddystone_url_hc0
+
+ Both pass with the patch, both fail without it.
+
+ [Where problems could occur]
+ Could break the btusb and btmtk drivers for all MediaTek Bluetooth
+ controllers.
+
+ This is not a small patch. It moves btusb_mtk_setup() and
+ btusb_mtk_shutdown() and their helpers out of btusb.c into btmtk.c, so
+ the whole MediaTek setup path is touched. If the move dropped or changed
+ something, MediaTek Bluetooth would fail to set up. That would show up as
+ "Failed to set up firmware" or "Failed to send wmt func ctrl" in dmesg,
+ or as a timeout during hci0 power-on, and Bluetooth would stay down.
+
+ The device reset path also moves (btusb_mtk_subsys_reset becomes
+ btmtk_usb_subsys_reset). If that is wrong, chip recovery after a firmware
+ crash would fail and the controller would need a reboot to come back.
+
+ Nothing outside drivers/bluetooth is touched. Other Bluetooth vendors
+ (Intel, Realtek, Qualcomm, Broadcom) are not affected, because btusb only
+ calls this code for MediaTek devices.
+
+ [Other Info]
+ The patch is upstream in v6.11. It is the second half of a two-commit
+ series; the first half is already in 6.8.0-139, which is what caused the
+ regression.
+
+ The backport needed manual conflict resolution in drivers/bluetooth/btusb.c.
+ 6.8 is missing the intermediate commits that added fw_flavor handling and
+ the BTMTK_FIRMWARE_LOADED flag, so the old copies of btusb_mtk_func_query(),
+ btusb_mtk_uhw_reg_*(), btusb_mtk_reg_read(), btusb_mtk_id_get(),
+ btusb_mtk_reset_done(), btusb_mtk_subsys_reset() and the open-coded
+ btusb_mtk_setup() body all conflicted. Those are exactly the functions this
+ commit deletes, so the upstream side was taken. The resulting
+ btusb_mtk_setup() is identical to upstream at 5c5e8c52e3ca.
+
+ ===========================
+
The Bluetooth controller fails to initialize on kernel
6.8.0-139.139~22.04.1. During hci_power_on, the MediaTek btmtk driver
hits a kernel NULL pointer dereference, the handling kworker dies with
IRQs disabled, and hci0 is left stuck in DOWN INIT with an all-zero BD
address.
The previous kernel 6.8.0-138.138~22.04.1 is unaffected, with identical
linux-firmware(20220329.git681281e4-0ubuntu3.42) and
bluez(5.64-0ubuntu1.4), this seems to be a kernel regression.
This failure affects the following checkbox tests:
- com.canonical.certification::bluetooth/detect-output
- com.canonical.certification::bluetooth4/beacon_eddystone_url_hc0
Machines:
- https://certification.canonical.com/hardware/202401-33402/
Steps to reproduce:
1. Boot the machine with kernel 6.8.0-139.139~22.04.1.
2. Checkbox dmesg for crash, null pointer appears in btmtk_usb_hci_wmt_sync
during hci power on.
3. run `sudo rfkill unblock bluetooth; hciconfig -a; hcitool dev` to check
the controller state.
4. reboot into 6.8.0-138.138~22.04.1 and repeat steps 2-3.
Fail rate: 3/3 on 6.8.0.139
ProblemType: Bug
DistroRelease: Ubuntu 22.04
Package: linux-image-6.8.0-139-generic 6.8.0-139.139~22.04.1
ProcVersionSignature: Ubuntu 6.8.0-139.139~22.04.1-generic 6.8.12
Uname: Linux 6.8.0-139-generic x86_64
ApportVersion: 2.20.11-0ubuntu82.10
Architecture: amd64
AudioDevicesInUse:
- USER PID ACCESS COMMAND
- /dev/snd/controlC1: ubuntu 1307 F.... pulseaudio
- /dev/snd/controlC0: ubuntu 1307 F.... pulseaudio
+ USER PID ACCESS COMMAND
+ /dev/snd/controlC1: ubuntu 1307 F.... pulseaudio
+ /dev/snd/controlC0: ubuntu 1307 F.... pulseaudio
CasperMD5CheckMismatches: ./preseed/project.cfg
CasperMD5CheckResult: fail
Date: Mon Aug 31 13:19:26 2026
DistributionChannelDescriptor:
- # This is the distribution channel descriptor for the OEM CDs
- # For more information see
http://wiki.ubuntu.com/DistributionChannelDescriptor
- canonical-oem-stella-jammy-amd64-20240408-800
+ # This is the distribution channel descriptor for the OEM CDs
+ # For more information see
http://wiki.ubuntu.com/DistributionChannelDescriptor
+ canonical-oem-stella-jammy-amd64-20240408-800
InstallationDate: Installed on 2026-08-28 (3 days ago)
InstallationMedia: Ubuntu 22.04 LTS "Jammy Jellyfish" -
pc-stella-jammy-amd64-20240408-800
MachineType: HP HP ZBook Power 16 inch G11 A Mobile Workstation PC
ProcFB: 0 amdgpudrmfb
ProcKernelCmdLine: BOOT_IMAGE=/boot/vmlinuz-6.8.0-139-generic
root=UUID=6006e56e-4c1e-49e1-8a56-4c55eea6d70d ro automatic-oem-config quiet
splash vt.handoff=7
PulseList: Error: command ['pacmd', 'list'] failed with exit code 1: No
PulseAudio daemon running, or not running as session daemon.
RelatedPackageVersions:
- linux-restricted-modules-6.8.0-139-generic N/A
- linux-backports-modules-6.8.0-139-generic N/A
- linux-firmware 20220329.git681281e4-0ubuntu3.42
+ linux-restricted-modules-6.8.0-139-generic N/A
+ linux-backports-modules-6.8.0-139-generic N/A
+ linux-firmware 20220329.git681281e4-0ubuntu3.42
SourcePackage: linux-hwe-6.8
UpgradeStatus: No upgrade log present (probably fresh install)
dmi.bios.date: 03/21/2024
dmi.bios.release: 1.1
dmi.bios.vendor: HP
dmi.bios.version: W85 Ver. 01.01.01
dmi.board.name: 8C95
dmi.board.vendor: HP
dmi.board.version: KBC Version 08.40.00
dmi.chassis.type: 10
dmi.chassis.vendor: HP
dmi.ec.firmware.release: 8.64
dmi.modalias:
dmi:bvnHP:bvrW85Ver.01.01.01:bd03/21/2024:br1.1:efr8.64:svnHP:pnHPZBookPower16inchG11AMobileWorkstationPC:pvrSBKPF:rvnHP:rn8C95:rvrKBCVersion08.40.00:cvnHP:ct10:cvr:skuXW8SKU3#ABA:
dmi.product.family: 103C_5336AN HP ZBook
dmi.product.name: HP ZBook Power 16 inch G11 A Mobile Workstation PC
dmi.product.sku: XW8SKU3#ABA
dmi.product.version: SBKPF
dmi.sys.vendor: HP
--
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/2165873
Title:
Bluetooth fails to initialize due to a kernel NULL pointer error
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/linux-hwe-6.8/+bug/2165873/+subscriptions
--
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs