Re: [PATCH v15 11/23] KVM: selftests: Set shared attributes for ucall guest_memfd pages

From: Xiaoyao Li

Date: Fri Oct 09 2026 - 11:55:47 EST


On 10/2/2026 3:37 AM, Lisa Wang wrote:
> The default attributes for guest_memfd pages without in-place conversion
> is private.

This is wrong. The default memory attribute is of a @gfn is shared without
in-place conversion, i.e., with per-vm memory attribute.

We don't need this patch actually. And I have tested with reverting this patch,
with both out of place conversion and in-place conversion. Both worked.

> However, the ucall pages need to be shared between the host
> and the guest. Thus, set them as shared.
>
> Signed-off-by: Lisa Wang <wyihan@xxxxxxxxxx>
> ---
> tools/testing/selftests/kvm/lib/ucall_common.c | 8 ++++++++
> 1 file changed, 8 insertions(+)
>
> diff --git a/tools/testing/selftests/kvm/lib/ucall_common.c b/tools/testing/selftests/kvm/lib/ucall_common.c
> index 029ce21f9f2f..c03dfc763172 100644
> --- a/tools/testing/selftests/kvm/lib/ucall_common.c
> +++ b/tools/testing/selftests/kvm/lib/ucall_common.c
> @@ -27,6 +27,7 @@ static struct ucall_header *ucall_pool;
>
> void ucall_init(struct kvm_vm *vm, gpa_t mmio_gpa)
> {
> + struct userspace_mem_region *region;
> struct ucall_header *hdr;
> struct ucall *uc;
> gva_t gva;
> @@ -37,6 +38,13 @@ void ucall_init(struct kvm_vm *vm, gpa_t mmio_gpa)
> hdr = (struct ucall_header *)addr_gva2hva(vm, gva);
> memset(hdr, 0, sizeof(*hdr));
>
> + region = vm_get_mem_region(vm, MEM_REGION_DATA);
> + if (region->region.flags & KVM_MEM_GUEST_MEMFD) {
> + size_t aligned_sz = align_up(sizeof(*hdr), vm->page_size);
> +
> + vm_mem_set_shared(vm, addr_gva2gpa(vm, gva), aligned_sz);
> + }
> +
> for (i = 0; i < KVM_MAX_VCPUS; ++i) {
> uc = &hdr->ucalls[i];
> uc->hva = uc;
>