Skip to content

Commit f94db0c

Browse files
committed
KVM: x86/mmu: Sanity check input to kvm_mmu_free_roots()
Tweak KVM_MMU_ROOTS_ALL to precisely cover all current+previous root flags, and add a sanity in kvm_mmu_free_roots() to verify that the set of roots to free doesn't stray outside KVM_MMU_ROOTS_ALL. Signed-off-by: Lai Jiangshan <jiangshan.ljs@antgroup.com> Link: https://lore.kernel.org/r/20230216154115.710033-8-jiangshanlai@gmail.com Signed-off-by: Sean Christopherson <seanjc@google.com>
1 parent e6722d9 commit f94db0c

2 files changed

Lines changed: 6 additions & 4 deletions

File tree

arch/x86/include/asm/kvm_host.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -420,6 +420,10 @@ struct kvm_mmu_root_info {
420420

421421
#define KVM_MMU_NUM_PREV_ROOTS 3
422422

423+
#define KVM_MMU_ROOT_CURRENT BIT(0)
424+
#define KVM_MMU_ROOT_PREVIOUS(i) BIT(1+i)
425+
#define KVM_MMU_ROOTS_ALL (BIT(1 + KVM_MMU_NUM_PREV_ROOTS) - 1)
426+
423427
#define KVM_HAVE_MMU_RWLOCK
424428

425429
struct kvm_mmu_page;
@@ -1997,10 +2001,6 @@ static inline int __kvm_irq_line_state(unsigned long *irq_state,
19972001
return !!(*irq_state);
19982002
}
19992003

2000-
#define KVM_MMU_ROOT_CURRENT BIT(0)
2001-
#define KVM_MMU_ROOT_PREVIOUS(i) BIT(1+i)
2002-
#define KVM_MMU_ROOTS_ALL (~0UL)
2003-
20042004
int kvm_pic_set_irq(struct kvm_pic *pic, int irq, int irq_source_id, int level);
20052005
void kvm_pic_clear_all(struct kvm_pic *pic, int irq_source_id);
20062006

arch/x86/kvm/mmu/mmu.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3568,6 +3568,8 @@ void kvm_mmu_free_roots(struct kvm *kvm, struct kvm_mmu *mmu,
35683568
LIST_HEAD(invalid_list);
35693569
bool free_active_root;
35703570

3571+
WARN_ON_ONCE(roots_to_free & ~KVM_MMU_ROOTS_ALL);
3572+
35713573
BUILD_BUG_ON(KVM_MMU_NUM_PREV_ROOTS >= BITS_PER_LONG);
35723574

35733575
/* Before acquiring the MMU lock, see if we need to do any real work. */

0 commit comments

Comments
 (0)