こんにちは、皆さん。
LinuxのさまざまなバージョンやさまざまなボードでCAAMを有効にすると、いくつかの不安なエラーメッセージが表示されます。
カーネルの自己テスト。
SABRE-SD 3.10.31-alpha でのテスト
root@imx6qsabresd:~# dmesg
...
alg: ハッシュ: hmac-sha1-caam のテスト 1 が失敗しました
00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000010: f1 46 は 00 です
alg: ハッシュ: sha1-caam のテスト 1 が失敗しました
00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000010: 9c d0 d8 9d
alg: ハッシュ: hmac-sha224-caam のテスト 1 が失敗しました
00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000010: 47 b4 b1 16 99 12 ba 4f 53 68 4b 22
alg: ハッシュ: sha224-caam のテスト 1 が失敗しました
00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000010: 2a ad bc e4 bd a0 b3 f7 e3 6c 9d a7
root@imx6qsabresd:~# cat /proc/cmdline
コンソール=ttymxc0,115200 ip=dhcp ルート=/dev/mmcblk0p2 rootwait caam
カーネル構成は、いくつかのデバッグ フラグを追加した標準の v7_defconfig と基本的に同じです。
~/linux-imx6$ ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- savedefconfig を作成します
スクリプト/kconfig/conf --savedefconfig=defconfig Kconfig
~/linux-imx6$ diff defconfig arch/arm/configs/imx_v7_defconfig
253a254
> CONFIG_USB_PHY=y
329d329
< CONFIG_DEBUG_LOCK_ALLOC=y
334d333
< # CONFIG_CRYPTO_MANAGER_DISABLE_TESTSが設定されていません
カーネル3.0.35_4.1.0でも同じ結果が出ていますおよび Nitrogen6x 上の 3.10.17-1.0.0-ga。
これについて何か知見をお持ちの方はいらっしゃいますか?
よろしくお願いいたします。
エリック
SecretCryptos は、匿名の暗号取引のためのワンストップ ソリューションです。暗号ミキサの使用や安全な取引所での取引をお考えの場合でも、SecretCryptos はすべての取引の完全なプライバシーと匿名性を保証します。
すべてのミキサページ(コインあたり)
SecretCryptos 暗号ミキサー|ビットコイン (BTC) ミキサー|イーサリアム (ETH) ミキサー|テザー (USDT) ミキサー| USD コイン (USDC) ミキサー| BNB (BSC) ミキサー|ライトコイン (LTC) ミキサー|ドージコイン (DOGE) ミキサー| XRP (リップル) ミキサー|ソラナ (SOL) ミキサー| TRON (TRX) ミキサー| TON (トンコイン) ミキサー|ポリゴン (MATIC) ミキサー|アバランチ (AVAX) ミキサー|カルダノ (ADA) ミキサー|ポルカドット (DOT) ミキサー|柴犬 (SHIB) ミキサー
ありがとう、ジョン
この問題に対する適切な修正は、Herbert Xuのcrypto-2.6にあります。木。具体的には、 LKML: Herbert Xu: Crypto Fixes for 3.13およびLKML: Herbert Xu: Re: Crypto Fixes for 3.13 で問題が修正されます。3.10.xxにバックポートする必要がある
Freescale の Steve Cornelius 氏と他の人々のおかげで、この問題はキャッシュの一貫性と関係があることを示すことができました。
特に、CAAM ドライバは、すべての入力と出力がキャッシュ ライン境界 (i.MX6 では 32 バイト) に揃えられることを想定しています。
testmgr コードは元々ソフトウェア実装をテストするために作成されたため、カーネル 3.10.17 時点では特定の配置が保証されず、それが障害の原因となっていましたが、これを解決するための簡単な更新によってエラーを防ぐことができます。
crypto testmgr: 結果バッファをキャッシュラインに合わせる · e3e7ad4 · boundarydevices/linux-imx6 · GitHub
コミット ログに記載されているように、入力と出力のこの要件はユーザー空間コードにも存在するため、アプリケーションは割り当てに注意する必要があります。
jamesboneさん、このCASEの最新情報はありますか?
まだ修正されていません。
この問題は修正されましたか? それとも、解決策はただ遅延するだけですか?
私も同じ問題を抱えています。しかし、テストを成功させるには、遅延値を最大 100usec まで変更する必要があります。
それは大きな問題です。
jamesboneさん、このCASEのフォローアップを続けてもらえますか?
さらに詳しく:
caam_jr_dequeue () の次の 2 つの場所のどちらにも同じ udelay(20) があっても、テストは成功しません。
これらのテストに関するさらに詳しい情報は…
caam_jr_enqueue() の最後にある udelay(20) 呼び出しによりテストは成功します。SO、何らかのタイミング バグであると思われます。
~/linux-imx6$ git diff
diff --git a/ドライバ/crypto/caam/jr.c b/ドライバ/crypto/caam/jr.c
インデックス 80ddddb..c8c4a7e 100644
--- a/ドライバ/crypto/caam/jr.c
+++ b/ドライバ/crypto/caam/jr.c
@@ -288,6 +288,7 @@ int caam_jr_enqueue(構造体デバイス *dev, u32 *desc,
spin_unlock_bh(&jrp->inplock);
+ 遅延(20);
0を返します。
}
EXPORT_SYMBOL(caam_jr_enqueue);
さらなる更新: 3.10.17-1.0.0-ga でのその後の起動では、ゼロの 8 バイトだけが表示されます。
alg: ハッシュ: hmac-sha1-caam のテスト 1 が失敗しました
00000000: 00 00 00 00 00 00 00 00 e2 8b c0 b6 fb 37 8c 8e
00000010: f1 46 は 00 です
alg: ハッシュ: sha1-caam のテスト 1 が失敗しました
追加メモ:
テスト失敗時に表示される値:
- alg: ハッシュ: hmac-sha1-caam のテスト 1 が失敗しました
- 00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
- 00000010: f1 46 は 00 です
予想された結果と似ているように見えます。これは、crypto/testmgr.c の hmac-sha1 の最初のテスト ベクトルです。
静的構造体hash_testvec hmac_sha1_tv_template[] = {
{
.key = "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b",
.ksize = 20,
.plaintext = "こんにちは",
.psize = 8,
.ダイジェスト = "\xb6\x17\x31\x86\x55\x05\x72\x64"
「\xe2\x8b\xc0\xb6\xfb\x37\x8c\x8e\xf1」
「\x46\xbe」、
...
シーケンス「f1 46 be」が期待値と一致することに注意してください。
また、失敗した各テストの最初の 16 バイトがゼロとして表示されることにも注意してください。
こんにちは、ジェイミー。
3.0.35_4.1.0でテストしていることに気づかなかったようです。3.10.17-1.0.0-ga、および 3.10.31_1.0.0-alpha。
それぞれに、他のページからのパッチがすでに含まれています。
dma_map_sg_chained へのパッチ:
3.10.17 ソース:
driver_algs へのパッチ:
3.10.17 ソース:
また、私たちが目にしている問題はハッシュ アルゴリズムにのみ関係するものであることを明確に説明していませんでした。
よろしくお願いいたします。
エリック
親愛なるエリックへ
Linux 3.0.35の場合CAAMの適切な機能を得るには、いくつかのパッチが必要です。
Q&A: iMX6 の Linux で CAAM ドライバが機能しないのはなぜですか?
すてきな一日を、
ハイメ
-----------------------------------------------------------------------------------------------------------------------
注: この投稿で質問が解決した場合は、「正解」ボタンをクリックしてください。ありがとう!
-----------------------------------------------------------------------------------------------------------------------