[BitVisor-devel:88] Re: [PATCH] Re: Ubuntu 16.10 beta2 (linux 4.8.0-17) が BitVisor 上で動作しない

Hideki EIRAKU hdk @ igel.co.jp
2016年 10月 5日 (水) 10:48:34 JST


イーゲル 榮樂です。こんにちは。

From: Iori YONEJI <iori @ osss.cs.tsukuba.ac.jp>
Subject: [BitVisor-devel:87] [PATCH] Re: Ubuntu 16.10 beta2 (linux 4.8.0-17) が BitVisor 上で動作しない
Date: Wed, 5 Oct 2016 09:40:41 +0900

> これは今年のあるコミット(https://github.com/torvalds/linux/commit/d8bced79af1db6734f66b42064cc773cada2ce99)で
> INVPCID をチェックするようになったものの、これに対して BitVisor が INVPCID を有効化しておらず、しかし CPUID
> をそのままよませていたのでゲストは INVPCID を発行して落ちていました。

PCID は OS X・macOS で使われて困ってしまったためとりあえず CPUID で隠
しているのですが、INVPCID 命令は隠していないので、INVPCID 命令の存在確
認だけして命令を実行してしまうオペレーティング・システムではそのような
問題が発生することになってしまったようです。

PCID は簡単にいうと 64 ビットのページングで TLB に ID を付けるというよ
うな機能で、CR3 レジスターに代入するときに、その下位 12 ビットに ID を
指定し、最上位ビットでその ID がついた TLB をフラッシュするかしないか
を指定します。オペレーティング・システムがプロセスごとに異なる ID を割
り振るなどの活用をしてくれれば、シャドウページテーブルの性能改善にも役
立つ可能性があるため期待したのですが、2013 年の時点で Windows や Linux
は PCID を利用しないようだったので、単純に隠蔽することになりました。

そんなわけで肝心の PCID は今のところ隠してありますので、EPT が有効であ
れば INVPCID 命令の実行だけを許可することは可能で特に問題は発生しない
はずです。将来的に PCID に対応しようとした時、CR3 へのアクセスをフック
して PCID の変換等を行おうとすれば INVPCID 命令の実行が許可できなくな
りますが、改めて少し調べてみると BitVisor 内の CR3 の取り扱いを修正す
る必要はあるものの、VPID も使える CPU であれば PCID をパススルーにして
も問題はなさそうです。

-- 
Hideki EIRAKU <hdk @ igel.co.jp>


BitVisor-devel メーリングリストの案内