Vitaly Kuznetsov <vkuznets@xxxxxxxxxx> 於 2019年9月12日週四 下午6:53寫道: > > Fuqian Huang <huangfq.daxian@xxxxxxxxx> writes: > > > Vitaly Kuznetsov <vkuznets@xxxxxxxxxx> 於 2019年9月12日週四 下午4:51寫道: > >> > >> Fuqian Huang <huangfq.daxian@xxxxxxxxx> writes: > >> > >> > Emulation of VMPTRST can incorrectly inject a page fault > >> > when passed an operand that points to an MMIO address. > >> > The page fault will use uninitialized kernel stack memory > >> > as the CR2 and error code. > >> > > >> > The right behavior would be to abort the VM with a KVM_EXIT_INTERNAL_ERROR > >> > exit to userspace; > >> > >> Hm, why so? KVM_EXIT_INTERNAL_ERROR is basically an error in KVM, this > >> is not a proper reaction to a userspace-induced condition (or ever). > >> > >> I also looked at VMPTRST's description in Intel's manual and I can't > >> find and explicit limitation like "this must be normal memory". We're > >> just supposed to inject #PF "If a page fault occurs in accessing the > >> memory destination operand." > >> > >> In case it seems to be too cumbersome to handle VMPTRST to MMIO and we > >> think that nobody should be doing that I'd rather prefer injecting #GP. > >> > >> Please tell me what I'm missing :-) > > > > I found it during the code review, and it looks like the problem the > > commit 353c0956a618 ("KVM: x86: work around leak of uninitialized > > stack contents (CVE-2019-7222)") > > mentions. So I fixed it in a similar way. > > > > Oh, yes, I'm not against the fix at all, I was just wondering about why > you think we need to kill the guest in this case. I don't know what is the proper way to handle this case, I just initialize the memory to avoid information leakage. (Actually, I am not an expert on KVM's code) I will be appreciated if the bug is fixed. :) > > -- > Vitaly