chore(core): deprecate uploading language blob during firmware update
What changed, and why it matters
This commit removes a feature that let a firmware update package include a language translation file. It is a routine cleanup: the device will no longer accept or install a language blob while rebooting into bootloader mode for a firmware update. There is no indication this fixes a security bug or introduces a vulnerability.
No security action needed. Treat as normal feature deprecation. If the removed language-blob path had any security boundary, review whether the standalone `change_language` flow still enforces the same checks (version matching, signature validation) that were previously relied on.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The change deletes the language_data_length parameter from install_upgrade() and removes the call to do_change_language() during the reboot-to-bootloader firmware-update flow. The corresponding protobuf field is no longer consumed here. The changelog entry describes this as deprecation of language-blob upload during firmware update.
Changed components
core/src/apps/management/reboot_to_bootloader.pyInspect captured patch +4 / −21
diff --git a/core/.changelog.d/6103.removed b/core/.changelog.d/6103.removed
new file mode 100644
index 00000000..10a30829
--- /dev/null
+++ b/core/.changelog.d/6103.removed
@@ -0,0 +1 @@
+Deprecate uploading language blob during firmware update.
diff --git a/core/src/apps/management/reboot_to_bootloader.py b/core/src/apps/management/reboot_to_bootloader.py
index 659c841d..e712594d 100644
--- a/core/src/apps/management/reboot_to_bootloader.py
+++ b/core/src/apps/management/reboot_to_bootloader.py
@@ -12,15 +12,11 @@ if TYPE_CHECKING:
_REBOOT_SUCCESS_TIMEOUT_MS = const(500)
-async def install_upgrade(
- firmware_header: AnyBytes, language_data_length: int
-) -> AnyBytes:
+async def install_upgrade(firmware_header: AnyBytes) -> AnyBytes:
from ubinascii import hexlify
from trezor import TR, utils, wire
- from trezor.ui.layouts import confirm_firmware_update, show_wait_text
-
- from apps.management.change_language import do_change_language
+ from trezor.ui.layouts import confirm_firmware_update
# check and parse received firmware header
try:
@@ -45,20 +41,6 @@ async def install_upgrade(
fingerprint=hexlify(hdr.fingerprint).decode(),
)
- # send language data
- if language_data_length > 0:
- show_wait_text(TR.reboot_to_bootloader__just_a_moment)
- try:
- await do_change_language(
- language_data_length,
- show_display=False,
- expected_version=hdr.version,
- report=lambda i: None,
- )
- except MemoryError:
- # Continue firmware upgrade even if language change failed
- pass
-
return hdr.hash
@@ -81,7 +63,7 @@ async def reboot_to_bootloader(msg: RebootToBootloader) -> NoReturn:
and msg.firmware_header is not None
and is_official
):
- fw_hash = await install_upgrade(msg.firmware_header, msg.language_data_length)
+ fw_hash = await install_upgrade(msg.firmware_header)
else:
await confirm_action(
Why this scored 15/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.