2354036_ja-JP

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

2354036_ja-JP

2354036_ja-JP

Linux 6.6 + Mbed TLS 3.3.0への移行後、i.MX6QがSHA-256ファイルハッシュ処理中にハングアップする。

こんにちは、

i.MX6Q (PCIMX6Q5EVT10AA) 上の Honeywell ACM システムを Linux Kernel 4.14 + Mbed TLS 2.1.0 から移行しています。Linuxカーネル6.6 + Mbed TLS 3.3.0へ。

移住の理由:
Mbed TLS 2.1.0では、証明書チェーンの検証中に、mbedtls_x509_crt_verify() でハングアップが発生することを確認しました。
Mbed TLS 3.3.0へのアップグレード証明書検証時のハングアップを解決しました。

現在の課題:
起動時に、システムが19MBのイメージファイルをSHA-256で検証している最中にハングアップするようになりました。
mbedtls_sha256_file は新しい Mbed TLS では削除/非推奨となったため、ストリーミング呼び出しに置き換えました。
ファイルループの処理中(mbedtls_sha256_update の実行中またはその前後)にボードがハングアップします。

環境:

  1. ハードウェア:i.MX6 Quad(PCIMX6Q5EVT10AA)
  2. OS: Linuxカーネル 6.6
  3. 暗号ライブラリ:Mbed TLS 3.3.0
  4. PSA_CRYPTO_C: 無効
  5. 以前のファイル検証の作業環境:Linuxカーネル4.14 + Mbed TLS 2.1.0

観察された行動:

  1. 起動初期段階でボードが完全にフリーズする。
  2. システムがフリーズした後、ウォッチドッグは自動的にボードをリセットします。
  3.  
  4. フリーズ後、ログインプロンプトが表示されない。
  5. その段階ではdmesgは利用できません。
  6. 同じ19MBのファイルが、旧スタック上で正常に検証されました。

    コード:

    int mbedtls_sha256_file(const char *path, unsigned char output[32], int is224)
    ヤージュ
    ファイル *f = NULL;
    size_t n;
    int ret = 0;
    mbedtls_sha256_context ctx;
    unsigned char buf[4096];

    f = fopen(path, "rb");
    if (f == NULL) return F1IMG_ERR_FILE_IO;

    mbedtls_sha256_init(&ctx);
    ret = mbedtls_sha256_starts(&ctx, is224);
    if (ret != 0) goto cleanup;

    while ((n = fread(buf, 1, sizeof(buf), f)) > 0) {
    ret = mbedtls_sha256_update(&ctx, buf, n);
    if (ret != 0) goto cleanup;
    }

    if (ferror(f) != 0) {
    ret = F1IMG_ERR_FILE_IO;
    クリーンアップへ移動します。
    }

    ret = mbedtls_sha256_finish(&ctx, output);

    掃除:
    mbedtls_sha256_free(&ctx);
    if (f != NULL) fclose(f);
    return ret;
    }


    よろしくお願いいたします。

Re: i.MX6Q hang during SHA-256 file hashing after migration to Linux 6.6 + Mbed TLS 3.3.0

こんにちは、

i.MX MPUではMbed TLSはサポートされていません。これは主にi.MX RTで使用されているためです。とはいえ、お客様が遭遇されている問題について少し調査してみました。

Mbed TLS 3.xの最適化によって、CPUのハードロック(無限ループ/アラインメントされていないアクセス/未定義命令)が発生している可能性があります。

そのためには、Mbed TLS でアセンブリとハードウェアアクセラレーションをすべて無効にすることをお勧めします。
Mbed TLS 3.3.0を再構築する以下のオプションがあります:

/* ARM固有の最適化をすべて無効にする */
#undef MBEDTLS_SHA256_USE_ARMV8_A_CRYPTO_IF_PRESENT
#undef MBEDTLS_SHA256_USE_ARMV7_A
#undef MBEDTLS_SHA256_USE_NEON
 
/* 純粋なC言語による実装を強制する */
#define MBEDTLS_NO_ASM


これにより、ポータブルC SHA-256が強制され、Mbed TLS 2.1.0に近い動作になります。だから、試してみる価値はあるかもしれない。

よろしくお願いいたします。
アルド。

Tags (1)
No ratings
Version history
Last update:
‎05-02-2026 02:32 AM
Updated by: