こんにちは、NXPさん。
LLDP LX2160Aベースの安全なブートシステムを構築し、MPキーの機能検証も行っています。
LX2160Aボードのセキュアブートシステムのインストールと起動は問題なく、ITSのビット値は1だと考えていますが、「mp_app -p」コマンドを実行すると「Device is not initiated」エラーが出ます。
この問題について確認するためのアドバイスはありますか?
ありがとうございました。
ジェフリー
顧客はLLDPの文書6.4.4項を守りましたか?
のような
また、顧客が「mp_app」を実行する際にカーネルPrintkを有効にしてもらい、ログを共有してください。
エコー 8 > /proc/sys/kernel/printk
dmesg
こんにちは、イーピンワンさん
はい、 mp_appコマンドを実行する前に、tee-supplicantを起動してsecurekeydev.koをロードします。
以下はdmesgの情報です。
Jeffrey
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; }
よろしくお願いいたします。
あなたのコメントについてですが、
1. xtestを実行して、エラーレポートを確認しますか?
添付のxtestログを参照してください。
2. LX2160 用の caam モジュールをインストールするには、「modprobe caam」を実行してください。モジュールのインストールに失敗した場合は、カーネル バージョンと互換性のあるモジュールを更新してください。
既にカーネルにcaamモジュールを組み込みました。
3.エラーを報告する場合は、以下のパッチを適用してSECの戻り結果を確認し、エラーの種類を特定して、完全なログを共有してください。
caamとmp_appに関するdmesgの出力は以下のとおりです。
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-8acc41c53445...
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; }
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戻りを待っています。
カーネルのソースコードをもう一度確認してください。
caam_jr_enqueue() はこの分岐で戻り値を更新します。
https://github.com/nxp-qoriq/linux/blob/95448dd0dc9b621ae027cbefedaaa7c3d0d3ad2d/drivers/crypto/caam...
AEチームからの以下のアップデートをご参照ください。
|
1. チームは、LSDKドキュメントに記載されているとおり、この機能はLS1046Aボードでのみ実行可能であることを確認しました。 調査結果が出次第、更新します。 |
すべてのドライバ、暗号通貨、CAAMのソースファイルを確認しましたが、同じです。
以下のようにubootスクリプトを使用してITSを有効にします。
mw.l 0x1e80200 0x4
mw.l 0x1e80020 0x2
ITSの有効化プロセスは不完全だと思いますか?
AEチームからの以下のアップデートをご参照ください。
お客様はu-bootの「md」コマンドでITSビットが有効かどうかを確認できます。
md 0x1e80200
顧客はcaam_jr_enqueue()関数のソースコードを共有できますか?ソースコードパスは「linux/ドライバ/crypto/caam/jr.c」です。
あるいはソースコードのリンクを共有してもらえます。
レジスタ値については下記を参照してください。jr.c ソースコードについては添付ファイルを参照してください。
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; }
ご指摘のとおり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プラットフォーム上でセキュリティアプリケーションの検証を行いましたか?