From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 9009DC61DD6 for ; Wed, 2 Sep 2026 16:42:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Reply-To:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Type:Cc:To: From:Subject:Message-ID:References:Mime-Version:In-Reply-To:Date: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=OWxwiZu3iI1BKMOXY9Ac60kPARcqOSTNs6vsc+7jhyU=; b=ne5gnZflSEE0f8mK4HcBD4zH6U btTM73cRmXfNQI/JA1XmJVxJREkkE1Mc9he5IfICNaSlNEkhpf0YIyTVvdq/t7hwCcrcKykz8s1Jf N93qBLvW28T1iy595TzSQRWgD1Rqg2b+XQ9CTPVaxDly1zryZyL834IXHdVB77hHAZht7LcAZE+FS vmhQedYHPOGHnVrC3z/G7Rn+JlPncbM0URVzaktczlhNrm8IdFc4PFPv9rP2Epgctkmvmx8M+w5oZ TZF17w80dQHcEN+f/hJ5yK15oGWGY3HQgrnWo+C33VZOOpJ9+mWSmeS6whG6T8EidvwIZcoa9/E+K c3M3k4kg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1x1o2D-0000000FF6q-2XxB; Wed, 02 Sep 2026 16:42:01 +0000 Received: from mail-pf1-x448.google.com ([2607:f8b0:4864:20::448]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1x1o1t-0000000FEOH-3g3C for linux-arm-kernel@lists.infradead.org; Wed, 02 Sep 2026 16:41:44 +0000 Received: by mail-pf1-x448.google.com with SMTP id d2e1a72fcca58-84a251c2e3eso47302b3a.1 for ; Wed, 02 Sep 2026 09:41:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1788367299; x=1788972099; darn=lists.infradead.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=OWxwiZu3iI1BKMOXY9Ac60kPARcqOSTNs6vsc+7jhyU=; b=kIDk7UYo3Q4F4pfzkStLfrVorKAMUMqOirYHpIF0KxfUlHWP/zC8NWWhJYZTqP7yhB vn0sxqP7vQWa1E07inXQZXtyjIlaWjOLw4q0ZrdDioIMNrLgFB3kCJ0sVS2M5QB2eQMJ 0a/XeFGe5G+VE/0lGgkuxSXb9eDbaXAo/o5g9TBFbxBDeve8AakgWFcxiblNYigvMJPf ffoVhoN1vDaj2gfSQ+T1GB3FjfDYSCPZi7vNQLRbI87Uc4tGlUXB8YKDo1bmWk+PJxR4 SLIEEmfKY00h9Nj8Bodwl2uYYU5rwAw/92K5w6mNI59mTIEXmXZ0POIDLXHdsbcgMA8j oNaA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788367299; x=1788972099; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=OWxwiZu3iI1BKMOXY9Ac60kPARcqOSTNs6vsc+7jhyU=; b=fnoEn6JGVKtGkGnF7zyQsF+HVrMUkD3lQxnxxhg5wk8exw4cKgr5flJ8b7IP2D5UMv aadj6VpibC5QqtKb4AKS1YBbg2+/+FzMLex7lqWRyYWtnEbd50Fw2Z4VL6frgKsBkLRN 6svTtYj25m9pq/D0go23N63Fe4WTlx6rfr0L64bLOZL9ydmhBt6gNrnxsu+sOx4ouyn9 pww6lk8DJ/dNW/3PvtbIvLaT11UiemSy/rt57y1WWK+zbiY5DFmmS50/dBWmO4eMaX0C j7eTh7k5azeP0Zq6IOQ8fWZ0+orqJQmNG4CQI1nPtJStpEcmPkYJLpRueOO1Cr7pGZQE mV/g== X-Forwarded-Encrypted: i=1; AKwUvBynowbzTe6vOppYuLnpDbMrpcvHMFOdNI5zDYQzFX+QE7K1i69bJnDXlsoq3ooy3Gao7Iy5j2MYj9XnL3sr0Aux@lists.infradead.org X-Gm-Message-State: AFuF++nDupeQzujj0fnIsTQDENVz+85IkH+MQWpgdRie7qZcFddwogXo ZXwCoOsLd66aOhoK8dPre+NCTWwhjTLHvsOU/EIfYfbHWPXdgIWfVUennJTuoTdNrFXLVikI7tI YsyhtKA== X-Received: from pfbbm14.prod.google.com ([2002:a05:6a00:320e:b0:84c:2e88:693d]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:3d55:b0:84e:cd14:aeba with SMTP id d2e1a72fcca58-85ffbe960f2mr374778b3a.6.1788367298091; Wed, 02 Sep 2026 09:41:38 -0700 (PDT) Date: Wed, 2 Sep 2026 09:41:14 -0700 In-Reply-To: <20260902164123.2546762-1-seanjc@google.com> Mime-Version: 1.0 References: <20260902164123.2546762-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.966.g6673acef38-goog Message-ID: <20260902164123.2546762-12-seanjc@google.com> Subject: [PATCH v2 11/20] KVM: selftests: Initialize vm->memslots[] with invalid memslots during creation From: Sean Christopherson To: Marc Zyngier , Oliver Upton , Sean Christopherson , Paolo Bonzini , Tianrui Zhao , Bibo Mao , Huacai Chen , Anup Patel , Paul Walmsley , Palmer Dabbelt , Albert Ou , Christian Borntraeger , Janosch Frank , Claudio Imbrenda Cc: Fuad Tabba , Joey Gouly , Steffen Eiden , Suzuki K Poulose , Zenghui Yu , Atish Patra , Alexandre Ghiti , David Hildenbrand , 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, Itaru Kitayama , Nicholas Piggin , Ritesh Harjani Content-Type: text/plain; charset="UTF-8" X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.9.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20260902_094142_093970_3B5ED386 X-CRM114-Status: GOOD ( 15.11 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Sean Christopherson Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org 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. Tested-by: Itaru Kitayama Signed-off-by: Sean Christopherson --- 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 c56f342b16fd..304ef6af3268 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.966.g6673acef38-goog