diverta / onecard-fido

MIT License
0 stars 0 forks source link

[nCS更改対応] 暗号化関連の初期化処理におけるエラーを解消する #738

Closed makmorit closed 1 year ago

makmorit commented 1 year ago

概要

737 の対応により、nCS v2.2.0へのコード移行を実施したnRF5340アプリケーションですが、暗号化関連の初期化処理で異常終了してしまいます。

具体的にはapp_crypto_initにおけるmbedtls_ctr_drbg_seed実行時に、スタックオーバーフローのエラーが発生します。

static int app_crypto_init(const struct device *dev)
{
    // Get device binding named 'CRYPTOCELL'
    :
    // Initialize random seed for CTR-DRBG
    mbedtls_ctr_drbg_init(&m_drbg_ctx);
    int ret = mbedtls_ctr_drbg_seed(&m_drbg_ctx, entropy_func, (void *)p_device, ncs_seed, sizeof(ncs_seed));
    :
}

SYS_INIT(app_crypto_init, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEVICE);

この不具合を収束させるための対応を行いたいと思います。

makmorit commented 1 year ago

対応の方向性

事前調査の結果、以下の事が判明しました。

今後の対応

mbed TLSを使用する全ての暗号化処理について、スレッドを使用した処理(=非同期処理)に改修するため、相当量の工数が必要となるかと思われます。 ですので本プルリクエストは、mbed TLSを使用する「初期化処理関連の改修」にとどめ、以降の改修は、それぞれの業務単位での移行タスクに吸収したいと思います。

初期化処理関連の改修につきましては、おおむね以下の順番で進めたいと思います。

makmorit commented 1 year ago

対応結果の確認

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