If a page is marked as dirty in the guest pte, set_pte_common() can set the writable bit on newly-instantiated shadow pte. This optimization avoids a write fault after the initial read fault. However, if a write fault instantiates the pte, fix_write_pf() incorrectly reports the fault as a guest page fault, and the guest oopses on what appears to be a correctly-mapped page. Fix is to detect the condition and only report a guest page fault on a user access to a kernel page. With the fix, a kvm guest can survive a whole night of running the kernel hacker's screensaver (make -j9 in a loop). Signed-off-by: Avi Kivity <avi@qumranet.com> Cc: Ingo Molnar <mingo@elte.hu> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> |
||
|---|---|---|
| .. | ||
| Kconfig | ||
| kvm.h | ||
| kvm_main.c | ||
| kvm_svm.h | ||
| kvm_vmx.h | ||
| Makefile | ||
| mmu.c | ||
| paging_tmpl.h | ||
| segment_descriptor.h | ||
| svm.c | ||
| svm.h | ||
| vmx.c | ||
| vmx.h | ||
| x86_emulate.c | ||
| x86_emulate.h | ||