Closed makmorit closed 1 year ago
事前調査の結果、以下の事が判明しました。
スタックを十分確保する必要がある
mbed TLSは相当なスタック量を消費をするソフトウェアなので、デバイスの初期化スレッド(SYS_INIT
)ではスタックが簡単にオーバーフローしてしまいます。
少なくとも、4096
バイト以上のスタック量を、スレッドに確保する必要がありそうです。
メインスレッドとは別のスレッドで実行する必要がある
前述の、十分なスタック量を確保するためには、メインスレッド(現状app_main_thread
、app_data_thread
の2点)とは別に、mbed TLS処理を実行するための専用スレッド(仮称:app_crypto_thread
)を立てる必要があります。
その上で、全てのmbed TLS処理を、app_crypto_thread
で実行させるよう、プログラムを改修する必要があるかと存じます。。
mbed TLSを使用する全ての暗号化処理について、スレッドを使用した処理(=非同期処理)に改修するため、相当量の工数が必要となるかと思われます。 ですので本プルリクエストは、mbed TLSを使用する「初期化処理関連の改修」にとどめ、以降の改修は、それぞれの業務単位での移行タスクに吸収したいと思います。
初期化処理関連の改修につきましては、おおむね以下の順番で進めたいと思います。
app_crypto_thread
を制作app_crypto_init
)を、専用スレッドを使用した処理(=非同期処理)に改修app_crypto_init
処理完了後に、ランダムベクター/秘密鍵生成処理がスタートするよう、コールバックなどの仕組みを追加する必要があります。416af46までの対応の結果、暗号化関連の初期化処理で異常終了する不具合が解消された事を確認いたしました。
*** Booting Zephyr OS build v3.2.99-ncs1 ***
I: Starting bootloader
I: Primary image: magic=unset, swap_type=0x1, copy_done=0x3, image_ok=0x3
I: Secondary image: magic=unset, swap_type=0x1, copy_done=0x3, image_ok=0x3
I: Boot source: none
I: Swap type: none
I: Bootloader chainload address offset: 0xc000
*** Booting Zephyr OS build v3.2.99-ncs1 ***
[00:00:00.011,749] <inf> app_usb_hid: Get USB HID device success
[00:00:00.012,023] <inf> app_usb: USB initialized
[00:00:00.013,000] <inf> usb_hid: Device connected
[00:00:00.013,916] <inf> app_crypto: Mbed TLS random seed initialized
[00:00:00.016,113] <inf> usb_hid: Device suspended
:
[00:00:00.190,795] <inf> usb_hid: Device configured
[00:00:00.191,070] <inf> app_crypto_util: Random vector pre-generate success
[00:00:00.327,789] <inf> rtcc: RTCC is unavailable
[00:00:00.327,850] <inf> app_main: Secure device application (PCA10095) version 0.4.8
概要
737 の対応により、nCS v2.2.0へのコード移行を実施したnRF5340アプリケーションですが、暗号化関連の初期化処理で異常終了してしまいます。
具体的には
app_crypto_init
におけるmbedtls_ctr_drbg_seed
実行時に、スタックオーバーフローのエラーが発生します。この不具合を収束させるための対応を行いたいと思います。