mirror of
https://github.com/torvalds/linux.git
synced 2026-07-28 10:09:10 +02:00
KVM: x86/mmu: merge make_spte_{non,}executable
As the logic will become more complicated with the introduction of MBEC, at least write it only once. Tested-by: David Riley <d.riley@proxmox.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
6896bc190e
commit
0c768fa0ae
|
|
@ -317,14 +317,16 @@ static u64 modify_spte_protections(u64 spte, u64 set, u64 clear)
|
|||
return spte;
|
||||
}
|
||||
|
||||
static u64 make_spte_executable(u64 spte)
|
||||
static u64 change_spte_executable(u64 spte, u8 access)
|
||||
{
|
||||
return modify_spte_protections(spte, shadow_x_mask, shadow_nx_mask);
|
||||
}
|
||||
u64 set, clear;
|
||||
|
||||
static u64 make_spte_nonexecutable(u64 spte)
|
||||
{
|
||||
return modify_spte_protections(spte, shadow_nx_mask, shadow_x_mask);
|
||||
if (access & ACC_EXEC_MASK)
|
||||
set = shadow_x_mask;
|
||||
else
|
||||
set = shadow_nx_mask;
|
||||
clear = set ^ (shadow_nx_mask | shadow_x_mask);
|
||||
return modify_spte_protections(spte, set, clear);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -356,8 +358,8 @@ u64 make_small_spte(struct kvm *kvm, u64 huge_spte,
|
|||
* the page executable as the NX hugepage mitigation no longer
|
||||
* applies.
|
||||
*/
|
||||
if ((role.access & ACC_EXEC_MASK) && is_nx_huge_page_enabled(kvm))
|
||||
child_spte = make_spte_executable(child_spte);
|
||||
if (is_nx_huge_page_enabled(kvm))
|
||||
child_spte = change_spte_executable(child_spte, role.access);
|
||||
}
|
||||
|
||||
return child_spte;
|
||||
|
|
@ -379,7 +381,7 @@ u64 make_huge_spte(struct kvm *kvm, u64 small_spte, int level)
|
|||
huge_spte &= KVM_HPAGE_MASK(level) | ~PAGE_MASK;
|
||||
|
||||
if (is_nx_huge_page_enabled(kvm))
|
||||
huge_spte = make_spte_nonexecutable(huge_spte);
|
||||
huge_spte = change_spte_executable(huge_spte, 0);
|
||||
|
||||
return huge_spte;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user