diff options
author | Nadav Amit <namit@cs.technion.ac.il> | 2014-04-03 23:31:04 -0400 |
---|---|---|
committer | Marcelo Tosatti <mtosatti@redhat.com> | 2014-04-16 17:59:23 -0400 |
commit | cd9ae5fe47dfb9820976c3c38c70f4b07a5a1c36 (patch) | |
tree | 22d121a01ed93be00360d5549c3cbcc65790be07 /arch/x86/kvm | |
parent | 0f689a33ad17845363acdc6d52783befd6ad116c (diff) |
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>
Diffstat (limited to 'arch/x86/kvm')
-rw-r--r-- | arch/x86/kvm/mmu.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c index 813d31038b93..668ae5916de9 100644 --- a/arch/x86/kvm/mmu.c +++ b/arch/x86/kvm/mmu.c | |||
@@ -3538,7 +3538,7 @@ static void reset_rsvds_bits_mask(struct kvm_vcpu *vcpu, | |||
3538 | case PT32E_ROOT_LEVEL: | 3538 | case PT32E_ROOT_LEVEL: |
3539 | context->rsvd_bits_mask[0][2] = | 3539 | context->rsvd_bits_mask[0][2] = |
3540 | rsvd_bits(maxphyaddr, 63) | | 3540 | rsvd_bits(maxphyaddr, 63) | |
3541 | rsvd_bits(7, 8) | rsvd_bits(1, 2); /* PDPTE */ | 3541 | rsvd_bits(5, 8) | rsvd_bits(1, 2); /* PDPTE */ |
3542 | context->rsvd_bits_mask[0][1] = exb_bit_rsvd | | 3542 | context->rsvd_bits_mask[0][1] = exb_bit_rsvd | |
3543 | rsvd_bits(maxphyaddr, 62); /* PDE */ | 3543 | rsvd_bits(maxphyaddr, 62); /* PDE */ |
3544 | context->rsvd_bits_mask[0][0] = exb_bit_rsvd | | 3544 | context->rsvd_bits_mask[0][0] = exb_bit_rsvd | |
@@ -3550,9 +3550,9 @@ static void reset_rsvds_bits_mask(struct kvm_vcpu *vcpu, | |||
3550 | break; | 3550 | break; |
3551 | case PT64_ROOT_LEVEL: | 3551 | case PT64_ROOT_LEVEL: |
3552 | context->rsvd_bits_mask[0][3] = exb_bit_rsvd | | 3552 | context->rsvd_bits_mask[0][3] = exb_bit_rsvd | |
3553 | rsvd_bits(maxphyaddr, 51) | rsvd_bits(7, 8); | 3553 | rsvd_bits(maxphyaddr, 51) | rsvd_bits(7, 7); |
3554 | context->rsvd_bits_mask[0][2] = exb_bit_rsvd | | 3554 | context->rsvd_bits_mask[0][2] = exb_bit_rsvd | |
3555 | rsvd_bits(maxphyaddr, 51) | rsvd_bits(7, 8); | 3555 | rsvd_bits(maxphyaddr, 51) | rsvd_bits(7, 7); |
3556 | context->rsvd_bits_mask[0][1] = exb_bit_rsvd | | 3556 | context->rsvd_bits_mask[0][1] = exb_bit_rsvd | |
3557 | rsvd_bits(maxphyaddr, 51); | 3557 | rsvd_bits(maxphyaddr, 51); |
3558 | context->rsvd_bits_mask[0][0] = exb_bit_rsvd | | 3558 | context->rsvd_bits_mask[0][0] = exb_bit_rsvd | |