OP-TEE のメモリについて

やりたいこと

大学の研究で,ARMのTrustZoneについて調べているのでOP-TEEを使ってSecure World(以下,SW)から Non-Secure(Normal)World(以下.NW)のメモリを参照する方法をここ2,3週間調べていた. 細かく言うと,NWで実行したプロセスのメモリをSW側から操作したいと考えていた. そこでオープンソース・ソフトウェアのTEE環境であるOP-TEEについて調査した.

調べていった結果

結論から言うと,OP-TEEの仕様上では直接SWからNWのメモリを覗くことは簡単ではなさそう. TrustZoneの定義上ではNWはNWの資源しか操作できないが,SWではNWとSW両方の資源を操作できるはず.

しかし,OP-TEEではメモリに関して,予めNWの領域とSWの領域,また両Worldでデータのやり取りをする 共有メモリを物理メモリ上で定義していて定義外のアドレス(領域)にアクセスするためにはMMUにメモリタイプ と物理アドレス,サイズを登録(マッピング)する必要がある.またNWで使用するメモリが連続か非連続なのか, Swapでデータがメモリ上に無い場合等を考慮しなければならないらしい.また,NW上の物理アドレスを SWに渡すことが安全であるのかなどの疑問が残った.SW側から直接NWの資源を操作すればNW・SW間の切り替え によるコンテキストスイッチでオーバーヘッドが大きくなる問題(もともとこれを解消したかった)が解決しそうと思っていたのだが NWでの操作が必要な場合,これも解決しない.

OP-TEEでやり方はあるのか,または他にいいTEEがあるのか.やっぱり共有メモリでやるしかないのかなぁ.