fix(core): start advertising after re-enabling BLE
What changed, and why it matters
This commit fixes a Bluetooth behavior on the Trezor T3W1 hardware wallet: after a user turns Bluetooth back on, the device now resumes advertising itself so it can be found and reconnected. Previously it might stay silent, causing connection problems. There is no direct evidence this is a security vulnerability rather than a usability bug.
Treat as a functional/UX fix unless paired with a security advisory. Review whether unexpected advertising restart could leak device presence or label to nearby observers, and confirm bonding/authentication requirements remain enforced.
Security signals we found
Bluetooth Low Energy (BLE) advertising state change
Device discoverability behavior modified
No explicit security claim in commit message or changelog
Evidence from the diff
The patch adds a call to ble.start_advertising(True, storage_device.get_label()) inside handle_ToggleBluetooth() when Bluetooth is being enabled and there is at least one bonded peer. This ensures the device begins advertising after being re-enabled, rather than remaining undiscoverable. The changelog labels it as a fix for ‘[T3W1] Restart BLE advertising after re-enabling BLE.’ No security impact is stated in the commit or supplied references.
Changed components
core/src/apps/homescreen/device_menu.pyTrezor T3W1 Bluetooth stack / BLE advertisingInspect captured patch +3 / −0
diff --git a/core/.changelog.d/5952.fixed b/core/.changelog.d/5952.fixed
new file mode 100644
index 000000000..c5ef53fc6
--- /dev/null
+++ b/core/.changelog.d/5952.fixed
@@ -0,0 +1 @@
+[T3W1] Restart BLE advertising after re-enabling BLE.
diff --git a/core/src/apps/homescreen/device_menu.py b/core/src/apps/homescreen/device_menu.py
index 8a4621ce2..1c7f3f3b3 100644
--- a/core/src/apps/homescreen/device_menu.py
+++ b/core/src/apps/homescreen/device_menu.py
@@ -261,6 +261,8 @@ async def handle_UnpairDevice(index: int) -> None:
async def handle_ToggleBluetooth() -> None:
ble_enable(not ble.get_enabled())
+ if ble.get_enabled() and ble.peer_count() > 0:
+ ble.start_advertising(True, storage_device.get_label())
async def handle_SetOrChangePin() -> None:
Why this scored 21/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.