From nobody Fri Oct 2 12:20:43 2026 Received: from mail-wr1-f49.google.com (mail-wr1-f49.google.com [209.85.221.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C0FA8437849 for ; Fri, 31 Jul 2026 15:08:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785510544; cv=none; b=U0VLEaJaivs5GlxU1S7QewOoLsbG5rvYSimYHiGOL76uCHHwFYm8grOxQR5NoJ32+SIBOwO6JNmhXNWFZx6LTRffblHxuBAfmb9y/X9PLzKBU5Y7Y4xycRbjDlpDVovFecSVSf6z+68UB7yXmNZfd/xgupQU3jcm8gEqrRXTcGQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785510544; c=relaxed/simple; bh=PjftAuv2yr6Vjpq2LJcpoHcflcYedBC1wROWFSqGAD8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=gWEox1X0YBo77JweMxuilObHtEbw5UtPQOJzjohi8q4XoPbKtjBWehX/FZ99PUJSwtXmSoms3yC5f3VHLs/ZGQiTCcFFHfwuGfxcZq5FEFB/Qhi3DjZW3rWSGndMjyaRzeCo0CBinhhVp3ts+K1QCicff2jGNmc6nkixan+QDSY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=bec7yMKm; arc=none smtp.client-ip=209.85.221.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="bec7yMKm" Received: by mail-wr1-f49.google.com with SMTP id ffacd0b85a97d-4728c12ba97so672552f8f.0 for ; Fri, 31 Jul 2026 08:08:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1785510533; x=1786115333; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=08UPjSfOMysoSxYNb3E4BPj3tXXgH1/oLdaZMyb7X1M=; b=bec7yMKmoOZQrXSDvg/6fQwaPMw6x841jOAKcdFlX2ykP2QgkhX0YkcztjwwF1PPs8 /bVyomgLmTRM1kmlXGtqWrxMd98VLFPhqaunHuRH4DkfPZS6sX2ViFxZMSHA9Zdnx5fz IdVc0uYPjlL0vaJ8kz1pnr2Tiz98JYEfTBNrw= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785510533; x=1786115333; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=08UPjSfOMysoSxYNb3E4BPj3tXXgH1/oLdaZMyb7X1M=; b=WmB3vjBwPyiAh3O8ZHP1xA7bSwOlX82HhEZyeMGpaaHVhHqYMcPlhpgAPh9MqquTKu W1oMsOJ2B1jBFlESCTQtuKJAe8PImtOH4ykg0H2mbOEMBuDKV3HYl+IQYyH7bogKfGUP RQit+SmXTHjXcWjXXavQ4minUofhwJj5CV9VbaPgyZ7teZk4Msm+r0s1EWqjAUKKfUcc 9dAc6Pr80cE5GNWD5e6V2mRhqscpJKBEEftm6Fzx7uI3QDiaYoodL4ypUYQcHunJu1Si nwjT3Dl2nbPv/NUMUkzDHuYxVV6Rc+wZBNrWwU81jOHZF+hNcYCIyx6/JyUCh0FX3eh8 dovg== X-Forwarded-Encrypted: i=1; AHgh+RpZb0dMPxR6AL1uMUrO5/mgzswVMrCSyRy3hYRQ9M8LOBMqooL1OqY4i7LLHPDag8DB5E5Bba01ts7SM0w=@vger.kernel.org X-Gm-Message-State: AOJu0Yy9a4wTj13W1X2ipUzwqL7zoO39p60sjop2nXYOJEf4OlcYRRt9 DOU2GY17pMZiDeLvUJ7AKm53nwuy+pAnH2m7Ej6GHn2Q+5WXE9xgzr8kxOF3EeZtoA== X-Gm-Gg: AR+sD13FhSQkYcVUZvLrnnYjgegxddRTQtcrMfYnS6XmHUk7mTFMDCgKCIXnuh/508N JAKqOzsmolGkaXh45hJ+rh2zX8ijCNz4Pn5Mmv8tKBr/CF0ELFpr/jYa1Y7x36kFHxTc9zziW3I HaM8WKrzEuKmONDr6A00eVUKar20TFafozH2Iz0luNy2vPGkc6PQAqn5nRr5GvylfDOAkuyuGcm FeF8tpdsnbw9U6QBY+xQ5Cv2HyaXZZQW1WBx6qCdH0o0ldEcq9QSpoiCqEWa/YTwvMqiVm5/uAO PtaEWjhGBhPv6m9NQMtOgivBOBgPuKM3yuPO+/nd1fDVNgvfyZwgEI0d+TmliaYgSDfXBBuctik Ze0HVkg+PjEc5s1kCbcjTw255aw+uJZFLhQb8HRAPnrk8dzE/NIHUlGWUz5EDNqdCCid+dVBhHp 8t5oLG6v+h773wH65VTroIA+IpMadC5P+WwXfD9nHBLR6w5AAwHdrfUU8UVKe0XAzEFozbGvbHw PDHOAqoqjmLdXPBCXExFanm+B/zoEXC1LGqO4dkjhqdWj7Pw2rnriA= X-Received: by 2002:a05:6000:29d7:b0:475:3a97:8e3c with SMTP id ffacd0b85a97d-47fd72b08demr21668f8f.18.1785510533265; Fri, 31 Jul 2026 08:08:53 -0700 (PDT) Received: from dmaluka.c.googlers.com.com (110.121.148.146.bc.googleusercontent.com. [146.148.121.110]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-47fd45a0c8bsm5647974f8f.34.2026.07.31.08.08.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 31 Jul 2026 08:08:52 -0700 (PDT) From: Dmytro Maluka To: Sean Christopherson Cc: Paolo Bonzini , Dave Hansen , Mathias Krause , kvm@vger.kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, Vineeth Pillai , Chuanxiao Dong , Aashish Sharma , Grzegorz Jaszczyk , Dmytro Maluka Subject: [PATCH v2 1/4] KVM: selftests: Fix treating KVM_CAP_MAX_VCPU_ID as inclusive Date: Fri, 31 Jul 2026 15:08:42 +0000 Message-ID: <20260731150846.1728164-2-dmaluka@chromium.org> X-Mailer: git-send-email 2.55.0.508.g3f0d502094-goog In-Reply-To: <20260731150846.1728164-1-dmaluka@chromium.org> References: <20260731150846.1728164-1-dmaluka@chromium.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" KVM_CAP_MAX_VCPU_ID is (confusingly) exclusive, i.e. the maximum allowed vcpu_id value is KVM_CAP_MAX_VCPU_ID minus one. So in particular, setting bsp_vcpu_id to the value _equal_ to KVM_CAP_MAX_VCPU_ID is invalid, it must be strictly below KVM_CAP_MAX_VCPU_ID. Whereas the corresponding test in x86/max_vcpuid_cap_test mistakenly assumes that it is valid and expects the ioctl to return success. Fix this, by changing the "semantics" of the selftest's internal MAX_VCPU_ID constant: let it represent the actual maximum vcpu_id, i.e. the KVM_CAP_MAX_VCPU_ID value minus one. Fixes: 4b451a57809c ("KVM: selftests: Test max vCPU IDs corner cases") Signed-off-by: Dmytro Maluka --- tools/testing/selftests/kvm/x86/max_vcpuid_cap_test.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/tools/testing/selftests/kvm/x86/max_vcpuid_cap_test.c b/tools/= testing/selftests/kvm/x86/max_vcpuid_cap_test.c index 7e2bfb3c3f3b..47ee14967873 100644 --- a/tools/testing/selftests/kvm/x86/max_vcpuid_cap_test.c +++ b/tools/testing/selftests/kvm/x86/max_vcpuid_cap_test.c @@ -36,16 +36,19 @@ int main(int argc, char *argv[]) "Setting KVM_CAP_MAX_VCPU_ID below BOOT_CPU_ID should fail"); } =20 - /* Set KVM_CAP_MAX_VCPU_ID */ - vm_enable_cap(vm, KVM_CAP_MAX_VCPU_ID, MAX_VCPU_ID); + /* + * Set KVM_CAP_MAX_VCPU_ID. Note: KVM_CAP_MAX_VCPU_ID is a misnomer, + * it actually represents maximum vcpu_id plus one. + */ + vm_enable_cap(vm, KVM_CAP_MAX_VCPU_ID, MAX_VCPU_ID + 1); =20 /* Try to set KVM_CAP_MAX_VCPU_ID again */ - ret =3D __vm_enable_cap(vm, KVM_CAP_MAX_VCPU_ID, MAX_VCPU_ID + 1); + ret =3D __vm_enable_cap(vm, KVM_CAP_MAX_VCPU_ID, MAX_VCPU_ID + 2); TEST_ASSERT(ret < 0, "Setting KVM_CAP_MAX_VCPU_ID multiple times should fail"); =20 /* Create vCPU with id beyond KVM_CAP_MAX_VCPU_ID cap */ - ret =3D __vm_ioctl(vm, KVM_CREATE_VCPU, (void *)MAX_VCPU_ID); + ret =3D __vm_ioctl(vm, KVM_CREATE_VCPU, (void *)(MAX_VCPU_ID + 1)); TEST_ASSERT(ret < 0, "Creating vCPU with ID > MAX_VCPU_ID should fail"); =20 /* Create vCPU with bits 63:32 !=3D 0, but an otherwise valid id */ --=20 2.55.0.508.g3f0d502094-goog From nobody Fri Oct 2 12:20:43 2026 Received: from mail-ej1-f46.google.com (mail-ej1-f46.google.com [209.85.218.46]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 86A4C3F7865 for ; Fri, 31 Jul 2026 15:08:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785510544; cv=none; b=ecOKjpbgwpD02QLXA6vf+QBOR5RfwFATuOJwVl3vrO7MSBfjx2PT/Wcs1mo61208+oM+Om8PdHSRKx4cevXhMn5bv65GKtj1Phei4PuzyaitZJBaAWfODP2vQ0zuFtl63iLtTOJKiSOix/GMzRddIeOs/IubXuXD2d0merSa6to= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785510544; c=relaxed/simple; bh=AIVWrh6CF4CKx4RF7vzN6YiuXpAZvS5KqSwfzePjOCA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=CNwKUyRF1/nhU2ahxJhw6OUb8Qlusu8BWCVjz59bHqqqk/tEuhJ0uOqgd122ZyfeNiCy8SbzGYxp7Yf0kteWw2H4HIuhgBwkcenGWBYTvjbzeBGlqRf7fsZMToZVO43Aa5mcBiEbDw4M/H0JSFf7E/C5xaSHriU8RjWx8V0sii0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=JkGWWF5g; arc=none smtp.client-ip=209.85.218.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="JkGWWF5g" Received: by mail-ej1-f46.google.com with SMTP id a640c23a62f3a-c1c26d7e951so161972266b.0 for ; Fri, 31 Jul 2026 08:08:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1785510534; x=1786115334; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=gOaXPDNzFmfCcFZASeKm4HD2Emk8ASo1ynV4rSmHLg0=; b=JkGWWF5gOjxkMrtpUQnC0kHCKCA3ttjqTCMdQPIQE2A5UYwLq1eZL4gKLP0DQkuRt1 n0DZRcuOr9wrD1JRrLw8AAIUsjdiLUdraGfE14xZ/yooQKHdvOBT4aDlBOe41XykaCSh 9csXID9vksGdyUNwsRh43D2hL2GY3ojFIfix8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785510534; x=1786115334; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=gOaXPDNzFmfCcFZASeKm4HD2Emk8ASo1ynV4rSmHLg0=; b=UxaN6okMfsfXQGtICft1Llpa3yip17HMaFfTbQB3bDA5rp9AAQrDFe/AMDzydXTXQt EeHSY3LyIwivvT9bq3s1mkIP8vH/XMVHl1GjizNH1PmK8Hi02b5BZoIiazbUY0o5A4Ka O99kTCQEOX0cyZGZg73XCityFXJyns+O095ciG4d5wyD+OymtR1VdIBuNOP8soRE57ZI YsKANgfbMxaBndZ9KM9htKZUsO+TpiWTeppn4f7H7bAnzxL6g0mM46DiBuEiJnBqRC9G bpdlCe2HpJVmA/dQpPYjLy9iWkzLZ3ObfEjwLWGRtGoSJxMaPLOyGRDAZFGq7i2zDibH JIeg== X-Forwarded-Encrypted: i=1; AHgh+RoO5XhenFSR/43tXRm7BwYjotpAF9oKsu83BYbmJ5y+vn2SIklAhungKcSQH1ZKafs/th94lBK9SyT0aYc=@vger.kernel.org X-Gm-Message-State: AOJu0YwfDkqu0hriLQaMHS/0fAL2IA47tCBE8n9CnR7GhG9x4Nz+62N0 B54Dn2n8hOyXaewv06MC7tndD196fzwQbJXhU3b6NkNDvD3ZHooM+U4I8GwGDkPC6e2LxQ/IZ4S cqb2d7g== X-Gm-Gg: AR+sD11aQ3TjZZ4RnKjy0uc4+QsD2lZ2fB+EjqCSezVNHJeo/toDRtPVQ/UHqhev2P6 F+2G0D3PvTTIKshTZMhWPc6YrH1BNxGxciKtdG8QqqGyGZfpWvY2ILtGvNCCao246uhzC2FdhT5 ArQmIspzRyvhpzmBgSJP3NbO9ywXvDMnE2GWbR0CJjVniXSu0co/56vhCUkd9olDdCNw4shG4Cw Fi+57eQg7IpTctKl4qIB3JXX5zs8FgnMPAtWy231HLmVCT4thr/TfVVqzsq4CYIlfWYQkW8b8ui 9ZzqvIddQ38vC5iUdmMJzAjd1mUm+PlNaW05q5ecn4UggTXJ4GsrVC+o5Hea5baMVPv7HX0X5OB nYbP6tKzx8LAs+jhnyQDPbPyMkr4KzRnMYHppROeZdomWWy0HEfS8zoF/DDBMPY4kXTsSBH1bw1 WXKVNN1a753fpabePxpD2Gt4GX7zh5iQSs19B7U/Z9/UXL2VwmMaj0ZQ3ZlMnvOl1TINcCApoIk 8rbFK8Jo4x1CYdDyY045qf6UBNm/yfAaUPoY/VwT8Ej4I1efxSyVPI= X-Received: by 2002:a05:6938:a08a:10b0:c1f:e172:cf16 with SMTP id a640c23a62f3a-c1fe172d0aamr53127366b.46.1785510534451; Fri, 31 Jul 2026 08:08:54 -0700 (PDT) Received: from dmaluka.c.googlers.com.com (110.121.148.146.bc.googleusercontent.com. [146.148.121.110]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-47fd45a0c8bsm5647974f8f.34.2026.07.31.08.08.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 31 Jul 2026 08:08:54 -0700 (PDT) From: Dmytro Maluka To: Sean Christopherson Cc: Paolo Bonzini , Dave Hansen , Mathias Krause , kvm@vger.kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, Vineeth Pillai , Chuanxiao Dong , Aashish Sharma , Grzegorz Jaszczyk , Dmytro Maluka Subject: [PATCH v2 2/4] KVM: x86: Fix off-by-one in max_vcpu_ids bounds checks Date: Fri, 31 Jul 2026 15:08:43 +0000 Message-ID: <20260731150846.1728164-3-dmaluka@chromium.org> X-Mailer: git-send-email 2.55.0.508.g3f0d502094-goog In-Reply-To: <20260731150846.1728164-1-dmaluka@chromium.org> References: <20260731150846.1728164-1-dmaluka@chromium.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" max_vcpu_ids and KVM_CAP_MAX_VCPU_ID are exclusive, i.e. the maximum allowed vcpu_id value is max_vcpu_ids minus one, not max_vcpu_ids. Fix sanity checks for KVM_SET_BOOT_CPU_ID and KVM_CAP_MAX_VCPU_ID to correctly fail when bsp_vcpu_id is set to max_vcpu_ids, not to a value below max_vcpu_ids. Fixes: 7c305d5118e6 ("KVM: x86: Limit check IDs for KVM_SET_BOOT_CPU_ID") Fixes: d29bf2ca1404 ("KVM: x86: Prevent excluding the BSP on setting max_vc= pu_ids") Signed-off-by: Dmytro Maluka --- arch/x86/kvm/x86.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 47cb9eba113b..b576b46869d2 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -6908,7 +6908,7 @@ int kvm_vm_ioctl_enable_cap(struct kvm *kvm, break; =20 mutex_lock(&kvm->lock); - if (kvm->arch.bsp_vcpu_id > cap->args[0]) { + if (kvm->arch.bsp_vcpu_id >=3D cap->args[0]) { ; } else if (kvm->arch.max_vcpu_ids =3D=3D cap->args[0]) { r =3D 0; @@ -7478,8 +7478,8 @@ int kvm_arch_vm_ioctl(struct file *filp, unsigned int= ioctl, unsigned long arg) mutex_lock(&kvm->lock); if (kvm->created_vcpus) r =3D -EBUSY; - else if (arg > KVM_MAX_VCPU_IDS || - (kvm->arch.max_vcpu_ids && arg > kvm->arch.max_vcpu_ids)) + else if (arg >=3D KVM_MAX_VCPU_IDS || + (kvm->arch.max_vcpu_ids && arg >=3D kvm->arch.max_vcpu_ids)) r =3D -EINVAL; else kvm->arch.bsp_vcpu_id =3D arg; --=20 2.55.0.508.g3f0d502094-goog From nobody Fri Oct 2 12:20:43 2026 Received: from mail-wr1-f51.google.com (mail-wr1-f51.google.com [209.85.221.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 57DD73D9026 for ; Fri, 31 Jul 2026 15:09:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785510547; cv=none; b=Z+xkWeCVSjCvzkpXvJUx0tFIpoPO7/iXDyIcR3C8CzMhG7yNyAJ+v7JNNLM9Y5vrq1m/J8XcJOweTiab0kGJoDE80nrYAnFkEGF6O8kbOxtTGqoN3OO33xQTTaNIhDF1Ia4BjZW036J0zIJ1REuURpVvflt/KGbDEqeBu68FZjs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785510547; c=relaxed/simple; bh=tvuGJlpxe994ywBTZBk8oLyVZiPfdQoTV1v2claAJ/Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=trnLcl/S/iM9n6R85bClPfdXZHLDLOsIC9qi+MV/61apM4cpmrHY7lcWzcB1J2HXAHT8Hknl5+DjvpxKpGuZbnwHoLLbhW2hiI9OKR27+fu33khmodst30+Sf5eZn+fnnXgSsLDCxe4Q/S+pLQLJRY/GPD1AP8DPyjeWT4+MpXU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=oMqG93NA; arc=none smtp.client-ip=209.85.221.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="oMqG93NA" Received: by mail-wr1-f51.google.com with SMTP id ffacd0b85a97d-47c6e9a694bso720148f8f.1 for ; Fri, 31 Jul 2026 08:09:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1785510536; x=1786115336; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=qNQVoJLOAt300tBIc7RjPTSBrNrM6NOapAN0DpYPO7A=; b=oMqG93NAd1Pa+dw1ySgixP4sB/5dgOY2hXyEFi8MoAtT5Z0OPtV7uPC5tb3UCYoASu zkNly5iN3R0EpA+RpjftQRQI96/fSzjrELNFliuBDYfHS4WaWujnjrEJRZDwX2LDw6Ya 911CbRDCuYsbMpK6v6kWP/+LrdoCsi87FZJug= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785510536; x=1786115336; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=qNQVoJLOAt300tBIc7RjPTSBrNrM6NOapAN0DpYPO7A=; b=RWN/Bp/csV67umj/5NMJcspq7iM7ozpfeChe7o6hezzNJbD31QvJuVfDcstnZuCmUr ns3i6LcRqIiuMNY6UII6Ua+ocgnKWtkNGt7CRxvJiUHMco1HsCUWQqAKmTlpr9QB0qjf tK0R/cVwu0mi1EYU7pUGdRhTeRaOndZzKyX0mq+LhZVlLLvMWGbwqPx/6NZdlwMtnEyT iutSoXSLwHktE0MnnPZwFCNYuaHMqyjxPN156NkXkmum2Wv1Md+WsCmsiQNdEXfVia+k ROoqJQwX4xOlE/Qc1Bm/5X3O15Gs/nLqyWXqcTzGhwrxUeKnMSJMxOo25Bv3hcy9EnQC LJBw== X-Forwarded-Encrypted: i=1; AHgh+RoXFS8tECjWo+4zMap4S/+d4CGWnDfqbQ2yBOnDlxQWQOTkC/3wsHbTQrA9xohOi1vPfb5IfGlQQFN2AwE=@vger.kernel.org X-Gm-Message-State: AOJu0YzEgMv3MqPg7zfe7U9Teojb9beFRY7jPEDut+oOStSwZS+rZjEr 1wOLgCLDlr+v0AGMAjK36eVwKY1zNpb5YLlw8MIgVzIKCbpzFMHKBCSkPVUSh6WV7w== X-Gm-Gg: AR+sD13nbOjMypMZkm3uXoV55UVKBMfN+r/T3c+K4NIRehES8+Pp3b+gA/UFL0uEf3Q urY5eyVB19PvuWka4c6NtT5DgPSqa2QmkoxcpxbmM74JTNWqFIjrUuljrPulK/gGvi7nR3IQWMX zwGtptpwGT4HpunImD092yWGpcsTabV0kJIaSNvAVR10afxZPdc33ynx9owTHwykibxTGcx3yj/ IO0+4FdUrPYaH7Dw6ro8u0D6wIHBRHaCgFI6i5e+r8/ChcY5coN4hlBVsfJEOx8Stnp8PMRIJnp Yi2WtrE59QAUYlzys20tsARzPHGxC3G6oTCbOBqdInEiVEelB3pYp0Mf9d2CaBurf8wLkRSt6Cw bIrbDVjucvRSLVxDJM4Og50IBH4EB7RaHEB6zsV09+t+XSJ1CY59t81ZBE2zjpNDZLKfHPDK54r A8rnJqTHbBvsmQP/HlhTUjurhHZC72lyMKmSjrmh5SVjxFRJrrkublWVYXFUnV3CRKjRQhRDqqF fQiau9Y/3o3WyZGLe+F1AtBWJFCATv8ApjDE76oNPQC9vlcbyEIwjQ= X-Received: by 2002:a05:6000:60f:b0:47f:8112:f793 with SMTP id ffacd0b85a97d-47fd72b5cd7mr50971f8f.13.1785510535599; Fri, 31 Jul 2026 08:08:55 -0700 (PDT) Received: from dmaluka.c.googlers.com.com (110.121.148.146.bc.googleusercontent.com. [146.148.121.110]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-47fd45a0c8bsm5647974f8f.34.2026.07.31.08.08.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 31 Jul 2026 08:08:55 -0700 (PDT) From: Dmytro Maluka To: Sean Christopherson Cc: Paolo Bonzini , Dave Hansen , Mathias Krause , kvm@vger.kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, Vineeth Pillai , Chuanxiao Dong , Aashish Sharma , Grzegorz Jaszczyk , Dmytro Maluka Subject: [PATCH v2 3/4] KVM: selftests: Improve bsp_vcpu_id and max_vcpu_ids out-of-bound tests Date: Fri, 31 Jul 2026 15:08:44 +0000 Message-ID: <20260731150846.1728164-4-dmaluka@chromium.org> X-Mailer: git-send-email 2.55.0.508.g3f0d502094-goog In-Reply-To: <20260731150846.1728164-1-dmaluka@chromium.org> References: <20260731150846.1728164-1-dmaluka@chromium.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Now that KVM correctly fails with -EINVAL when attempting to set bsp_vcpu_id to the value of max_vcpu_ids (not just to a greater value) and vice versa, improve corresponding tests to cover this corner case as well. Signed-off-by: Dmytro Maluka --- tools/testing/selftests/kvm/x86/max_vcpuid_cap_test.c | 6 +++--- tools/testing/selftests/kvm/x86/set_boot_cpu_id.c | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/tools/testing/selftests/kvm/x86/max_vcpuid_cap_test.c b/tools/= testing/selftests/kvm/x86/max_vcpuid_cap_test.c index 47ee14967873..43f16c052de4 100644 --- a/tools/testing/selftests/kvm/x86/max_vcpuid_cap_test.c +++ b/tools/testing/selftests/kvm/x86/max_vcpuid_cap_test.c @@ -30,10 +30,10 @@ int main(int argc, char *argv[]) if (kvm_has_cap(KVM_CAP_SET_BOOT_CPU_ID)) { vm_ioctl(vm, KVM_SET_BOOT_CPU_ID, (void *)MAX_VCPU_ID); =20 - /* Try setting KVM_CAP_MAX_VCPU_ID below BOOT_CPU_ID */ - ret =3D __vm_enable_cap(vm, KVM_CAP_MAX_VCPU_ID, MAX_VCPU_ID - 1); + /* Try setting KVM_CAP_MAX_VCPU_ID below or equal to BOOT_CPU_ID */ + ret =3D __vm_enable_cap(vm, KVM_CAP_MAX_VCPU_ID, MAX_VCPU_ID); TEST_ASSERT(ret < 0, - "Setting KVM_CAP_MAX_VCPU_ID below BOOT_CPU_ID should fail"); + "Setting KVM_CAP_MAX_VCPU_ID <=3D BOOT_CPU_ID should fail"); } =20 /* diff --git a/tools/testing/selftests/kvm/x86/set_boot_cpu_id.c b/tools/test= ing/selftests/kvm/x86/set_boot_cpu_id.c index 8e3898646c69..1c4ebdf8e82c 100644 --- a/tools/testing/selftests/kvm/x86/set_boot_cpu_id.c +++ b/tools/testing/selftests/kvm/x86/set_boot_cpu_id.c @@ -39,8 +39,8 @@ static void test_set_invalid_bsp(struct kvm_vm *vm) int r; =20 if (max_vcpu_id) { - r =3D __vm_ioctl(vm, KVM_SET_BOOT_CPU_ID, (void *)(max_vcpu_id + 1)); - TEST_ASSERT(r =3D=3D -1 && errno =3D=3D EINVAL, "BSP with ID > MAX shoul= d fail"); + r =3D __vm_ioctl(vm, KVM_SET_BOOT_CPU_ID, (void *)max_vcpu_id); + TEST_ASSERT(r =3D=3D -1 && errno =3D=3D EINVAL, "BSP with ID >=3D MAX sh= ould fail"); } =20 r =3D __vm_ioctl(vm, KVM_SET_BOOT_CPU_ID, (void *)(1L << 32)); --=20 2.55.0.508.g3f0d502094-goog From nobody Fri Oct 2 12:20:43 2026 Received: from mail-wr1-f52.google.com (mail-wr1-f52.google.com [209.85.221.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6F6EE3BB9EF for ; Fri, 31 Jul 2026 15:09:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785510557; cv=none; b=CBoosgKVZ+fstzYKPut7ZtfNOQ3K8QSux5Z+VNXPTBbOtgTu+opt54s0TJmqCfDiHVqVevrO1HWVX93fIiSOTsP+9PGez0s0I7Cd6nfwuRgU64Kdw7o+2F08qjktBz8EWGW+3Q97K99TAw+pYTWwa3FTbkwJnj9cO9CjFtXnTtg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785510557; c=relaxed/simple; bh=O14zjjovGhUS1oisSmIPImyZNtw8PEWRZRj6BhjFqXc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=plVjYSutMXQD1Nj5FSdVhdnc4fS7BXWuQ7yjLO5J7P9VbFXBJWG14Xnw56mAY1G/RQjD346lUKBBoftLdIQqADxQaYOx07OI3q4QFWGgy5PC3e2c7GrMKOhqtl6lCQDJ17JLksZtMw6qU8ligDXXEqA6qqfe00GFq9m27kYTnkY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=Z4Lm5Ch6; arc=none smtp.client-ip=209.85.221.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="Z4Lm5Ch6" Received: by mail-wr1-f52.google.com with SMTP id ffacd0b85a97d-47fd4ee0b01so415664f8f.2 for ; Fri, 31 Jul 2026 08:09:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1785510537; x=1786115337; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=flDxck68r8K2V0lreAAuQvFuepl9jlGM1LdPTHPMSDc=; b=Z4Lm5Ch69LK7n5bZYSmYZFGQD/6rLOOhEYUWoND+Mva8bO5aq7Q7iO6B7sRJAJEIS4 SF024u0dr3Oz3xLQe16c3y+TpNb72aQlMT7lsSBCRnPq+FNQNoEalEefnww+hmGG0WnY ZkbtRZgpmjiOmHZrjkZDm/wQSKQdyQRDDH1LU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785510537; x=1786115337; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=flDxck68r8K2V0lreAAuQvFuepl9jlGM1LdPTHPMSDc=; b=hgiCOtNVr7wMtwZ2Ns3SD8tt8SItjuvBt85khZqoQlLaBFEbUA9p28DVQAsbksFtBY gIVm4W98rz/FIdtVzQM5JuJ07tFdpD7tJIHiraGUulaG9FNe7jPNGV2mLtXjTkzusyEl MX0NdDProul5qYtJMda2AKypMwJufCzZdOZcLFLZ43hKHChkPn7f8MLyOxsuJbGDhQuS uySyS0myVqeP3u+eMpYMnU019hSqv0CVnhuZxXid92RPF5Vl7lBFlVREB3tjzYaC2Em4 LFMRvHXenPFmrkC5WmAjqrFW7F1XWv7OxxsbX92wc9EBbh46pLvzyXjGO/c8cLOOzL63 wsVg== X-Forwarded-Encrypted: i=1; AHgh+RoatqsTuk3yFLPbDboYK9xo4NJIlj1o2+EbJkf8k1udFDKorsGEgcAZbCD9Yk5qDUybAvefmTNnLpe4Yds=@vger.kernel.org X-Gm-Message-State: AOJu0YxNr4EIZK2fSPwBe0KdIRmttud1sSC3FmVhYxrOZ2iE8n+tqtiO 8yPvw9Hd6jxoBhROYUdaE1ptnQz5dmLHtxcJFliXdb6HOrJPemuasDLoOwS15fo1dQ== X-Gm-Gg: AR+sD11znYIii/WLoksAmwtT+AH9NIENAk/3h6B7xWidK4bvexlOsCZG2/y/k/G/2F3 h+605L2t1HUVGG67IA+WBQ2UGsogqMAyJozdGiG7wYrzFUAKeFhaYkV4eh3gqXVdofSXtA5yjJg 1M+3kB/zvJAD/V0CANWQwSJFvJTo6RyZGlAlKum+AaEZxexZDm0cvRoRzwAFIc3iP64j0m8ZGTE lBg14lNgQjhgoGSW5u+zCQvEGFMjjrLGfh6+N8183Sr1JkFueog5iSvMilfYyvWwwaHIXdtLMha qIPN+5kTW++WqncJyeE0Mou0BnqNpqgseVkWfLv8jtcbDX2IVrto4kcL6Z9l7PiIY8bjgr2W/zx Zpaw6EslmGwU/cXcIS4PtwzpVz4rNxhkT9dYcJlU1DbWhRDPhmyfumaXJmDXWBwVMp+tA01NSnU Cv8firaV/BlkXRm7o002OuJ3zdz6Yt2Oy04GI8pRYx0maE0w4uy250FTVU5olB3TPbPXK7UNUPj S1Qk0ngr0h1fd1psZ0SzQ9HMNbiHUAd9SICmc/MOoVA3I6ZmGYxjys= X-Received: by 2002:a05:6000:46d8:b0:47f:4dfc:ca1e with SMTP id ffacd0b85a97d-47fd72ab3dbmr35826f8f.5.1785510537114; Fri, 31 Jul 2026 08:08:57 -0700 (PDT) Received: from dmaluka.c.googlers.com.com (110.121.148.146.bc.googleusercontent.com. [146.148.121.110]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-47fd45a0c8bsm5647974f8f.34.2026.07.31.08.08.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 31 Jul 2026 08:08:56 -0700 (PDT) From: Dmytro Maluka To: Sean Christopherson Cc: Paolo Bonzini , Dave Hansen , Mathias Krause , kvm@vger.kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, Vineeth Pillai , Chuanxiao Dong , Aashish Sharma , Grzegorz Jaszczyk , Dmytro Maluka Subject: [PATCH v2 4/4] Documentation: KVM: Clarify that KVM_CAP_MAX_VCPU_ID is exclusive Date: Fri, 31 Jul 2026 15:08:45 +0000 Message-ID: <20260731150846.1728164-5-dmaluka@chromium.org> X-Mailer: git-send-email 2.55.0.508.g3f0d502094-goog In-Reply-To: <20260731150846.1728164-1-dmaluka@chromium.org> References: <20260731150846.1728164-1-dmaluka@chromium.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The KVM_CAP_MAX_VCPU_ID capability value is exclusive, i.e. valid APIC ID values are only values below this value, not including it. Its documentation doesn't make that clear, and even suggests otherwise. Fix it and explicitly state that it is exclusive. Signed-off-by: Dmytro Maluka --- Documentation/virt/kvm/api.rst | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/Documentation/virt/kvm/api.rst b/Documentation/virt/kvm/api.rst index e3003a241d5b..dab9a28c0fb5 100644 --- a/Documentation/virt/kvm/api.rst +++ b/Documentation/virt/kvm/api.rst @@ -8593,21 +8593,24 @@ KVM_X86_QUIRK_NESTED_SVM_SHARED_PAT By defau= lt, KVM for nested SVM guests =20 :Architectures: x86 :Target: VM -:Parameters: args[0] - maximum APIC ID value set for current VM +:Parameters: args[0] - maximum APIC ID value (plus one) set for current VM :Returns: 0 on success, -EINVAL if args[0] is beyond KVM_MAX_VCPU_IDS supported in KVM or if it has been set. =20 -This capability allows userspace to specify maximum possible APIC ID +This capability allows userspace to specify a limit on APIC ID values assigned for current VM session prior to the creation of vCPUs, saving memory for data structures indexed by the APIC ID. Userspace is able to calculate the limit to APIC ID values from designated CPU topology. =20 -The value can be changed only until KVM_ENABLE_CAP is set to a nonzero +The limit is not inclusive, i.e. the maximum possible APIC ID value is +args[0] - 1. + +The capability value can only be changed until it is set to a nonzero value or until a vCPU is created. Upon creation of the first vCPU, if the value was set to zero or KVM_ENABLE_CAP was not invoked, KVM -uses the return value of KVM_CHECK_EXTENSION(KVM_CAP_MAX_VCPU_ID) as -the maximum APIC ID. +uses the return value of KVM_CHECK_EXTENSION(KVM_CAP_MAX_VCPU_ID) - 1 +as the maximum APIC ID. =20 7.33 KVM_CAP_X86_NOTIFY_VMEXIT ------------------------------ --=20 2.55.0.508.g3f0d502094-goog