From c08d21cbce3f3ea3e7fa3f0297985d9aacb71aec Mon Sep 17 00:00:00 2001 From: GroM Date: Tue, 4 Feb 2025 12:14:47 +0100 Subject: [PATCH] Fix pin lock issue during io reset --- Cargo.lock | 4 ++-- ledger_device_sdk/Cargo.toml | 4 ++-- ledger_device_sdk/src/nbgl.rs | 3 --- ledger_secure_sdk_sys/Cargo.toml | 2 +- ledger_secure_sdk_sys/src/c/src.c | 15 +++++++++++++++ 5 files changed, 20 insertions(+), 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 523bf603..d0c16979 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -474,7 +474,7 @@ checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" [[package]] name = "ledger_device_sdk" -version = "1.20.1" +version = "1.20.3" dependencies = [ "const-zero", "include_gif", @@ -489,7 +489,7 @@ dependencies = [ [[package]] name = "ledger_secure_sdk_sys" -version = "1.6.4" +version = "1.6.6" dependencies = [ "bindgen", "cc", diff --git a/ledger_device_sdk/Cargo.toml b/ledger_device_sdk/Cargo.toml index 48e4fdbd..998546d9 100644 --- a/ledger_device_sdk/Cargo.toml +++ b/ledger_device_sdk/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "ledger_device_sdk" -version = "1.20.2" +version = "1.20.3" authors = ["yhql", "yogh333", "agrojean-ledger", "kingofpayne"] edition = "2021" license.workspace = true @@ -21,7 +21,7 @@ rand_core = { version = "0.6.3", default-features = false } zeroize = { version = "1.6.0", default-features = false } numtoa = "0.2.4" const-zero = "0.1.1" -ledger_secure_sdk_sys = { path = "../ledger_secure_sdk_sys", version = "1.6.5" } +ledger_secure_sdk_sys = { path = "../ledger_secure_sdk_sys", version = "1.6.6" } [features] debug = [] diff --git a/ledger_device_sdk/src/nbgl.rs b/ledger_device_sdk/src/nbgl.rs index 85bc4614..2ad72609 100644 --- a/ledger_device_sdk/src/nbgl.rs +++ b/ledger_device_sdk/src/nbgl.rs @@ -8,9 +8,6 @@ use core::ffi::{c_char, c_int}; use core::mem::transmute; use ledger_secure_sdk_sys::*; -#[no_mangle] -static mut G_ux_params: bolos_ux_params_t = unsafe { const_zero!(bolos_ux_params_t) }; - pub mod nbgl_address_review; pub mod nbgl_choice; pub mod nbgl_generic_review; diff --git a/ledger_secure_sdk_sys/Cargo.toml b/ledger_secure_sdk_sys/Cargo.toml index 3e47ac04..790fe30c 100644 --- a/ledger_secure_sdk_sys/Cargo.toml +++ b/ledger_secure_sdk_sys/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "ledger_secure_sdk_sys" -version = "1.6.5" +version = "1.6.6" authors = ["yhql", "agrojean-ledger", "yogh333"] edition = "2021" license.workspace = true diff --git a/ledger_secure_sdk_sys/src/c/src.c b/ledger_secure_sdk_sys/src/c/src.c index 0a751021..f1da0190 100644 --- a/ledger_secure_sdk_sys/src/c/src.c +++ b/ledger_secure_sdk_sys/src/c/src.c @@ -266,6 +266,8 @@ void c_reset_bss() { memset(bss, 0, bss_len); } +bolos_ux_params_t G_ux_params; + void c_boot_std() { // below is a 'manual' implementation of `io_seproxyhal_init` #ifdef HAVE_MCU_PROTECT @@ -277,6 +279,19 @@ void c_boot_std() { io_seproxyhal_spi_send(c, 4); #endif + // Warn UX layer of io reset to avoid unwanted pin lock + memset(&G_ux_params, 0, sizeof(G_ux_params)); + G_ux_params.ux_id = BOLOS_UX_IO_RESET; + + // If the app has just been booted from the UX, multiple os_ux calls may be necessary + // to ensure UX layer has take the BOLOS_UX_IO_RESET instruction into account. + for (uint8_t i = 0; i < 2; i++) { + os_ux(&G_ux_params); + if (os_sched_last_status(TASK_BOLOS_UX) == BOLOS_UX_OK) { + break; + } + } + #ifdef HAVE_BLE unsigned int plane = G_io_app.plane_mode; #endif