問題タブ [hypervisor]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - カーネル ドライバーからハイパーバイザーへの関数ポインターの受け渡し
SMC 呼び出しを使用し、ハイパーバイザーで SMC 呼び出しをトラップして、EL1 (Android カーネル) から EL2 (ハイパーバイザー) に関数ポインターを渡そうとしています。ポインターをハイパーバイザーに渡すだけでは機能しないことを理解しています。これは VA であり、ハイパーバイザーにとって何の意味もないためです。
それを行う方法について何かコメントはありますか?EL1からではなく、基本的にEL2から関数を呼び出したいと思います。
私の推測では、イオンメモリを使用する必要があるか、VA -> IPA/PA を変換する必要があるかもしれません。
ヘルプやポインタをいただければ幸いです。
arm - Arm v7 仮想化拡張機能がセキュリティ拡張機能に依存する理由
これは、ARM Cortex-A15 MPCore プロセッサのテクニカル リファレンス マニュアルからのものです。
仮想化拡張機能が LPAE に依存する理由はわかりますが、セキュリティ拡張機能にも依存する理由はわかりません。
誰もこれについて手がかりを持っていますか?
一番、
V.
memory - ARM: Linux/Android ゲストに関連する ARM ハイパーバイザーの (予約する) 安全な物理メモリ位置
ARM で基本的なハイパーバイザーを開発しています (ボード Arndale Exynos 5250 を使用)。Linux(ubuntuまたはsmth else)/ Androidをゲストとしてロードしたい。現在、Linaro ディストリビューションを使用しています。
私はほとんどそこにいます。最後の問題を除いて、大きな問題のほとんどはすでに対処されています.FDTまたはカーネルコマンドラインを解析する前に、カーネルが上書きしようとしないように、ハイパーバイザー用にメモリを予約します。
問題は、Linaro ディストリビューションの U-Bootが R2 の FDT を Linux カーネルに渡すことですが、カーネルはハイパーバイザーのメモリを上書きしようとしてから、FDT でそのメモリ領域を予約していることを確認します(DTB を逆コンパイルし、DTS を変更し、再コンパイルします)。カーネルのコマンドライン パラメータを変更しようとしましたが、カーネルがメモリの予約済み部分を上書きしようとした後に解析されます。
したがって、私が必要とするのは、ハイパーバイザーのコードを配置する物理 RAM 内の安全なメモリの場所です。これにより、Linux カーネルは、FDT またはカーネル コマンド ラインを解析する前にアクセス (r/w) を試みません。
コンテキストの詳細:
- Exynos 5250 のシステム RAM レイアウトは次のとおりです。物理 RAM は0x4000_0000 (=1GB)から始まり、長さは0x8000_0000 (=2GB)です。
- Linux カーネルは (U-Boot によって) 0x4000_7000にロードされ、サイズ (圧縮されていない uImage) は 5MB 未満で、エントリ ポイントは0x4000_8000に設定されています。
- uInitrdは0x4200_0000にロードされ、サイズは2MB未満です
- FDT ( board.dtb ) は0x41f0_0000 (R2 で渡される) にロードされ、サイズは35KB未満です。
- 現在、ハイパーバイザーを0x40C0_0000にロードしており、そのアドレスから始まる 200MB ( 0x0C80_0000 )を予約したいのですが、FDT またはコマンドラインで確認する前に、カーネルがそこに書き込もうとします (ステージ 2 HYP トラップがそれを教えてくれます) 。領域が実際に予約されていること。代わりに、ハイパーバイザーを0x5000_0000にロードすると (元の DTB やコマンド ラインを変更しなくても)、上書きされません!
- FDT は、 ATAGを介さずに直接渡されます。
ハイパーバイザーを0x5000_0000にロードするとき、カーネルはそれをまったく上書きしようとしないため、FDT/コマンドラインを解析する前に Linux が触れないメモリ領域があると思います。これが正しいかどうか、また正しい場合は、これらのメモリ領域に関する詳細を知る必要があります。
ありがとう!
関連する質問:
次の優先順位を知っている人はいますか: ATAGs / kernel-command line / FDT ? たとえば、カーネル コマンド ラインを介してメモリを予約し、FDT (.dtb) では予約しない場合、それは機能するはずですか、それともコマンド ラインがFDT によって上書きされますか? これら3つの間に何らかの連結がありますか?
virtual-machine - ハイパーバイザーでホストされているゲスト OS のプライベート アドレスとパブリック アドレスを割り当てるのは誰ですか?
ゲスト OS がハイパーバイザーで起動されたときにネットワークがどうなるか知りたいです。パブリック IP を取得する方法。誰がどのようにプライベートアドレスを割り当てますか?
virtual-machine - esxi vm の CPU 制限を設定するにはどうすればよいですか?
2 つのコアを持つ 1 つのソケットが与えられた 1 つの仮想マシンを実行している ESXi 5.5 サーバーがあります。私がやりたいことは、これらのコアをそれぞれ 1500 MHz に制限して、遅いマシンでのソフトウェアの動作をシミュレートすることです。これどうやってするの?
arm - ARM HYPERVISOR: 単一命令の実行とトラップ (Intel の MTF に相当)
ARM にハイパーバイザーを実装していますが、デバッグ アーキテクチャ (v7.1) に依存せずに、1 つの命令の実行後にゲストを再開 ( ERET ) してトラップする方法があるかどうかを知る必要があります。ゲストの次の命令をHVC (Intel のVMCALLに相当) に変更することでソフトウェア アプローチを使用できますが、分岐 ( JMP )を引き起こす命令を処理する方法がわかりません。
Intel では、トラップ フラグ(= RFLAGSのTFビット、OS スレッド コンテキストごと) またはモニター トラップ フラグ(= MTF、VT-x機能) のいずれかを使用できます。
ありがとうございました
編集:説明
- 分解・エミュレーションは極力避けたい
arm - ARM TrustZone、ハイパーバイザー: 仮想化拡張機能なしのハイパーバイザー機能
ARM の CPU 仮想化に関する興味深い情報を見つけたので、それについてもっと理解するのを手伝ってくれないかと思っています。
基本的に、SierraWare と呼ばれる会社の人々は、SierraTEEと呼ばれる ARM セキュア モード OS を開発しました。これは、非セキュア モードで実行されている Linux/Android などのゲスト OS を仮想化し、セキュリティ拡張機能のみを必要とします。彼らのプレゼンテーション ドキュメントの 1 つからの情報が私の注意を引きました。具体的には、この PDF http://www.sierraware.com/sierraware_tee_hypervisor_overview.pdfの19 ページで、彼らは次のように述べています。
ルートキットとカーネル ハックの整合性チェック:
- Syscall 割り込みと割り込みハンドラを監視します。これにより、コア syscall が改ざんされないことが保証されます。
「Syscall割り込み」によって、 SVC(=古いSWI)命令の実行を理解しています(間違っている場合は修正してください)が、「監視」によって、リアルタイムの監視になる可能性があるため、よくわかりません。 -時間の監視または特定のイベントの監視。私の考えでは、SVC ハンドラーを監視して、次のいずれかで改ざんを防止できます。
- SVC ハンドラーを時々検査します (IRQ と FIQ を監視モードにルーティングできるため、タイマー割り込みなど) - PatchGuard のようなアプローチはあまり役に立ちません。
- SVC 命令の実行時に SVC ハンドラを検査する(=特定のイベントの監視)
- トラップSVC ハンドラメモリ領域の書き込みアクセス (=リアルタイム監視)
アプローチ 2に関して:非セキュア SVC 命令の実行をセキュア モードからトラップすることは可能でしょうか?
アプローチ 3に関して: Security Extensions のみを使用して、非セキュアなメモリ領域の書き込みをフックすることは可能でしょうか?
よろしくお願いします