mirror of
https://github.com/trezor/trezor-firmware.git
synced 2025-05-06 00:49:20 +00:00
chore(core): add unexpected fallback write for small messages
This commit is contained in:
parent
f2459189fc
commit
35d862f8b4
@ -479,18 +479,29 @@ class Channel:
|
|||||||
from trezor.enums import FailureType
|
from trezor.enums import FailureType
|
||||||
from trezor.messages import Failure
|
from trezor.messages import Failure
|
||||||
|
|
||||||
|
if length <= len(self.buffer):
|
||||||
|
# Fallback write - Write buffer is locked, using backup buffer instead
|
||||||
|
noise_payload_len = memory_manager.encode_into_buffer(
|
||||||
|
self.buffer, msg, session_id
|
||||||
|
)
|
||||||
|
task = self._write_and_encrypt(noise_payload_len, fallback=True)
|
||||||
|
if task is not None:
|
||||||
|
await task
|
||||||
|
return
|
||||||
|
|
||||||
|
# Message cannot be written - not even in fallback mode, killing channel
|
||||||
if __debug__ and utils.ALLOW_DEBUG_MESSAGES:
|
if __debug__ and utils.ALLOW_DEBUG_MESSAGES:
|
||||||
self._log("Failed to get write buffer, killing channel.")
|
self._log("Failed to get write buffer, killing channel.")
|
||||||
|
|
||||||
noise_payload_len = memory_manager.encode_into_buffer(
|
noise_payload_len = memory_manager.encode_into_buffer(
|
||||||
self.buffer,
|
self.buffer,
|
||||||
Failure(
|
Failure(
|
||||||
code=FailureType.FirmwareError,
|
code=FailureType.FirmwareError,
|
||||||
message="Failed to obtain write buffer.",
|
message="Failed to obtain write buffer.",
|
||||||
),
|
),
|
||||||
session_id,
|
session_id,
|
||||||
)
|
)
|
||||||
self.set_channel_state(ChannelState.INVALIDATED)
|
self.set_channel_state(ChannelState.INVALIDATED)
|
||||||
task = self._write_and_encrypt(
|
task = self._write_and_encrypt(
|
||||||
noise_payload_len=noise_payload_len, force=force, fallback=fallback
|
noise_payload_len=noise_payload_len, force=force, fallback=fallback
|
||||||
)
|
)
|
||||||
|
Loading…
Reference in New Issue
Block a user