[RFC PATCH 1/3] KVM: guest_memfd: Use memslot id to keep track of associated memslots
Sean Christopherson
seanjc at google.com
Mon Jul 6 14:43:23 PDT 2026
On Thu, Jul 02, 2026, Alexandru Elisei wrote:
> To enable memslot operations, KVM maintains two arrays of memslots, and an
> RCU pointer to the active (in use) array. Changes are made first to the
> inactive array, and the RCU pointer is updated to point to the inactive
> array, which becomes active.
>
> The guest_memfd file maintains an xarray of pointers to memslots that use
> it as the memory provider. After the RCU pointer to the active memslots is
> updated and until SRCU is synchronized, readers can observe the old or the
> new value for the active array, and therefore the old or the new pointer
> for a given memslot. For memslot creation or deletion that is not an issue
> for guest_memfd, as readers will either read the same memslot pointer saved
> by the guest_memfd file, or a non-existing memslot.
>
> But when changing the flags for a memslot, readers can read two different
> and non-NULL memslot pointers.
And? Why does that matter? KVM memslot updates aren't atomic. Practically
speaking, they _can't_ be made atomic. Userspace is required to quiesce all
activity that must not observe inconsistent state, i.e. userspace must pause
(stop running) vCPUs when performing a memslot update.
> Since there is no easy way to ensure that the memslot pointer that the
> guest_memfd stores is consistent with both views at the same time, modify how
> the guest_memfd file keeps track of the associated memslots: instead of
> storing the pointer directly, store the memslot id and address space id
> (as_id), and use that to reach the memslot in the active list of memslots.
I don't see how this changes anything. Readers can still see the old or new
memslot depending on when kvm->memslots[] is derefenced.
More information about the linux-arm-kernel
mailing list