forked from Minki/linux
KVM: x86: Fix page-tables reserved bits
KVM does not handle the reserved bits of x86 page tables correctly: In PAE, bits 5:8 are reserved in the PDPTE. In IA-32e, bit 8 is not reserved. Signed-off-by: Nadav Amit <namit@cs.technion.ac.il> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
This commit is contained in:
parent
0f689a33ad
commit
cd9ae5fe47
@ -3538,7 +3538,7 @@ static void reset_rsvds_bits_mask(struct kvm_vcpu *vcpu,
|
||||
case PT32E_ROOT_LEVEL:
|
||||
context->rsvd_bits_mask[0][2] =
|
||||
rsvd_bits(maxphyaddr, 63) |
|
||||
rsvd_bits(7, 8) | rsvd_bits(1, 2); /* PDPTE */
|
||||
rsvd_bits(5, 8) | rsvd_bits(1, 2); /* PDPTE */
|
||||
context->rsvd_bits_mask[0][1] = exb_bit_rsvd |
|
||||
rsvd_bits(maxphyaddr, 62); /* PDE */
|
||||
context->rsvd_bits_mask[0][0] = exb_bit_rsvd |
|
||||
@ -3550,9 +3550,9 @@ static void reset_rsvds_bits_mask(struct kvm_vcpu *vcpu,
|
||||
break;
|
||||
case PT64_ROOT_LEVEL:
|
||||
context->rsvd_bits_mask[0][3] = exb_bit_rsvd |
|
||||
rsvd_bits(maxphyaddr, 51) | rsvd_bits(7, 8);
|
||||
rsvd_bits(maxphyaddr, 51) | rsvd_bits(7, 7);
|
||||
context->rsvd_bits_mask[0][2] = exb_bit_rsvd |
|
||||
rsvd_bits(maxphyaddr, 51) | rsvd_bits(7, 8);
|
||||
rsvd_bits(maxphyaddr, 51) | rsvd_bits(7, 7);
|
||||
context->rsvd_bits_mask[0][1] = exb_bit_rsvd |
|
||||
rsvd_bits(maxphyaddr, 51);
|
||||
context->rsvd_bits_mask[0][0] = exb_bit_rsvd |
|
||||
|
Loading…
Reference in New Issue
Block a user