From 050936d0d7d224067cee2103afe9e0e8724946dd Mon Sep 17 00:00:00 2001 From: matejcik Date: Mon, 11 May 2020 15:52:29 +0200 Subject: [PATCH] core: enable finalizers on extmod classes --- .../extmod/modtrezorcrypto/modtrezorcrypto-aes.h | 2 +- .../extmod/modtrezorcrypto/modtrezorcrypto-bip32.h | 8 ++++---- .../modtrezorcrypto/modtrezorcrypto-blake256.h | 2 +- .../extmod/modtrezorcrypto/modtrezorcrypto-blake2b.h | 2 +- .../extmod/modtrezorcrypto/modtrezorcrypto-blake2s.h | 2 +- .../modtrezorcrypto-chacha20poly1305.h | 3 ++- .../extmod/modtrezorcrypto/modtrezorcrypto-groestl.h | 2 +- .../extmod/modtrezorcrypto/modtrezorcrypto-monero.h | 12 ++++++------ .../extmod/modtrezorcrypto/modtrezorcrypto-pbkdf2.h | 2 +- .../extmod/modtrezorcrypto/modtrezorcrypto-rfc6979.h | 2 +- .../modtrezorcrypto/modtrezorcrypto-ripemd160.h | 2 +- .../modtrezorcrypto/modtrezorcrypto-secp256k1_zkp.h | 10 +++++++++- .../extmod/modtrezorcrypto/modtrezorcrypto-sha1.h | 2 +- .../extmod/modtrezorcrypto/modtrezorcrypto-sha256.h | 2 +- .../modtrezorcrypto/modtrezorcrypto-sha3-256.h | 4 ++-- .../modtrezorcrypto/modtrezorcrypto-sha3-512.h | 4 ++-- .../extmod/modtrezorcrypto/modtrezorcrypto-sha512.h | 2 +- core/embed/extmod/modtrezorio/modtrezorio-usb.h | 2 +- 18 files changed, 37 insertions(+), 28 deletions(-) diff --git a/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-aes.h b/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-aes.h index ed1f009d8..5135ede0b 100644 --- a/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-aes.h +++ b/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-aes.h @@ -57,7 +57,7 @@ STATIC mp_obj_t mod_trezorcrypto_AES_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) { mp_arg_check_num(n_args, n_kw, 2, 3, false); - mp_obj_AES_t *o = m_new_obj(mp_obj_AES_t); + mp_obj_AES_t *o = m_new_obj_with_finaliser(mp_obj_AES_t); o->base.type = type; o->mode = mp_obj_get_int(args[0]); if (o->mode < ECB || o->mode > CTR) { diff --git a/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-bip32.h b/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-bip32.h index fc55d4252..04648e930 100644 --- a/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-bip32.h +++ b/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-bip32.h @@ -123,7 +123,7 @@ STATIC mp_obj_t mod_trezorcrypto_HDNode_make_new(const mp_obj_type_t *type, mp_raise_ValueError("curve_name is invalid"); } - mp_obj_HDNode_t *o = m_new_obj(mp_obj_HDNode_t); + mp_obj_HDNode_t *o = m_new_obj_with_finaliser(mp_obj_HDNode_t); o->base.type = type; o->fingerprint = fingerprint; o->hdnode.depth = depth; @@ -286,7 +286,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_HDNode_serialize_public_obj, /// """ STATIC mp_obj_t mod_trezorcrypto_HDNode_clone(mp_obj_t self) { mp_obj_HDNode_t *o = MP_OBJ_TO_PTR(self); - mp_obj_HDNode_t *copy = m_new_obj(mp_obj_HDNode_t); + mp_obj_HDNode_t *copy = m_new_obj_with_finaliser(mp_obj_HDNode_t); copy->base.type = &mod_trezorcrypto_HDNode_type; copy->hdnode = o->hdnode; copy->fingerprint = o->fingerprint; @@ -572,7 +572,7 @@ STATIC mp_obj_t mod_trezorcrypto_bip32_from_seed(mp_obj_t seed, mp_raise_ValueError("Failed to derive the root node"); } - mp_obj_HDNode_t *o = m_new_obj(mp_obj_HDNode_t); + mp_obj_HDNode_t *o = m_new_obj_with_finaliser(mp_obj_HDNode_t); o->base.type = &mod_trezorcrypto_HDNode_type; o->hdnode = hdnode; o->fingerprint = 0; @@ -615,7 +615,7 @@ STATIC mp_obj_t mod_trezorcrypto_bip32_from_mnemonic_cardano( mp_raise_ValueError("Invalid mnemonic"); } - mp_obj_HDNode_t *o = m_new_obj(mp_obj_HDNode_t); + mp_obj_HDNode_t *o = m_new_obj_with_finaliser(mp_obj_HDNode_t); o->base.type = &mod_trezorcrypto_HDNode_type; o->hdnode = hdnode; o->fingerprint = 0; diff --git a/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-blake256.h b/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-blake256.h index 9d9f2cfc0..a5cffc18a 100644 --- a/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-blake256.h +++ b/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-blake256.h @@ -45,7 +45,7 @@ STATIC mp_obj_t mod_trezorcrypto_Blake256_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) { mp_arg_check_num(n_args, n_kw, 0, 1, false); - mp_obj_Blake256_t *o = m_new_obj(mp_obj_Blake256_t); + mp_obj_Blake256_t *o = m_new_obj_with_finaliser(mp_obj_Blake256_t); o->base.type = type; blake256_Init(&(o->ctx)); // constructor called with bytes/str as first parameter diff --git a/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-blake2b.h b/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-blake2b.h index 5bcda3067..7e05d6684 100644 --- a/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-blake2b.h +++ b/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-blake2b.h @@ -85,7 +85,7 @@ STATIC mp_obj_t mod_trezorcrypto_Blake2b_make_new(const mp_obj_type_t *type, "time"); } - mp_obj_Blake2b_t *o = m_new_obj(mp_obj_Blake2b_t); + mp_obj_Blake2b_t *o = m_new_obj_with_finaliser(mp_obj_Blake2b_t); o->base.type = type; int res = 0; diff --git a/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-blake2s.h b/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-blake2s.h index 2aeb94dc1..9de5d0ccc 100644 --- a/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-blake2s.h +++ b/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-blake2s.h @@ -85,7 +85,7 @@ STATIC mp_obj_t mod_trezorcrypto_Blake2s_make_new(const mp_obj_type_t *type, "time"); } - mp_obj_Blake2s_t *o = m_new_obj(mp_obj_Blake2s_t); + mp_obj_Blake2s_t *o = m_new_obj_with_finaliser(mp_obj_Blake2s_t); o->base.type = type; int res = 0; diff --git a/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-chacha20poly1305.h b/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-chacha20poly1305.h index e413ab3da..76a964694 100644 --- a/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-chacha20poly1305.h +++ b/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-chacha20poly1305.h @@ -43,7 +43,8 @@ STATIC mp_obj_t mod_trezorcrypto_ChaCha20Poly1305_make_new( const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) { mp_arg_check_num(n_args, n_kw, 2, 2, false); - mp_obj_ChaCha20Poly1305_t *o = m_new_obj(mp_obj_ChaCha20Poly1305_t); + mp_obj_ChaCha20Poly1305_t *o = + m_new_obj_with_finaliser(mp_obj_ChaCha20Poly1305_t); o->base.type = type; mp_buffer_info_t key, nonce; mp_get_buffer_raise(args[0], &key, MP_BUFFER_READ); diff --git a/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-groestl.h b/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-groestl.h index 37d018bd5..51fd76c2d 100644 --- a/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-groestl.h +++ b/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-groestl.h @@ -49,7 +49,7 @@ STATIC mp_obj_t mod_trezorcrypto_Groestl512_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) { mp_arg_check_num(n_args, n_kw, 0, 1, false); - mp_obj_Groestl512_t *o = m_new_obj(mp_obj_Groestl512_t); + mp_obj_Groestl512_t *o = m_new_obj_with_finaliser(mp_obj_Groestl512_t); o->base.type = type; groestl512_Init(&(o->ctx)); if (n_args == 1) { diff --git a/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-monero.h b/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-monero.h index c48b07e87..a2c246eeb 100644 --- a/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-monero.h +++ b/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-monero.h @@ -117,7 +117,7 @@ static uint64_t mp_obj_get_uint64(mp_const_obj_t arg) { } STATIC mp_obj_t mp_obj_new_scalar() { - mp_obj_bignum256modm_t *o = m_new_obj(mp_obj_bignum256modm_t); + mp_obj_bignum256modm_t *o = m_new_obj_with_finaliser(mp_obj_bignum256modm_t); o->base.type = &mod_trezorcrypto_monero_bignum256modm_type; set256_modm(o->p, 0); return MP_OBJ_FROM_PTR(o); @@ -133,7 +133,7 @@ STATIC mp_obj_t mp_obj_new_scalar_r(mp_obj_t r) { } STATIC mp_obj_t mp_obj_new_ge25519() { - mp_obj_ge25519_t *o = m_new_obj(mp_obj_ge25519_t); + mp_obj_ge25519_t *o = m_new_obj_with_finaliser(mp_obj_ge25519_t); o->base.type = &mod_trezorcrypto_monero_ge25519_type; ge25519_set_neutral(&o->p); return MP_OBJ_FROM_PTR(o); @@ -189,7 +189,7 @@ STATIC mp_obj_t mod_trezorcrypto_monero_ge25519_make_new( const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) { mp_arg_check_num(n_args, n_kw, 0, 1, false); - mp_obj_ge25519_t *o = m_new_obj(mp_obj_ge25519_t); + mp_obj_ge25519_t *o = m_new_obj_with_finaliser(mp_obj_ge25519_t); o->base.type = type; if (n_args == 0 || args[0] == mp_const_none) { @@ -228,7 +228,7 @@ STATIC mp_obj_t mod_trezorcrypto_monero_bignum256modm_make_new( const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) { mp_arg_check_num(n_args, n_kw, 0, 1, false); - mp_obj_bignum256modm_t *o = m_new_obj(mp_obj_bignum256modm_t); + mp_obj_bignum256modm_t *o = m_new_obj_with_finaliser(mp_obj_bignum256modm_t); o->base.type = type; if (n_args == 0 || args[0] == mp_const_none) { @@ -286,7 +286,7 @@ STATIC mp_obj_t mod_trezorcrypto_monero_hasher_make_new( const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) { mp_arg_check_num(n_args, n_kw, 0, 1, false); - mp_obj_hasher_t *o = m_new_obj(mp_obj_hasher_t); + mp_obj_hasher_t *o = m_new_obj_with_finaliser(mp_obj_hasher_t); o->base.type = type; xmr_hasher_init(&(o->h)); @@ -1350,7 +1350,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN( STATIC mp_obj_t mod_trezorcrypto_monero_hasher_copy(mp_obj_t self) { mp_obj_hasher_t *o = MP_OBJ_TO_PTR(self); - mp_obj_hasher_t *cp = m_new_obj(mp_obj_hasher_t); + mp_obj_hasher_t *cp = m_new_obj_with_finaliser(mp_obj_hasher_t); cp->base.type = o->base.type; memcpy(&(cp->h), &(o->h), sizeof(Hasher)); return MP_OBJ_FROM_PTR(o); diff --git a/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-pbkdf2.h b/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-pbkdf2.h index e015a7ce2..2028672d9 100644 --- a/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-pbkdf2.h +++ b/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-pbkdf2.h @@ -59,7 +59,7 @@ STATIC mp_obj_t mod_trezorcrypto_Pbkdf2_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) { mp_arg_check_num(n_args, n_kw, 3, 4, false); - mp_obj_Pbkdf2_t *o = m_new_obj(mp_obj_Pbkdf2_t); + mp_obj_Pbkdf2_t *o = m_new_obj_with_finaliser(mp_obj_Pbkdf2_t); o->base.type = type; mp_buffer_info_t password; diff --git a/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-rfc6979.h b/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-rfc6979.h index 55a840850..de14be461 100644 --- a/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-rfc6979.h +++ b/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-rfc6979.h @@ -40,7 +40,7 @@ STATIC mp_obj_t mod_trezorcrypto_Rfc6979_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) { mp_arg_check_num(n_args, n_kw, 2, 2, false); - mp_obj_Rfc6979_t *o = m_new_obj(mp_obj_Rfc6979_t); + mp_obj_Rfc6979_t *o = m_new_obj_with_finaliser(mp_obj_Rfc6979_t); o->base.type = type; mp_buffer_info_t pkey, hash; mp_get_buffer_raise(args[0], &pkey, MP_BUFFER_READ); diff --git a/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-ripemd160.h b/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-ripemd160.h index 5b580041e..64416ea23 100644 --- a/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-ripemd160.h +++ b/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-ripemd160.h @@ -45,7 +45,7 @@ STATIC mp_obj_t mod_trezorcrypto_Ripemd160_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) { mp_arg_check_num(n_args, n_kw, 0, 1, false); - mp_obj_Ripemd160_t *o = m_new_obj(mp_obj_Ripemd160_t); + mp_obj_Ripemd160_t *o = m_new_obj_with_finaliser(mp_obj_Ripemd160_t); o->base.type = type; ripemd160_Init(&(o->ctx)); // constructor called with bytes/str as first parameter diff --git a/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-secp256k1_zkp.h b/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-secp256k1_zkp.h index e9d0bb06c..02c4d366b 100644 --- a/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-secp256k1_zkp.h +++ b/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-secp256k1_zkp.h @@ -18,6 +18,7 @@ */ #include "common.h" +#include "py/gc.h" #include "py/objstr.h" #include "vendor/secp256k1-zkp/include/secp256k1.h" @@ -25,6 +26,13 @@ #include "vendor/secp256k1-zkp/include/secp256k1_preallocated.h" #include "vendor/secp256k1-zkp/include/secp256k1_recovery.h" +// "maybe" = do not fail if allocation fails +// "with_finaliser" = pass true to gc_alloc +// combination of "malloc_maybe" and "malloc_with_finaliser" does not exist in +// malloc.c, so we need to define our own version here. +#define m_new_obj_var_maybe_with_finaliser(obj_type, var_type, var_num) \ + gc_alloc(sizeof(obj_type) + sizeof(var_type) * (var_num), true) + void secp256k1_default_illegal_callback_fn(const char *str, void *data) { (void)data; mp_raise_ValueError(str); @@ -64,7 +72,7 @@ STATIC mp_obj_t mod_trezorcrypto_secp256k1_context_make_new( const size_t secp256k1_ctx_size = secp256k1_context_preallocated_size( SECP256K1_CONTEXT_SIGN | SECP256K1_CONTEXT_VERIFY); - mp_obj_secp256k1_context_t *o = m_new_obj_var_maybe( + mp_obj_secp256k1_context_t *o = m_new_obj_var_maybe_with_finaliser( mp_obj_secp256k1_context_t, uint8_t, secp256k1_ctx_size); if (!o) { mp_raise_ValueError("secp256k1_zkp context is too large"); diff --git a/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-sha1.h b/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-sha1.h index 6b57c4c68..d69f78f9f 100644 --- a/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-sha1.h +++ b/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-sha1.h @@ -45,7 +45,7 @@ STATIC mp_obj_t mod_trezorcrypto_Sha1_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) { mp_arg_check_num(n_args, n_kw, 0, 1, false); - mp_obj_Sha1_t *o = m_new_obj(mp_obj_Sha1_t); + mp_obj_Sha1_t *o = m_new_obj_with_finaliser(mp_obj_Sha1_t); o->base.type = type; sha1_Init(&(o->ctx)); // constructor called with bytes/str as first parameter diff --git a/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-sha256.h b/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-sha256.h index 5ae3f7c70..4e9e11e19 100644 --- a/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-sha256.h +++ b/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-sha256.h @@ -45,7 +45,7 @@ STATIC mp_obj_t mod_trezorcrypto_Sha256_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) { mp_arg_check_num(n_args, n_kw, 0, 1, false); - mp_obj_Sha256_t *o = m_new_obj(mp_obj_Sha256_t); + mp_obj_Sha256_t *o = m_new_obj_with_finaliser(mp_obj_Sha256_t); o->base.type = type; sha256_Init(&(o->ctx)); // constructor called with bytes/str as first parameter diff --git a/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-sha3-256.h b/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-sha3-256.h index 0fbd25f2f..e7c787eb9 100644 --- a/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-sha3-256.h +++ b/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-sha3-256.h @@ -46,7 +46,7 @@ STATIC mp_obj_t mod_trezorcrypto_Sha3_256_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) { mp_arg_check_num(n_args, n_kw, 0, 1, true); - mp_obj_Sha3_256_t *o = m_new_obj(mp_obj_Sha3_256_t); + mp_obj_Sha3_256_t *o = m_new_obj_with_finaliser(mp_obj_Sha3_256_t); o->base.type = type; o->keccak = 0; sha3_256_Init(&(o->ctx)); @@ -111,7 +111,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_Sha3_256_digest_obj, STATIC mp_obj_t mod_trezorcrypto_Sha3_256_copy(size_t n_args, const mp_obj_t *args) { mp_obj_Sha3_256_t *o = MP_OBJ_TO_PTR(args[0]); - mp_obj_Sha3_256_t *out = m_new_obj(mp_obj_Sha3_256_t); + mp_obj_Sha3_256_t *out = m_new_obj_with_finaliser(mp_obj_Sha3_256_t); out->base.type = o->base.type; out->keccak = o->keccak; memcpy(&(out->ctx), &(o->ctx), sizeof(SHA3_CTX)); diff --git a/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-sha3-512.h b/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-sha3-512.h index 6280e1382..0505cde98 100644 --- a/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-sha3-512.h +++ b/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-sha3-512.h @@ -46,7 +46,7 @@ STATIC mp_obj_t mod_trezorcrypto_Sha3_512_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) { mp_arg_check_num(n_args, n_kw, 0, 1, true); - mp_obj_Sha3_512_t *o = m_new_obj(mp_obj_Sha3_512_t); + mp_obj_Sha3_512_t *o = m_new_obj_with_finaliser(mp_obj_Sha3_512_t); o->base.type = type; o->keccak = 0; sha3_512_Init(&(o->ctx)); @@ -111,7 +111,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_Sha3_512_digest_obj, STATIC mp_obj_t mod_trezorcrypto_Sha3_512_copy(size_t n_args, const mp_obj_t *args) { mp_obj_Sha3_512_t *o = MP_OBJ_TO_PTR(args[0]); - mp_obj_Sha3_512_t *out = m_new_obj(mp_obj_Sha3_512_t); + mp_obj_Sha3_512_t *out = m_new_obj_with_finaliser(mp_obj_Sha3_512_t); out->base.type = o->base.type; out->keccak = o->keccak; memcpy(&(out->ctx), &(o->ctx), sizeof(SHA3_CTX)); diff --git a/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-sha512.h b/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-sha512.h index 8f16ed423..46d33379c 100644 --- a/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-sha512.h +++ b/core/embed/extmod/modtrezorcrypto/modtrezorcrypto-sha512.h @@ -45,7 +45,7 @@ STATIC mp_obj_t mod_trezorcrypto_Sha512_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) { mp_arg_check_num(n_args, n_kw, 0, 1, false); - mp_obj_Sha512_t *o = m_new_obj(mp_obj_Sha512_t); + mp_obj_Sha512_t *o = m_new_obj_with_finaliser(mp_obj_Sha512_t); o->base.type = type; sha512_Init(&(o->ctx)); if (n_args == 1) { diff --git a/core/embed/extmod/modtrezorio/modtrezorio-usb.h b/core/embed/extmod/modtrezorio/modtrezorio-usb.h index fff2427e1..b75afb471 100644 --- a/core/embed/extmod/modtrezorio/modtrezorio-usb.h +++ b/core/embed/extmod/modtrezorio/modtrezorio-usb.h @@ -135,7 +135,7 @@ STATIC mp_obj_t mod_trezorio_USB_make_new(const mp_obj_type_t *type, mp_raise_ValueError("interface is invalid"); } - mp_obj_USB_t *o = m_new_obj(mp_obj_USB_t); + mp_obj_USB_t *o = m_new_obj_with_finaliser(mp_obj_USB_t); o->base.type = type; o->state = USB_CLOSED;