All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Ackerley Tng via B4 Relay" <devnull+ackerleytng.google.com@kernel.org>
Cc: kvm@vger.kernel.org
Subject: Re: [PATCH v7 09/42] KVM: guest_memfd: Add base support for KVM_SET_MEMORY_ATTRIBUTES2
Date: Sat, 23 May 2026 01:01:57 +0000	[thread overview]
Message-ID: <20260523010158.085871F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260522-gmem-inplace-conversion-v7-9-2f0fae496530@google.com>

Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] Missing .compat_ioctl for guest_memfd file operations breaks 32-bit userspace.
- [Medium] Silent truncation of 64-bit memory attributes in maple tree storage.
--

commit 49c89936f50d0c8e067175446db94838144dd770
Author: Ackerley Tng <ackerleytng@google.com>

KVM: guest_memfd: Add base support for KVM_SET_MEMORY_ATTRIBUTES2

This commit introduces base support for KVM_SET_MEMORY_ATTRIBUTES2 in
guest_memfd to update memory attributes. It defines the new ioctl and
its corresponding struct, allowing both read and write operations to
provide error details to userspace.

> diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c
> index 4f7c4824c3a45..91e89b188f583 100644
> --- a/virt/kvm/guest_memfd.c
> +++ b/virt/kvm/guest_memfd.c
> @@ -540,11 +540,125 @@ unsigned long kvm_gmem_get_memory_attributes(struct kvm *kvm, gfn_t gfn)
[ ... ]
> +static int __kvm_gmem_set_attributes(struct inode *inode, pgoff_t start,
> +				     size_t nr_pages, uint64_t attrs)
> +{
[ ... ]
> +	kvm_gmem_invalidate_begin(inode, start, end);
> +	mas_store_prealloc(&mas, xa_mk_value(attrs));

[Severity: Medium]
Could the use of xa_mk_value() here silently truncate the highest bit of the
64-bit attributes field?

The UAPI defines attributes as a 64-bit integer (__u64), but xa_mk_value()
takes an unsigned long and shifts it left by 1 to set the lowest bit for
internal pointer tagging. On a 64-bit system, this restricts the usable
value to 63 bits. If an attribute ever uses bit 63, it seems it would be
lost when shifted, contradicting the 64-bit UAPI contract.

> +	kvm_gmem_invalidate_end(inode, start, end);
> +out:
> +	filemap_invalidate_unlock(mapping);
> +	return r;
> +}
[ ... ]
>  static struct file_operations kvm_gmem_fops = {
>  	.mmap		= kvm_gmem_mmap,
>  	.open		= generic_file_open,
>  	.release	= kvm_gmem_release,
>  	.fallocate	= kvm_gmem_fallocate,
> +	.unlocked_ioctl	= kvm_gmem_ioctl,

[Severity: High]
Does this missing .compat_ioctl handler break 32-bit userspace?

Without a .compat_ioctl handler, 32-bit KVM userspace tasks running on a
64-bit kernel will unconditionally receive -ENOTTY when attempting to use
the new KVM_SET_MEMORY_ATTRIBUTES2 ioctl. 

Since the layout of kvm_memory_attributes2 is identical across 32-bit and
64-bit architectures (all members are __u64), should this assign 
.compat_ioctl = compat_ptr_ioctl to ensure API compatibility for compat
tasks?

>  };
>  
>  static int kvm_gmem_migrate_folio(struct address_space *mapping,

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260522-gmem-inplace-conversion-v7-0-2f0fae496530@google.com?part=9

  reply	other threads:[~2026-05-23  1:01 UTC|newest]

Thread overview: 129+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-05-23  0:17 [PATCH v7 00/42] guest_memfd: In-place conversion support Ackerley Tng via B4 Relay
2026-05-23  0:17 ` Ackerley Tng
2026-05-23  0:17 ` [PATCH v7 01/42] KVM: guest_memfd: Introduce per-gmem attributes, use to guard user mappings Ackerley Tng via B4 Relay
2026-05-23  0:17   ` Ackerley Tng
2026-05-23  0:17 ` [PATCH v7 02/42] KVM: Rename KVM_GENERIC_MEMORY_ATTRIBUTES to KVM_VM_MEMORY_ATTRIBUTES Ackerley Tng via B4 Relay
2026-05-23  0:17   ` Ackerley Tng
2026-05-23  0:17 ` [PATCH v7 03/42] KVM: Enumerate support for PRIVATE memory iff kvm_arch_has_private_mem is defined Ackerley Tng via B4 Relay
2026-05-23  0:17   ` Ackerley Tng
2026-05-23  0:17 ` [PATCH v7 04/42] KVM: Stub in ability to disable per-VM memory attribute tracking Ackerley Tng via B4 Relay
2026-05-23  0:17   ` Ackerley Tng
2026-05-23  0:17 ` [PATCH v7 05/42] KVM: guest_memfd: Wire up kvm_get_memory_attributes() to per-gmem attributes Ackerley Tng via B4 Relay
2026-05-23  0:17   ` Ackerley Tng
2026-05-23  0:17 ` [PATCH v7 06/42] KVM: guest_memfd: Update kvm_gmem_populate() to use gmem attributes Ackerley Tng via B4 Relay
2026-05-23  0:17   ` Ackerley Tng
2026-05-23  0:59   ` sashiko-bot
2026-05-23  0:17 ` [PATCH v7 07/42] KVM: guest_memfd: Only prepare folios for private pages Ackerley Tng via B4 Relay
2026-05-23  0:17   ` Ackerley Tng
2026-05-23  0:52   ` sashiko-bot
2026-05-27 21:22     ` Ackerley Tng
2026-06-02 20:41     ` Ackerley Tng
2026-06-02  8:55   ` Suzuki K Poulose
2026-06-02  9:10     ` Suzuki K Poulose
2026-06-02 22:41       ` Ackerley Tng
2026-06-03  8:58         ` Suzuki K Poulose
2026-06-03 13:51           ` Michael Roth
2026-06-02 20:46     ` Ackerley Tng
2026-06-03 13:54       ` Michael Roth
2026-05-23  0:17 ` [PATCH v7 08/42] KVM: Move kvm_supported_mem_attributes() to kvm_host.h Ackerley Tng via B4 Relay
2026-05-23  0:17   ` Ackerley Tng
2026-05-23  0:17 ` [PATCH v7 09/42] KVM: guest_memfd: Add base support for KVM_SET_MEMORY_ATTRIBUTES2 Ackerley Tng via B4 Relay
2026-05-23  0:17   ` Ackerley Tng
2026-05-23  1:01   ` sashiko-bot [this message]
2026-05-27 21:27     ` Ackerley Tng
2026-06-01 23:14   ` Michael Roth
2026-05-23  0:17 ` [PATCH v7 10/42] KVM: guest_memfd: Ensure pages are not in use before conversion Ackerley Tng via B4 Relay
2026-05-23  0:17   ` Ackerley Tng
2026-05-23  0:55   ` sashiko-bot
2026-05-27 21:28     ` Ackerley Tng
2026-05-23  0:17 ` [PATCH v7 11/42] KVM: guest_memfd: Call arch invalidate hooks on conversion Ackerley Tng via B4 Relay
2026-05-23  0:17   ` Ackerley Tng
2026-05-23  0:17 ` [PATCH v7 12/42] KVM: guest_memfd: Return early if range already has requested attributes Ackerley Tng via B4 Relay
2026-05-23  0:17   ` Ackerley Tng
2026-05-23  0:17 ` [PATCH v7 13/42] KVM: guest_memfd: Advertise KVM_SET_MEMORY_ATTRIBUTES2 ioctl Ackerley Tng via B4 Relay
2026-05-23  0:17   ` Ackerley Tng
2026-05-23  0:17 ` [PATCH v7 14/42] KVM: guest_memfd: Handle lru_add fbatch refcounts during conversion safety check Ackerley Tng via B4 Relay
2026-05-23  0:17   ` Ackerley Tng
2026-05-23  0:17 ` [PATCH v7 15/42] KVM: guest_memfd: Use actual size for invalidation in kvm_gmem_release() Ackerley Tng via B4 Relay
2026-05-23  0:17   ` Ackerley Tng
2026-05-23  0:17 ` [PATCH v7 16/42] KVM: guest_memfd: Determine invalidation filter from memory attributes Ackerley Tng via B4 Relay
2026-05-23  0:17   ` Ackerley Tng
2026-05-23  1:06   ` sashiko-bot
2026-05-27 22:45     ` Ackerley Tng
2026-05-29 20:44       ` Sean Christopherson
2026-05-23  0:17 ` [PATCH v7 17/42] KVM: Move KVM_VM_MEMORY_ATTRIBUTES config definition to x86 Ackerley Tng via B4 Relay
2026-05-23  0:17   ` Ackerley Tng
2026-05-23  0:18 ` [PATCH v7 18/42] KVM: Let userspace disable per-VM mem attributes, enable per-gmem attributes Ackerley Tng via B4 Relay
2026-05-23  0:18   ` Ackerley Tng
2026-05-23  0:18 ` [PATCH v7 19/42] KVM: guest_memfd: Enable INIT_SHARED on guest_memfd for x86 Coco VMs Ackerley Tng via B4 Relay
2026-05-23  0:18   ` Ackerley Tng
2026-05-23  0:18 ` [PATCH v7 20/42] KVM: SEV: Make 'uaddr' parameter optional for KVM_SEV_SNP_LAUNCH_UPDATE Ackerley Tng via B4 Relay
2026-05-23  0:18   ` Ackerley Tng
2026-05-23  0:55   ` sashiko-bot
2026-05-27 23:31     ` Ackerley Tng
2026-06-04 15:29   ` Suzuki K Poulose
2026-06-04 19:05     ` Ackerley Tng
2026-06-05  8:54       ` Suzuki K Poulose
2026-06-04 20:11     ` Michael Roth
2026-06-05  9:06       ` Suzuki K Poulose
2026-05-23  0:18 ` [PATCH v7 21/42] KVM: TDX: Make source page optional for KVM_TDX_INIT_MEM_REGION Ackerley Tng via B4 Relay
2026-05-23  0:18   ` Ackerley Tng
2026-05-23  1:07   ` sashiko-bot
2026-06-03 21:22     ` Ackerley Tng
2026-06-03 23:45       ` Michael Roth
2026-06-03 23:55         ` Michael Roth
2026-06-05 18:40           ` Ackerley Tng
2026-05-23  0:18 ` [PATCH v7 22/42] KVM: selftests: Create gmem fd before "regular" fd when adding memslot Ackerley Tng via B4 Relay
2026-05-23  0:18   ` Ackerley Tng
2026-05-23  0:18 ` [PATCH v7 23/42] KVM: selftests: Rename guest_memfd{,_offset} to gmem_{fd,offset} Ackerley Tng via B4 Relay
2026-05-23  0:18   ` Ackerley Tng
2026-05-23  0:18 ` [PATCH v7 24/42] KVM: selftests: Add support for mmap() on guest_memfd in core library Ackerley Tng via B4 Relay
2026-05-23  0:18   ` Ackerley Tng
2026-05-23  0:18 ` [PATCH v7 25/42] KVM: selftests: Add selftests global for guest memory attributes capability Ackerley Tng via B4 Relay
2026-05-23  0:18   ` Ackerley Tng
2026-05-23  0:18 ` [PATCH v7 26/42] KVM: selftests: Add helpers for calling ioctls on guest_memfd Ackerley Tng via B4 Relay
2026-05-23  0:18   ` Ackerley Tng
2026-05-23  0:42   ` sashiko-bot
2026-06-03 16:33     ` Ackerley Tng
2026-05-23  0:18 ` [PATCH v7 27/42] KVM: selftests: Test basic single-page conversion flow Ackerley Tng via B4 Relay
2026-05-23  0:18   ` Ackerley Tng
2026-05-23  0:18 ` [PATCH v7 28/42] KVM: selftests: Test conversion flow when INIT_SHARED Ackerley Tng via B4 Relay
2026-05-23  0:18   ` Ackerley Tng
2026-05-23  0:18 ` [PATCH v7 29/42] KVM: selftests: Test conversion precision in guest_memfd Ackerley Tng via B4 Relay
2026-05-23  0:18   ` Ackerley Tng
2026-05-23  0:18 ` [PATCH v7 30/42] KVM: selftests: Test conversion before allocation Ackerley Tng via B4 Relay
2026-05-23  0:18   ` Ackerley Tng
2026-05-23  0:18 ` [PATCH v7 31/42] KVM: selftests: Convert with allocated folios in different layouts Ackerley Tng via B4 Relay
2026-05-23  0:18   ` Ackerley Tng
2026-05-23  0:18 ` [PATCH v7 32/42] KVM: selftests: Test that truncation does not change shared/private status Ackerley Tng via B4 Relay
2026-05-23  0:18   ` Ackerley Tng
2026-05-23  0:18 ` [PATCH v7 33/42] KVM: selftests: Test that shared/private status is consistent across processes Ackerley Tng via B4 Relay
2026-05-23  0:18   ` Ackerley Tng
2026-05-23  1:11   ` sashiko-bot
2026-05-23  0:18 ` [PATCH v7 34/42] KVM: selftests: Test conversion with elevated page refcount Ackerley Tng via B4 Relay
2026-05-23  0:18   ` Ackerley Tng
2026-06-02 21:26   ` Askar Safin
2026-05-23  0:18 ` [PATCH v7 35/42] KVM: selftests: Reset shared memory after hole-punching Ackerley Tng via B4 Relay
2026-05-23  0:18   ` Ackerley Tng
2026-05-23  0:18 ` [PATCH v7 36/42] KVM: selftests: Provide function to look up guest_memfd details from gpa Ackerley Tng via B4 Relay
2026-05-23  0:18   ` Ackerley Tng
2026-05-23  0:18 ` [PATCH v7 37/42] KVM: selftests: Provide common function to set memory attributes Ackerley Tng via B4 Relay
2026-05-23  0:18   ` Ackerley Tng
2026-05-23  1:35   ` sashiko-bot
2026-06-03 19:01     ` Ackerley Tng
2026-05-23  0:18 ` [PATCH v7 38/42] KVM: selftests: Check fd/flags provided to mmap() when setting up memslot Ackerley Tng via B4 Relay
2026-05-23  0:18   ` Ackerley Tng
2026-05-23  0:18 ` [PATCH v7 39/42] KVM: selftests: Make TEST_EXPECT_SIGBUS thread-safe Ackerley Tng via B4 Relay
2026-05-23  0:18   ` Ackerley Tng
2026-05-23  0:18 ` [PATCH v7 40/42] KVM: selftests: Update private_mem_conversions_test to mmap() guest_memfd Ackerley Tng via B4 Relay
2026-05-23  0:18   ` Ackerley Tng
2026-05-23  0:18 ` [PATCH v7 41/42] KVM: selftests: Add script to exercise private_mem_conversions_test Ackerley Tng via B4 Relay
2026-05-23  0:18   ` Ackerley Tng
2026-05-23  1:15   ` sashiko-bot
2026-05-23  0:18 ` [PATCH v7 42/42] KVM: selftests: Update private memory exits test to work with per-gmem attributes Ackerley Tng via B4 Relay
2026-05-23  0:18   ` Ackerley Tng
2026-06-03 21:27 ` [PATCH v7 00/42] guest_memfd: In-place conversion support Ackerley Tng
2026-06-04 20:20   ` Sean Christopherson
2026-06-04 21:14     ` Ackerley Tng
2026-06-05 18:27       ` Sean Christopherson
2026-06-05 13:41 ` [POC] KVM: selftests: Verify conversion works with TDX Ackerley Tng

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260523010158.085871F000E9@smtp.kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=devnull+ackerleytng.google.com@kernel.org \
    --cc=kvm@vger.kernel.org \
    --cc=sashiko-reviews@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.