From: Gautam Menghani <gautam@linux.ibm.com>
To: Sean Christopherson <seanjc@google.com>
Cc: Marc Zyngier <maz@kernel.org>, Oliver Upton <oupton@kernel.org>,
Paolo Bonzini <pbonzini@redhat.com>,
Tianrui Zhao <zhaotianrui@loongson.cn>,
Bibo Mao <maobibo@loongson.cn>,
Huacai Chen <chenhuacai@kernel.org>,
Anup Patel <anup@brainfault.org>, Paul Walmsley <pjw@kernel.org>,
Palmer Dabbelt <palmer@dabbelt.com>,
Albert Ou <aou@eecs.berkeley.edu>,
Christian Borntraeger <borntraeger@linux.ibm.com>,
Janosch Frank <frankja@linux.ibm.com>,
Claudio Imbrenda <imbrenda@linux.ibm.com>,
Fuad Tabba <fuad.tabba@linux.dev>,
Joey Gouly <joey.gouly@arm.com>,
Steffen Eiden <seiden@linux.ibm.com>,
Suzuki K Poulose <suzuki.poulose@arm.com>,
Zenghui Yu <yuzenghui@huawei.com>,
Atish Patra <atish.patra@linux.dev>,
Alexandre Ghiti <alex@ghiti.fr>,
David Hildenbrand <david@kernel.org>,
linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev,
kvm@vger.kernel.org, loongarch@lists.linux.dev,
kvm-riscv@lists.infradead.org, linux-riscv@lists.infradead.org,
linux-kernel@vger.kernel.org, Nicholas Piggin <npiggin@gmail.com>,
Ritesh Harjani <ritesh.list@gmail.com>
Subject: Re: [PATCH 11/20] KVM: selftests: Initialize vm->memslots[] with invalid memslots during creation
Date: Wed, 2 Sep 2026 23:22:55 +0530 [thread overview]
Message-ID: <aphidyVJw_j5b8pL@Gautams-MacBook-Pro.local> (raw)
In-Reply-To: <20260826230511.972824-12-seanjc@google.com>
On Wed, Aug 26, 2026 at 04:05:02PM -0700, Sean Christopherson wrote:
> Initialize vm->memslots[] with an invalid memslots value during very
> initial VM creation so that failure to configure the core memory regions
> generates an immediate assert instead of potential weirdness, e.g. if slot0
> is coincidentally valid. This will also allow hardening the region APIs to
> guard overriding a region's memslot multiple times.
>
> Signed-off-by: Sean Christopherson <seanjc@google.com>
> ---
> tools/testing/selftests/kvm/include/kvm_util.h | 2 ++
> tools/testing/selftests/kvm/lib/kvm_util.c | 5 +++++
> tools/testing/selftests/kvm/lib/x86/processor.c | 5 ++++-
> 3 files changed, 11 insertions(+), 1 deletion(-)
>
> diff --git a/tools/testing/selftests/kvm/include/kvm_util.h b/tools/testing/selftests/kvm/include/kvm_util.h
> index 21354434de0a..70e77992dd2f 100644
> --- a/tools/testing/selftests/kvm/include/kvm_util.h
> +++ b/tools/testing/selftests/kvm/include/kvm_util.h
> @@ -33,6 +33,8 @@
>
> #define NSEC_PER_SEC 1000000000L
>
> +#define KVM_INVALID_MEMSLOT UINT_MAX
> +
> struct userspace_mem_region {
> struct kvm_userspace_memory_region2 region;
> struct sparsebit *unused_phy_pages;
> diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/selftests/kvm/lib/kvm_util.c
> index ce0d8fba4624..56df5b1d9c79 100644
> --- a/tools/testing/selftests/kvm/lib/kvm_util.c
> +++ b/tools/testing/selftests/kvm/lib/kvm_util.c
> @@ -288,6 +288,7 @@ __weak void vm_populate_gva_bitmap(struct kvm_vm *vm)
> struct kvm_vm *____vm_create(struct vm_shape shape)
> {
> struct kvm_vm *vm;
> + int i;
>
> vm = calloc(1, sizeof(*vm));
> TEST_ASSERT(vm != NULL, "Insufficient Memory");
> @@ -296,6 +297,8 @@ struct kvm_vm *____vm_create(struct vm_shape shape)
> vm->regions.gpa_tree = RB_ROOT;
> vm->regions.hva_tree = RB_ROOT;
> hash_init(vm->regions.slot_hash);
> + for (i = 0; i < NR_MEM_REGIONS; i++)
> + vm->memslots[i] = KVM_INVALID_MEMSLOT;
>
> vm->mode = shape.mode;
> vm->type = shape.type;
> @@ -1190,6 +1193,8 @@ memslot2region(struct kvm_vm *vm, u32 memslot)
> {
> struct userspace_mem_region *region;
>
> + TEST_ASSERT(memslot != KVM_INVALID_MEMSLOT, "vm->memslots[] unpopulated?");
> +
> hash_for_each_possible(vm->regions.slot_hash, region, slot_node,
> memslot)
> if (region->region.slot == memslot)
> diff --git a/tools/testing/selftests/kvm/lib/x86/processor.c b/tools/testing/selftests/kvm/lib/x86/processor.c
> index d31fa81ea075..ea5fa59888af 100644
> --- a/tools/testing/selftests/kvm/lib/x86/processor.c
> +++ b/tools/testing/selftests/kvm/lib/x86/processor.c
> @@ -529,7 +529,10 @@ void tdp_identity_map_default_memslots(struct kvm_vm *vm)
>
> /* Only memslot 0 is mapped here, ensure it's the only one being used */
> for (s = 0; s < NR_MEM_REGIONS; s++)
> - TEST_ASSERT_EQ(vm->memslots[s], 0);
> + TEST_ASSERT(!vm->memslots[s] ||
> + vm->memslots[s] == KVM_INVALID_MEMSLOT,
> + "Unhandled memslot '%u' for type '%u'",
> + vm->memslots[s], s);
>
> i = (region->region.guest_phys_addr >> vm->page_shift) - 1;
> last = i + (region->region.memory_size >> vm->page_shift);
> --
> 2.55.0.887.g758fc8c411-goog
>
Acked-by: Gautam Menghani <gautam@linux.ibm.com>
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
next prev parent reply other threads:[~2026-09-02 17:53 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-26 23:04 [PATCH 00/20] KVM: selftests: PPC pre-enabling Sean Christopherson
2026-08-26 23:04 ` [PATCH 01/20] KVM: selftests: Use MEM_REGION_PT memslot instead of '0' for s390 regions/segments Sean Christopherson
2026-08-26 23:04 ` [PATCH 02/20] KVM: selftests: Bump the minimum GPA for page tables to 0x200000 Sean Christopherson
2026-08-28 17:58 ` Claudio Imbrenda
2026-08-28 18:07 ` Sean Christopherson
2026-08-31 11:34 ` Claudio Imbrenda
2026-08-26 23:04 ` [PATCH 03/20] KVM: selftests: Use vm_alloc_page_table() to allocate LoongArch page tables Sean Christopherson
2026-08-27 6:43 ` Bibo Mao
2026-08-26 23:04 ` [PATCH 04/20] KVM: selftests: Rename "num" param to "nr_pages" for physical page allocators Sean Christopherson
2026-08-26 23:04 ` [PATCH 05/20] KVM: selftests: Use goto instead of do-while to retry finding unused physical pages Sean Christopherson
2026-09-02 17:50 ` Gautam Menghani
2026-08-26 23:04 ` [PATCH 06/20] KVM: selftests: Extend page allocator to support naturally aligned allocations Sean Christopherson
2026-08-26 23:04 ` [PATCH 07/20] KVM: selftests: Make the single-page allocator APIs static inline Sean Christopherson
2026-08-26 23:04 ` [PATCH 08/20] KVM: selftests: Use the innermost page allocator API in the memslot perf test Sean Christopherson
2026-08-26 23:05 ` [PATCH 09/20] KVM: selftests: Use the innermost page allocator API in s390's IRQ routing test Sean Christopherson
2026-08-26 23:05 ` [PATCH 10/20] KVM: selftests: Add a wrapper API to allocate multiple page table pages Sean Christopherson
2026-08-27 5:27 ` Itaru Kitayama
2026-09-02 17:51 ` Gautam Menghani
2026-08-26 23:05 ` [PATCH 11/20] KVM: selftests: Initialize vm->memslots[] with invalid memslots during creation Sean Christopherson
2026-09-02 17:52 ` Gautam Menghani [this message]
2026-08-26 23:05 ` [PATCH 12/20] KVM: selftests: Add APIs to override memory region types with custom memslots Sean Christopherson
2026-08-26 23:05 ` [PATCH 13/20] KVM: selftests: Add TEST_EXTRA memory region type for "special" memslots Sean Christopherson
2026-08-27 4:37 ` Itaru Kitayama
2026-08-26 23:05 ` [PATCH 14/20] KVM: selftests: Use TEST_EXTRA region in arm64's vGIC LPI stress test Sean Christopherson
2026-08-26 23:05 ` [PATCH 15/20] KVM: selftests: Use TEST_EXTRA region in x86's smaller MAXPHYADDR test Sean Christopherson
2026-08-26 23:05 ` [PATCH 16/20] KVM: selftests: Use TEST_EXTRA region in set memory region test Sean Christopherson
2026-08-26 23:05 ` [PATCH 17/20] KVM: selftests: Take the memory region type, not memslot, in page allocators Sean Christopherson
2026-08-26 23:05 ` [PATCH 18/20] KVM: selftests: Use TEST_ASSERT(), not assert(), in vm_get_mem_region() Sean Christopherson
2026-08-26 23:05 ` [PATCH 19/20] KVM: selftests: Automatically pick min_gpa for allocations based on region type Sean Christopherson
2026-08-26 23:05 ` [PATCH 20/20] KVM: selftests: Add arch hook to force page tables to be naturally aligned Sean Christopherson
2026-08-27 8:07 ` [PATCH 00/20] KVM: selftests: PPC pre-enabling Itaru Kitayama
2026-09-02 17:47 ` Gautam Menghani
2026-09-02 17:53 ` Sean Christopherson
2026-09-02 17:59 ` Ritesh Harjani
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=aphidyVJw_j5b8pL@Gautams-MacBook-Pro.local \
--to=gautam@linux.ibm.com \
--cc=alex@ghiti.fr \
--cc=anup@brainfault.org \
--cc=aou@eecs.berkeley.edu \
--cc=atish.patra@linux.dev \
--cc=borntraeger@linux.ibm.com \
--cc=chenhuacai@kernel.org \
--cc=david@kernel.org \
--cc=frankja@linux.ibm.com \
--cc=fuad.tabba@linux.dev \
--cc=imbrenda@linux.ibm.com \
--cc=joey.gouly@arm.com \
--cc=kvm-riscv@lists.infradead.org \
--cc=kvm@vger.kernel.org \
--cc=kvmarm@lists.linux.dev \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
--cc=loongarch@lists.linux.dev \
--cc=maobibo@loongson.cn \
--cc=maz@kernel.org \
--cc=npiggin@gmail.com \
--cc=oupton@kernel.org \
--cc=palmer@dabbelt.com \
--cc=pbonzini@redhat.com \
--cc=pjw@kernel.org \
--cc=ritesh.list@gmail.com \
--cc=seanjc@google.com \
--cc=seiden@linux.ibm.com \
--cc=suzuki.poulose@arm.com \
--cc=yuzenghui@huawei.com \
--cc=zhaotianrui@loongson.cn \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox