From nobody Tue Dec 16 14:43:48 2025 Received: from mail-pj1-f74.google.com (mail-pj1-f74.google.com [209.85.216.74]) (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 7683F306490 for ; Sat, 6 Dec 2025 00:18:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764980328; cv=none; b=p1cLdcJOJScyANuu/ghAG3qrll7XlMIByFMRjDqivgAF+3xDtiMarZeNg8cb0O+bcO1jW2DR0pO4/U5OBeKcP19e0Vi/QU6TGyECyo3gcw/m5aaUrfdwxFHf8CUyvHfeAL7r6gOOJWslNxAiScPzYjn7er+D0vat+Hx6V7GHIH4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764980328; c=relaxed/simple; bh=l5LewAY0/XP6khVEVySmdxm/awcqBbBDupO1XKWMwzw=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=ZycEWoOkqYxbokUgQqEYY68tDOLnIM5Uv2E/LWXPdQEgwbNWd0joRDBbWlmnCJ8z9J1glakDqcrZzXVsq16HqFa+0UD8bLQfcD5z9g0AFRzVRAvk/DeKxgUcTaR5nsEwxaYfisr2iRH7PLNDSPgoPRnwBJthQhXdG9S0m8LDgcE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=sj3VHSDj; arc=none smtp.client-ip=209.85.216.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="sj3VHSDj" Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-34176460924so2634328a91.3 for ; Fri, 05 Dec 2025 16:18:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1764980326; x=1765585126; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=OETTgwJdKjLOXcIOe9hfqxKY+IkrMGSVX3FLBG1neIA=; b=sj3VHSDjoVOqfHTm75gcjLiZ2g5ImZzrOY+bEHkeUX5GF1e/PnPa7Mag0CMbGlhqJN lbadaBXTOiucejd0oFmg1RbH47IDtn9slLfgCRmv+fl6PcRACsE6DWYqtx38nKBsfRnA pDLn2OcqfiVhfrNmPq6pu9NmxgSQkXlbeXjVJWag2bgkxjV58Lx+5SWSuXGNFlJiSw1X BYpumfnfnUdtwi/h6PwgVFrRbasqDtwYbSK7NbDyP/pQJzdVlPyzwtTsuxw0B5+QdO5E 8Ia+cNEbkOiEpsrd3kudpJB7bh4LZNPOPlUMBSVYOiWzXhHOY8l4HyFd27HxLZzGpKeh kEdw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764980326; x=1765585126; h=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; bh=OETTgwJdKjLOXcIOe9hfqxKY+IkrMGSVX3FLBG1neIA=; b=KAYqaTk4Os0Cp3eLP1AOQWTT2BFCfWJWkjbW9zpY9OBA9ECf7bHO2WrCOt7o2UYCop T1EJ7DMh2KA3ydWnSpI0nTfUNj0luSPbOQZ+aX9EeOhaVRCDrAdbvoxHBz96z94xl1MT SpOFJp09aegLFFTOYSNs+sGv7FcbUBgynWBrNk1hkNh6dCzMd1rUx9imZGBBNeXHde+h 1DA3je2FW8mzUFed7TLaX9poXu6b07uqt88cLZ8sdfFf1c+4yCX3QVCIFlTOAYf65Ibg uW4eMR+q22fliZS2HRX9NdHjo/kaUlar4so+C2LPMXXKQYI0NQp09RZyMzHE9G4+LOMh 5VEw== X-Forwarded-Encrypted: i=1; AJvYcCX4b1kgnqMZcVTXAoBmRDk46BHvx79XNyepn3ZGaoWjgH1DdMb5KP6f5Y9uUGQ1wDVWCIOZaRrbC7gohyg=@vger.kernel.org X-Gm-Message-State: AOJu0Yyl+7MJwUleuPwBH/tRg/+P97kurnM4feY/xcMW35roTc/sd2Hu lNU7o8BArSPUGzhXwqSGQcOfDFHkhl4W4iDoMbOWjA35bV9iUxrdI1IFtniBVvv8WiT5K4ihvN3 szcGMew== X-Google-Smtp-Source: AGHT+IEhe1pZpq0MW23HxJ1d0U2ymT/Zcg6wxeHV4r8IvmytRP6tpgYpoHJSoQtNjxepJopTb3+TB9OPRJk= X-Received: from pjis4.prod.google.com ([2002:a17:90a:5d04:b0:340:b1b5:eb5e]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:3ecd:b0:340:f05a:3ec2 with SMTP id 98e67ed59e1d1-349a25fb8c0mr658162a91.17.1764980325670; Fri, 05 Dec 2025 16:18:45 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 5 Dec 2025 16:17:15 -0800 In-Reply-To: <20251206001720.468579-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20251206001720.468579-1-seanjc@google.com> X-Mailer: git-send-email 2.52.0.223.gf5cc29aaa4-goog Message-ID: <20251206001720.468579-40-seanjc@google.com> Subject: [PATCH v6 39/44] KVM: VMX: Bug the VM if either MSR auto-load list is full From: Sean Christopherson To: Marc Zyngier , Oliver Upton , Tianrui Zhao , Bibo Mao , Huacai Chen , Anup Patel , Paul Walmsley , Palmer Dabbelt , Albert Ou , Xin Li , "H. Peter Anvin" , Andy Lutomirski , Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Sean Christopherson , Paolo Bonzini Cc: 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, linux-perf-users@vger.kernel.org, Mingwei Zhang , Xudong Hao , Sandipan Das , Dapeng Mi , Xiong Zhang , Manali Shukla , Jim Mattson Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" WARN and bug the VM if either MSR auto-load list is full when adding an MSR to the lists, as the set of MSRs that KVM loads via the lists is finite and entirely KVM controlled, i.e. overflowing the lists shouldn't be possible in a fully released version of KVM. Terminate the VM as the core KVM infrastructure has no insight as to _why_ an MSR is being added to the list, and failure to load an MSR on VM-Enter and/or VM-Exit could be fatal to the host. E.g. running the host with a guest-controlled PEBS MSR could generate unexpected writes to the DS buffer and crash the host. Signed-off-by: Sean Christopherson Reviewed-by: Dapeng Mi --- arch/x86/kvm/vmx/vmx.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c index 38491962b2c1..2c50ebf4ff1b 100644 --- a/arch/x86/kvm/vmx/vmx.c +++ b/arch/x86/kvm/vmx/vmx.c @@ -1098,6 +1098,7 @@ static void add_atomic_switch_msr(struct vcpu_vmx *vm= x, unsigned msr, { int i, j =3D 0; struct msr_autoload *m =3D &vmx->msr_autoload; + struct kvm *kvm =3D vmx->vcpu.kvm; =20 switch (msr) { case MSR_EFER: @@ -1134,12 +1135,10 @@ static void add_atomic_switch_msr(struct vcpu_vmx *= vmx, unsigned msr, i =3D vmx_find_loadstore_msr_slot(&m->guest, msr); j =3D vmx_find_loadstore_msr_slot(&m->host, msr); =20 - if ((i < 0 && m->guest.nr =3D=3D MAX_NR_LOADSTORE_MSRS) || - (j < 0 && m->host.nr =3D=3D MAX_NR_LOADSTORE_MSRS)) { - printk_once(KERN_WARNING "Not enough msr switch entries. " - "Can't add msr %x\n", msr); + if (KVM_BUG_ON(i < 0 && m->guest.nr =3D=3D MAX_NR_LOADSTORE_MSRS, kvm) || + KVM_BUG_ON(j < 0 && m->host.nr =3D=3D MAX_NR_LOADSTORE_MSRS, kvm)) return; - } + if (i < 0) { i =3D m->guest.nr++; vmcs_write32(VM_ENTRY_MSR_LOAD_COUNT, m->guest.nr); --=20 2.52.0.223.gf5cc29aaa4-goog