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 26/42] KVM: selftests: Add helpers for calling ioctls on guest_memfd
Date: Sat, 23 May 2026 00:42:22 +0000	[thread overview]
Message-ID: <20260523004223.446AF1F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260522-gmem-inplace-conversion-v7-26-2f0fae496530@google.com>

Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [Medium] The size parameter in `vm_set_memory_attributes` and the new `gmem` helpers was defined as `size_t` rather than `u64`, risking silent truncation of guest memory sizes on 32-bit platforms.
- [Medium] `gmem_set_memory_attributes` invokes `kvm_check_cap` directly, which incurs heavy system call overhead on every invocation and incorrectly validates the capability attributes.
--

commit 89dd80303d47a776c6d340afaf265966a073bd73
Author: Sean Christopherson <seanjc@google.com>

KVM: selftests: Add helpers for calling ioctls on guest_memfd

This commit adds helper functions to kvm_util.h for executing ioctls on a
guest_memfd. It introduces standard macros like gmem_ioctl and functions for
setting memory attributes. It also refactors supported attribute checks into
a new TEST_ASSERT_SUPPORTED_ATTRIBUTES macro.

> diff --git a/tools/testing/selftests/kvm/include/kvm_util.h b/tools/testing/selftests/kvm/include/kvm_util.h
> --- a/tools/testing/selftests/kvm/include/kvm_util.h
> +++ b/tools/testing/selftests/kvm/include/kvm_util.h
[ ... ]
>  static inline void vm_set_memory_attributes(struct kvm_vm *vm, gpa_t gpa,
> -					    u64 size, u64 attributes)
> +					    size_t size, u64 attributes)

[Severity: Medium]
The KVM UAPI structures like kvm_memory_attributes use __u64 for the size
field because guest physical memory regions can exceed 4GB. Since wrappers
like vm_mem_set_private() accept u64 sizes, does changing this parameter to
size_t risk silent truncation of guest memory sizes on 32-bit platforms?

>  {
>  	struct kvm_memory_attributes attr = {
>  		.attributes = attributes,
[ ... ]
> +static inline int __gmem_set_memory_attributes(int fd, u64 offset,
> +					       size_t size, u64 attributes,

[Severity: Medium]
Will this size_t parameter similarly truncate memory sizes greater than
4GB on 32-bit platforms, causing the ioctl to operate on incomplete memory
ranges?

> +					       u64 *error_offset)
> +{
[ ... ]
> +static inline void gmem_set_memory_attributes(int fd, u64 offset,
> +					      size_t size, u64 attributes)
> +{
> +	struct kvm_memory_attributes2 attr = {
> +		.attributes = attributes,
> +		.offset = offset,
> +		.size = size,
> +		.flags = 0,
> +	};
> +
> +	TEST_ASSERT_SUPPORTED_ATTRIBUTES(attributes);
> +
> +	__TEST_REQUIRE(kvm_check_cap(KVM_CAP_GUEST_MEMFD_MEMORY_ATTRIBUTES) > 0,
> +		       "No valid attributes for guest_memfd ioctl!");

[Severity: Medium]
The kvm_check_cap() function performs open, an ioctl, and close on /dev/kvm
every time it is called. Since gmem_set_memory_attributes() might be called
repeatedly in loops over multiple memory regions, will this incur significant
syscall overhead and degrade test performance?

Additionally, this merely verifies that the capability bitmask is non-zero.
Should this perform a bitwise validation against the requested attributes to
ensure the specific attributes requested are supported, rather than passing
the check and later crashing the test with -EINVAL from the ioctl?

> +
> +	gmem_ioctl(fd, KVM_SET_MEMORY_ATTRIBUTES2, &attr);
> +}

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

  reply	other threads:[~2026-05-23  0:42 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
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 [this message]
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=20260523004223.446AF1F000E9@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.