mirror of
https://github.com/trezor/trezor-firmware.git
synced 2025-05-07 17:39:03 +00:00
fix(core/bootloader_ci): fix firmware upload
[no changelog]
This commit is contained in:
parent
ced0a1462e
commit
d506abd9db
@ -359,8 +359,8 @@ void process_msg_FirmwareErase(uint8_t iface_num, uint32_t msg_size,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static uint32_t chunk_size = 0;
|
static uint32_t chunk_size = 0;
|
||||||
// SRAM is unused, so we can use it for chunk buffer
|
|
||||||
uint8_t *const chunk_buffer = (uint8_t *const)0x20000000;
|
__attribute__((section(".buf"))) uint32_t chunk_buffer[IMAGE_CHUNK_SIZE / 4];
|
||||||
|
|
||||||
/* we don't use secbool/sectrue/secfalse here as it is a nanopb api */
|
/* we don't use secbool/sectrue/secfalse here as it is a nanopb api */
|
||||||
static bool _read_payload(pb_istream_t *stream, const pb_field_t *field,
|
static bool _read_payload(pb_istream_t *stream, const pb_field_t *field,
|
||||||
@ -391,7 +391,7 @@ static bool _read_payload(pb_istream_t *stream, const pb_field_t *field,
|
|||||||
}
|
}
|
||||||
// read data
|
// read data
|
||||||
if (!pb_read(
|
if (!pb_read(
|
||||||
stream, (pb_byte_t *)(chunk_buffer + chunk_written),
|
stream, (pb_byte_t *)((uint8_t *)chunk_buffer + chunk_written),
|
||||||
(stream->bytes_left > BUFSIZE) ? BUFSIZE : stream->bytes_left)) {
|
(stream->bytes_left > BUFSIZE) ? BUFSIZE : stream->bytes_left)) {
|
||||||
chunk_size = 0;
|
chunk_size = 0;
|
||||||
return false;
|
return false;
|
||||||
@ -481,7 +481,7 @@ int process_msg_FirmwareUpload(uint8_t iface_num, uint32_t msg_size,
|
|||||||
// first block and headers are not yet parsed
|
// first block and headers are not yet parsed
|
||||||
vendor_header vhdr;
|
vendor_header vhdr;
|
||||||
|
|
||||||
if (sectrue != read_vendor_header(chunk_buffer, &vhdr)) {
|
if (sectrue != read_vendor_header((uint8_t *)chunk_buffer, &vhdr)) {
|
||||||
MSG_SEND_INIT(Failure);
|
MSG_SEND_INIT(Failure);
|
||||||
MSG_SEND_ASSIGN_VALUE(code, FailureType_Failure_ProcessError);
|
MSG_SEND_ASSIGN_VALUE(code, FailureType_Failure_ProcessError);
|
||||||
MSG_SEND_ASSIGN_STRING(message, "Invalid vendor header");
|
MSG_SEND_ASSIGN_STRING(message, "Invalid vendor header");
|
||||||
@ -497,10 +497,12 @@ int process_msg_FirmwareUpload(uint8_t iface_num, uint32_t msg_size,
|
|||||||
return UPLOAD_ERR_INVALID_VENDOR_HEADER_SIG;
|
return UPLOAD_ERR_INVALID_VENDOR_HEADER_SIG;
|
||||||
}
|
}
|
||||||
|
|
||||||
const image_header *received_hdr = read_image_header(
|
const image_header *received_hdr =
|
||||||
chunk_buffer + vhdr.hdrlen, FIRMWARE_IMAGE_MAGIC, FIRMWARE_MAXSIZE);
|
read_image_header((uint8_t *)chunk_buffer + vhdr.hdrlen,
|
||||||
|
FIRMWARE_IMAGE_MAGIC, FIRMWARE_MAXSIZE);
|
||||||
|
|
||||||
if (received_hdr != (const image_header *)(chunk_buffer + vhdr.hdrlen)) {
|
if (received_hdr !=
|
||||||
|
(const image_header *)((uint8_t *)chunk_buffer + vhdr.hdrlen)) {
|
||||||
MSG_SEND_INIT(Failure);
|
MSG_SEND_INIT(Failure);
|
||||||
MSG_SEND_ASSIGN_VALUE(code, FailureType_Failure_ProcessError);
|
MSG_SEND_ASSIGN_VALUE(code, FailureType_Failure_ProcessError);
|
||||||
MSG_SEND_ASSIGN_STRING(message, "Invalid firmware header");
|
MSG_SEND_ASSIGN_STRING(message, "Invalid firmware header");
|
||||||
@ -592,7 +594,7 @@ int process_msg_FirmwareUpload(uint8_t iface_num, uint32_t msg_size,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (sectrue != check_single_hash(hdr.hashes + firmware_block * 32,
|
if (sectrue != check_single_hash(hdr.hashes + firmware_block * 32,
|
||||||
chunk_buffer + headers_offset,
|
(uint8_t *)chunk_buffer + headers_offset,
|
||||||
chunk_size - headers_offset)) {
|
chunk_size - headers_offset)) {
|
||||||
if (firmware_upload_chunk_retry > 0) {
|
if (firmware_upload_chunk_retry > 0) {
|
||||||
--firmware_upload_chunk_retry;
|
--firmware_upload_chunk_retry;
|
||||||
|
Loading…
Reference in New Issue
Block a user