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

Iori YONEJI iori @ osss.cs.tsukuba.ac.jp
2016年 10月 5日 (水) 09:40:41 JST


筑波大学の米司です。

BitVisor の上で Ubuntu 16.10 beta2 が動かない問題について、これを修正するパッチができたので送信します。

まずこの問題は、他のマザーボードでも再現します。

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

この問題を解決するには、以下のパッチをあててください。


diff -r 76db0ae4260b core/constants.h
--- a/core/constants.h  Mon Sep 12 20:01:54 2016 +0900
+++ b/core/constants.h  Wed Oct 05 06:04:36 2016 +0900
@@ -383,6 +383,7 @@
 #define VMCS_PROC_BASED_VMEXEC_CTL2_ENABLE_RDTSCP_BIT  0x8
 #define VMCS_PROC_BASED_VMEXEC_CTL2_ENABLE_VPID_BIT    0x20
 #define VMCS_PROC_BASED_VMEXEC_CTL2_UNRESTRICTED_GUEST_BIT     0x80
+#define VMCS_PROC_BASED_VMEXEC_CTL2_ENABLE_INVPCID_BIT 0x1000
 #define VMCS_PROC_BASED_VMEXEC_CTL2_ENABLE_XSAVES_BIT  0x100000
 #define VMCS_GUEST_ACTIVITY_STATE_ACTIVE       0x0
 #define VMCS_GUEST_ACTIVITY_STATE_HLT          0x1
diff -r 76db0ae4260b core/vt_init.c
--- a/core/vt_init.c    Mon Sep 12 20:01:54 2016 +0900
+++ b/core/vt_init.c    Wed Oct 05 06:04:36 2016 +0900
@@ -300,6 +300,10 @@
                    VMCS_PROC_BASED_VMEXEC_CTL2_UNRESTRICTED_GUEST_BIT)
                        current->u.vt.unrestricted_guest_available = true;
                if (procbased_ctls2_and &
+                   VMCS_PROC_BASED_VMEXEC_CTL2_ENABLE_INVPCID_BIT)
+                       procbased_ctls2 |=
+                               VMCS_PROC_BASED_VMEXEC_CTL2_ENABLE_INVPCID_BIT;
+               if (procbased_ctls2_and &
                    VMCS_PROC_BASED_VMEXEC_CTL2_ENABLE_RDTSCP_BIT)
                        procbased_ctls2 |=
                                VMCS_PROC_BASED_VMEXEC_CTL2_ENABLE_RDTSCP_BIT;



--------
筑波大学  情報科学類
加藤研究室 米司 伊織
--------

2016-10-04 18:23 GMT+09:00 Iori YONEJI <iori at osss.cs.tsukuba.ac.jp>:
> 筑波大学の米司です。
>
> Ubuntu 16.10 beta2 が BitVisor 上で動作しません。
>
> 再現環境と状況は以下のとおりです。
>
> 1. ASRock Z97 Extreme6 のマザーボード上のシステムに
> ubuntu-16.10-beta2-server-amd64.iso をインストールする。
> 2. BitVisor をネットワーク越しに起動する。
> 3. 何も print されない very early なステージで動作が止まる。
>
> これを、同学の竹越君と追った結果、 setup_arch() 中の find_smp_config() より以降
> (https://github.com/torvalds/linux/blob/8e4ef6386703835f91898334b72e48649646ec00/arch/x86/kernel/setup.c#L1081)
> のどこかで踏み抜いているようです。 ACPI 回りで問題が起きている予感がしますので、念のためマザーボードの型番も記させていただきました。
>
> また、 Ubuntu のビルドしたカーネルに限らず最新のカーネルでは再現するかと思います (まだしっかり再確認していませんが、
> Archlinux でも同様の状態を以前経験しました)。
>
> 今私も調べていますが、他の方で同様の現象を見かけた場合の参考になればと思い報告させていただきます。
>
> --------
> 筑波大学  情報科学類
> 加藤研究室 米司 伊織
> --------
> _______________________________________________
> BitVisor-devel mailing list
> BitVisor-devel at bitvisor.org
> https://www.bitvisor.org/mailman/listinfo/bitvisor-devel


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