こんにちは、
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 の実行中またはその前後)にボードがハングアップします。
環境:
観察された行動:
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;
}
よろしくお願いいたします。
こんにちは、
i.MX MPUではMbed TLSはサポートされていません。これは主にi.MX RTで使用されているためです。とはいえ、お客様が遭遇されている問題について少し調査してみました。
Mbed TLS 3.xの最適化によって、CPUのハードロック(無限ループ/アラインメントされていないアクセス/未定義命令)が発生している可能性があります。
そのためには、Mbed TLS でアセンブリとハードウェアアクセラレーションをすべて無効にすることをお勧めします。
Mbed TLS 3.3.0を再構築する以下のオプションがあります:
これにより、ポータブルC SHA-256が強制され、Mbed TLS 2.1.0に近い動作になります。だから、試してみる価値はあるかもしれない。
よろしくお願いいたします。
アルド。