KVM: Use standard CR3 flags, tighten checking
The kernel now has asm/cpu-features.h: use those macros instead of inventing our own. Also spell out definition of CR3_RESEVED_BITS, fix spelling and tighten it for the non-PAE case. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Signed-off-by: Avi Kivity <avi@qumranet.com>
This commit is contained in:
committed by
Avi Kivity
parent
707d92fa72
commit
f802a307cb
@@ -571,23 +571,32 @@ EXPORT_SYMBOL_GPL(set_cr4);
|
||||
void set_cr3(struct kvm_vcpu *vcpu, unsigned long cr3)
|
||||
{
|
||||
if (is_long_mode(vcpu)) {
|
||||
if (cr3 & CR3_L_MODE_RESEVED_BITS) {
|
||||
if (cr3 & CR3_L_MODE_RESERVED_BITS) {
|
||||
printk(KERN_DEBUG "set_cr3: #GP, reserved bits\n");
|
||||
inject_gp(vcpu);
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
if (cr3 & CR3_RESEVED_BITS) {
|
||||
printk(KERN_DEBUG "set_cr3: #GP, reserved bits\n");
|
||||
inject_gp(vcpu);
|
||||
return;
|
||||
}
|
||||
if (is_paging(vcpu) && is_pae(vcpu) &&
|
||||
!load_pdptrs(vcpu, cr3)) {
|
||||
printk(KERN_DEBUG "set_cr3: #GP, pdptrs "
|
||||
"reserved bits\n");
|
||||
inject_gp(vcpu);
|
||||
return;
|
||||
if (is_pae(vcpu)) {
|
||||
if (cr3 & CR3_PAE_RESERVED_BITS) {
|
||||
printk(KERN_DEBUG
|
||||
"set_cr3: #GP, reserved bits\n");
|
||||
inject_gp(vcpu);
|
||||
return;
|
||||
}
|
||||
if (is_paging(vcpu) && !load_pdptrs(vcpu, cr3)) {
|
||||
printk(KERN_DEBUG "set_cr3: #GP, pdptrs "
|
||||
"reserved bits\n");
|
||||
inject_gp(vcpu);
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
if (cr3 & CR3_NONPAE_RESERVED_BITS) {
|
||||
printk(KERN_DEBUG
|
||||
"set_cr3: #GP, reserved bits\n");
|
||||
inject_gp(vcpu);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user