KVM: x86/mmu: Check for leaf SPTE when clearing dirty bit in the TDP MMU
authorDavid Matlack <dmatlack@google.com>
Fri, 27 Oct 2023 17:26:39 +0000 (10:26 -0700)
committerSean Christopherson <seanjc@google.com>
Fri, 1 Dec 2023 15:52:07 +0000 (07:52 -0800)
commit45a61ebb221117748d3567a86908618f431ac824
treecf869ad355c985b7ecbd2e881c9ca3c29715bf58
parent1aa4bb916808503bf6fedd00f50f2077f91cebaa
KVM: x86/mmu: Check for leaf SPTE when clearing dirty bit in the TDP MMU

Re-check that the given SPTE is still a leaf and present SPTE after a
failed cmpxchg in clear_dirty_gfn_range(). clear_dirty_gfn_range()
intends to only operate on present leaf SPTEs, but that could change
after a failed cmpxchg.

A check for present was added in commit 3354ef5a592d ("KVM: x86/mmu:
Check for present SPTE when clearing dirty bit in TDP MMU") but the
check for leaf is still buried in tdp_root_for_each_leaf_pte() and does
not get rechecked on retry.

Fixes: a6a0b05da9f3 ("kvm: x86/mmu: Support dirty logging for the TDP MMU")
Signed-off-by: David Matlack <dmatlack@google.com>
Link: https://lore.kernel.org/r/20231027172640.2335197-3-dmatlack@google.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
arch/x86/kvm/mmu/tdp_mmu.c