首页
社区
课程
招聘
[求助] 关于cpu虚拟化中L2可以直接读写硬件cr8寄存器, 潜在导致host崩溃的疑问
发表于: 2021-5-8 11:42 6766

[求助] 关于cpu虚拟化中L2可以直接读写硬件cr8寄存器, 潜在导致host崩溃的疑问

2021-5-8 11:42
6766

缘起CVE-2017-12154,  摘要如下:

Linux kernel built with the KVM virtualisation support(CONFIG_KVM),
with nested virtualisation(nVMX) feature enabled(nested=1), is vulnerable
to a crash due to disabled external interrupts. As L2 guest could access(r/w)
hardware CR8 register of the host(L0).

In a nested virtualisation setup, L2 guest user could use this flaw
to potentially crash the host(L0) resulting in DoS.

大意就是 L2(第二层虚拟机)可以直接读写硬件的cr8寄存器, 可能导致L0(host)崩溃.


我不理解的是, L2运行在non root模式下, 它有自己的vmcs, 所以无论怎么读写寄存器, 这些改动在它触发vm exit事件时, 只会被保存到它自己的vmcs中. host有自己的vmcs, 在root模式下, 也应该用的是自己vmcs里存储的寄存器参数, 那怎么可能会导致L0崩溃??


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 3840
活跃值: (1920)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
2

这里我犯了个错误, vmcs并没有保存所有的寄存器, 对于cr寄存器, 只保存了cr0,cr3,cr4. 因此cr8是不会被自动保存的, 而且一般情况下vmm也不会保存它, 所以在"use tpr shadow" 和cr8-load existing 及cr8-store exiting 都为0的时候, L2就能直接修改cr8而不会产生vm exit, 在后续操作中发生退出non-root模式后, host的cr8也还是L2设置的值.

最后于 2021-5-19 15:31 被音货得福编辑 ,原因: 补充
2021-5-11 15:07
2
游客
登录 | 注册 方可回帖
返回
//