LX2160AでMPキーの取得に失敗しました こんにちは、NXPさん。 LLDP LX2160Aベースの安全なブートシステムを構築し、MPキーの機能検証も行っています。 LX2160Aボードのセキュアブートシステムのインストールと起動は問題なく、ITSのビット値は1だと考えていますが、「mp_app -p」コマンドを実行すると「Device is not initiated」エラーが出ます。 この問題について確認するためのアドバイスはありますか? ありがとうございました。 ジェフリー Re: LX2160A get MP key failed 顧客はLLDPの文書6.4.4項を守りましたか?
のような
Linuxプロンプトからtee-supplicant & commandを実行してください。
Linuxカーネルのバージョンによっては、右フォルダからinsmod securekeydev.koを使用していました
また、顧客が「mp_app」を実行する際にカーネルPrintkを有効にしてもらい、ログを共有してください。
エコー 8 > /proc/sys/kernel/printk
dmesg Re: LX2160A get MP key failed こんにちは、イーピンワンさん はい、 mp_appコマンドを実行する前に、tee-supplicantを起動してsecurekeydev.koをロードします。 以下はdmesgの情報です。 Jeffrey Re: LX2160A get MP key failed AEチームからの以下のアップデートをご参照ください。
お客様のフィードバックによると、「error: caam_submit_mp_get_pub_key_op: submit_job」と表示され、SECへの送信失敗を示しています。
お客様に以下のLinuxシステムでのテストをお願いしてください。 1. xtestを実行してエラーレポートを確認しますか? 2. LX2160用のCAAMモジュールをインストールするには「modprobe caam」を実行してください。もしモジュールのインストールが失敗した場合は、カーネルバージョンに対応したモジュールを更新してください。 3.エラーを報告する場合は、以下のパッチを適用してSECの戻り結果を確認し、エラーの種類を特定して、完全なログを共有してください。
diff --git a/securekeydev/securekey_caam.cb/securekeydev/securekey_caam.cインデックス b82acd3..d657742 100644
--- a/securekeydev/securekey_caam.c+++ b/securekeydev/securekey_caam.c@@ -59,12 +59,14 @@ static int submit_job(struct device *jrdev, uint32_t *desc)
/* caam_jr_enqueue 関数を呼び出して、ジョブ記述子のヘッダーをキューに追加します。*/
ret = caam_jr_enqueue(jrdev, desc, caam_op_done, NULL);
+ pr_err( "caam_jr_enqueue ret (%d)\n" , ret);
if (!ret)
wait_for_comption_interruptible(&comp);
それ以外
return ret;
ret = job_comp_status;
+ pr_err( "job_comp_status ret (%d)\n" , ret);
return ret;
}
よろしくお願いいたします。 Re: LX2160A get MP key failed あなたのコメントについてですが、 1. xtestを実行して、エラーレポートを確認しますか? 添付のxtestログを参照してください。 2. LX2160 用の caam モジュールをインストールするには、「modprobe caam」を実行してください。モジュールのインストールに失敗した場合は、カーネル バージョンと互換性のあるモジュールを更新してください。 既にカーネルにcaamモジュールを組み込みました。 3.エラーを報告する場合は、以下のパッチを適用してSECの戻り結果を確認し、エラーの種類を特定して、完全なログを共有してください。 caamとmp_appに関するdmesgの出力は以下のとおりです。 よろしくお願いします。 Re: LX2160A get MP key failed 1. Linuxカーネルでcaamジョブリングが正常に動作しているか確認してください。下のコマンドを実行してcaam jr割り込みの増加を確認してください
root@localhost:~# cat /proc/interrupts | grep jr
378: 41 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 GICv3 172 レベル 8010000.jr
379: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 GICv3 173 レベル 8020000.jr
380: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 GICv3 174 レベル fsl-jr0
root@localhost:~#
root@localhost:~#
root@localhost:~# dd if =/dev/hwrng of=/tmp/random.dat bs=1 count=16
16+0 レコード
16+0の記録が出ている
16バイトをコピーしました。0.000420759秒、38.0 kB/秒
root@localhost:~#
root@localhost:~#
root@localhost:~# cat /proc/interrupts | grep jr
378: 42 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 GICv3 172 レベル 8010000.jr
379: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 GICv3 173 レベル 8020000.jr
380: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 GICv3 174 レベル fsl-jr0
root@localhost:~#
2. submit_job() では、呼び出された関数 caam_jr_enqueue() は、成功時に (-EINPROGRESS = -115) を返します。caam enqueueの戻り結果を確認するために、以下のパッチを適用してみてください。 https://github.com/nxp-qoriq/linux/commit/4d370a1036958d7df9f1492c345b4984a4eba7f6#diff-8acc41c534456288daba59a125ddb3f779635dc493ff4888545adbf1dd0a17c1R327
diff --git a/securekeydev/securekey_caam.cb/securekeydev/securekey_caam.cインデックス b82acd3..808e8da 100644
--- a/securekeydev/securekey_caam.c+++ b/securekeydev/securekey_caam.c@@ -59,12 +59,14 @@ static int submit_job(struct device *jrdev, uint32_t *desc)
/* caam_jr_enqueue 関数を呼び出して、ジョブ記述子のヘッダーをキューに追加します。*/
ret = caam_jr_enqueue(jrdev, desc, caam_op_done, NULL);
- if (!ret)
+ pr_err( "caam_jr_enqueue ret (%d)\n" , ret);
+ if (ret == -EINPROGRESS)
wait_for_comption_interruptible(&comp);
それ以外
return ret;
ret = job_comp_status;
+ pr_err( "job_comp_status ret (%d)\n" , ret);
return ret;
}
Re: LX2160A get MP key failed 1. Linuxカーネルでcaamジョブリングが正常に動作しているか確認してください。下のコマンドを実行してcaam jr割り込みの増加を確認してください 回答:はい 2. submit_job() では、呼び出された関数 caam_jr_enqueue() は、成功時に (-EINPROGRESS = -115) を返します。caam enqueueの戻り結果を確認するために、以下のパッチを適用してみてください。 回答:私たちのシステムはLinuxカーネルv5.15.71-rt51を使っており、追加のパッチは不要に思えます。 3. さらに、-pコマンドmp_app実行後、プロセスはwait_for_completion_interruptible()で停止し、SO戻りを待っています。 Re: LX2160A get MP key failed カーネルのソースコードをもう一度確認してください。 caam_jr_enqueue() はこの分岐で戻り値を更新します。 https://github.com/nxp-qoriq/linux/blob/95448dd0dc9b621ae027cbefedaaa7c3d0d3ad2d/drivers/crypto/caam/jr.c#L565 Re: LX2160A get MP key failed AEチームからの以下のアップデートをご参照ください。
1. チームは、LSDKドキュメントに記載されているとおり、この機能はLS1046Aボードでのみ実行可能であることを確認しました。 2. 顧客のLX2160およびLS1046のランニングログから、いずれもLSDK20.04で動作しています。カーネルバージョン4.19では、caam_jr_enqueue()はこのバージョンで0を返すため、私のパッチを適用する必要はありません。 https://github.com/nxp-qoriq/linux/blob/94e0473db2feed7ed6b84848c8d227faf72297c2/drivers/crypto/caam/jr.c#L408 3. 私の方でもさらにテストが必要です。
調査結果が出次第、更新します。
Re: LX2160A get MP key failed すべてのドライバ、暗号通貨、CAAMのソースファイルを確認しましたが、同じです。 以下のようにubootスクリプトを使用してITSを有効にします。 mw.l 0x1e80200 0x4 mw.l 0x1e80020 0x2 ITSの有効化プロセスは不完全だと思いますか? Re: LX2160A get MP key failed AEチームからの以下のアップデートをご参照ください。
お客様はu-bootの「md」コマンドでITSビットが有効かどうかを確認できます。 md 0x1e80200
顧客はcaam_jr_enqueue()関数のソースコードを共有できますか?ソースコードパスは「linux/ドライバ/crypto/caam/jr.c」です。 あるいはソースコードのリンクを共有してもらえます。 Re: LX2160A get MP key failed レジスタ値については下記を参照してください。jr.c ソースコードについては添付ファイルを参照してください。 Re: LX2160A get MP key failed ITSの持ち分は爆発した。 jr.cのソースコードを確認してください。submit_jobにパッチを適用する必要があります。
diff --git a/securekeydev/securekey_caam.cb/securekeydev/securekey_caam.cインデックス b82acd3..808e8da 100644
--- a/securekeydev/securekey_caam.c+++ b/securekeydev/securekey_caam.c@@ -59,12 +59,14 @@ static int submit_job(struct device *jrdev, uint32_t *desc)
/* caam_jr_enqueue 関数を呼び出して、ジョブ記述子のヘッダーをキューに追加します。*/
ret = caam_jr_enqueue(jrdev, desc, caam_op_done, NULL);
- if (!ret)
+ pr_err( "caam_jr_enqueue ret (%d)\n" , ret);
+ if (ret == -EINPROGRESS)
wait_for_comption_interruptible(&comp);
それ以外
return ret;
ret = job_comp_status;
+ pr_err( "job_comp_status ret (%d)\n" , ret);
return ret;
}
Re: LX2160A get MP key failed ご指摘のとおりsubmit_job()にパッチを適用しましたが、結果として「mp_app -p」を実行した後、「wait_for_completion_interruptible」で停止します。 LSDKとLLDPのユーザーマニュアルの説明によると、セキュリティアプリケーション はプラットフォームLS1046ARDB上で完全に検証・検証されており、LS1046ボードでLSDKでこの問題を確認しており、動作しています。 別のLX2160製品もLSDK付きで確認すると、こちらも「wait_for_completion_interruptible」で止まっています。 LSDKを使うにせよLLDPを使うにせよ、プラットフォームLX2160A何らかの問題が生じます。 NXPはLX2160Aプラットフォーム上でセキュリティアプリケーションの検証を行いましたか?
記事全体を表示