linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/5] KVM: Dirty ring fixes and cleanups
@ 2025-01-11  1:04 Sean Christopherson
  2025-01-11  1:04 ` [PATCH 1/5] KVM: Bound the number of dirty ring entries in a single reset at INT_MAX Sean Christopherson
                   ` (5 more replies)
  0 siblings, 6 replies; 19+ messages in thread
From: Sean Christopherson @ 2025-01-11  1:04 UTC (permalink / raw)
  To: Paolo Bonzini
  Cc: kvm, linux-kernel, Peter Xu, Yan Zhao, Maxim Levitsky,
	Sean Christopherson

Yan's series to fix a flaw where a buggy/malicious userspace could coerce
KVM into corrupting TDX SPTEs got me wondering what other bad things userspace
could do by writing into the dirty ring...

The main issue is that KVM doesn't bound the processing of harvested entries
in any way, which allows userspace to keep KVM in a tight loop indefinitely.

E.g.

        struct kvm_dirty_gfn *dirty_gfns = vcpu_map_dirty_ring(vcpu);

        if (fork()) {
                int r;

                for (;;) {
                        r = kvm_vm_reset_dirty_ring(vcpu->vm);
                        if (r)
                                printf("RESET %d dirty ring entries\n", r);
                }
        } else {
                int i;

                for (i = 0; i < test_dirty_ring_count; i++) {
                        dirty_gfns[i].slot = TEST_MEM_SLOT_INDEX;
                        dirty_gfns[i].offset = (i * 64) % host_num_pages;
                }

                for (;;) {
                        for (i = 0; i < test_dirty_ring_count; i++)
                                WRITE_ONCE(dirty_gfns[i].flags, KVM_DIRTY_GFN_F_RESET);
                }
        }

Patches 1-3 address that class of bugs.  Patches 4 and 5 are cleanups.

[*] https://lore.kernel.org/all/20241220082027.15851-1-yan.y.zhao@intel.com

Sean Christopherson (5):
  KVM: Bound the number of dirty ring entries in a single reset at
    INT_MAX
  KVM: Bail from the dirty ring reset flow if a signal is pending
  KVM: Conditionally reschedule when resetting the dirty ring
  KVM: Check for empty mask of harvested dirty ring entries in caller
  KVM: Use mask of harvested dirty ring entries to coalesce dirty ring
    resets

 include/linux/kvm_dirty_ring.h |  8 ++--
 virt/kvm/dirty_ring.c          | 88 +++++++++++++++++++++-------------
 virt/kvm/kvm_main.c            |  9 ++--
 3 files changed, 66 insertions(+), 39 deletions(-)


base-commit: 10485c4bc3caad3e93a6a4e99003e8ffffcd826a
-- 
2.47.1.613.gc27f4b7a9f-goog


^ permalink raw reply	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2025-01-14 17:16 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-01-11  1:04 [PATCH 0/5] KVM: Dirty ring fixes and cleanups Sean Christopherson
2025-01-11  1:04 ` [PATCH 1/5] KVM: Bound the number of dirty ring entries in a single reset at INT_MAX Sean Christopherson
2025-01-13  6:48   ` Yan Zhao
2025-01-13  6:57     ` Yan Zhao
2025-01-11  1:04 ` [PATCH 2/5] KVM: Bail from the dirty ring reset flow if a signal is pending Sean Christopherson
2025-01-13  9:31   ` Yan Zhao
2025-01-13 15:48     ` Sean Christopherson
2025-01-14  7:29       ` Yan Zhao
2025-01-14 17:16         ` Sean Christopherson
2025-01-11  1:04 ` [PATCH 3/5] KVM: Conditionally reschedule when resetting the dirty ring Sean Christopherson
2025-01-13  7:04   ` Yan Zhao
2025-01-13 16:28     ` Sean Christopherson
2025-01-14  7:58       ` Yan Zhao
2025-01-11  1:04 ` [PATCH 4/5] KVM: Check for empty mask of harvested dirty ring entries in caller Sean Christopherson
2025-01-13 10:30   ` Yan Zhao
2025-01-13 16:48     ` Sean Christopherson
2025-01-14  8:13       ` Yan Zhao
2025-01-11  1:04 ` [PATCH 5/5] KVM: Use mask of harvested dirty ring entries to coalesce dirty ring resets Sean Christopherson
2025-01-13  9:51 ` [PATCH 0/5] KVM: Dirty ring fixes and cleanups Yan Zhao

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).