From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pf1-f202.google.com (mail-pf1-f202.google.com [209.85.210.202]) (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 AA1753AA1A8 for ; Thu, 15 Jan 2026 17:34:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.202 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768498472; cv=none; b=mEnFQsGMGoOJq8A0Uo/CwmK/JEnpWVBdg+evPmh1GWvXLBD/XZaB/rk8G2NuY2b5ZX7c76VvRpaBgZP3f33nOmfGKDBugZtvCYv+J3/m2QRkbZLpJQEsCPe/GpV0DH8vUG09j/I0htBtHuGQvcGLzN3EwMYCIcB6IWpEvgF1lJs= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768498472; c=relaxed/simple; bh=Kc3Rc89VDDetVPduJ80lK3reeCJZBUH0DPHeisPNCvk=; h=Date:Mime-Version:Message-ID:Subject:From:To:Cc:Content-Type; b=T4pa4gu5BsUac7y1dvMwQrzG3O/lNYJcukjdYfB9iKNEjR0BjbOs9Qiepc7wIu6d9VxG6fSXEei/XOccTP2rqTf3lnaHDbEIFmdkqIBdCaPWQ2+LEvFVc5XEFNd9xFQx5l01DVJUlichif1/5epkjHwy+DLSpwVraMfoUhKLYL0= 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=DKHZCrFO; arc=none smtp.client-ip=209.85.210.202 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="DKHZCrFO" Received: by mail-pf1-f202.google.com with SMTP id d2e1a72fcca58-81f39ad0d82so2143412b3a.3 for ; Thu, 15 Jan 2026 09:34:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1768498470; x=1769103270; darn=vger.kernel.org; h=cc:to:from:subject:message-id:mime-version:date:reply-to:from:to:cc :subject:date:message-id:reply-to; bh=L5mdohV5Ko0SGA0KnC7ivB69sfeeYfTVYTLfzUKqBnw=; b=DKHZCrFOjlNSfyhX4EiGU3ag2sSpZwrDH8rgrHLYkornr9KbhHa2393HTmpzwdSWl8 16Et827My5cFY7tcauZDNXs6ESTdzASXT1cE62GAKmfZ8movzIh9/EOfiVxNUFRAlhfy oCqnmeUchNqCXp0PKpKFMKOOmk91f4RudffQAbMgjjJy+2oSIb/EEbp8hdRk1lvZbW// N/AtO8GBguYfiO6v5qp+W/+XRWR+FYCJY28kWLJhPaXHWfyZv30wJ8u8uOtOZByS314l UJayJlymhf5O0BMVSK3U2I/kAxpXrkd5QfCAhLpb17lOgHNoW1JEnicmVH6L4K5iyG3r 6ZEg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768498470; x=1769103270; h=cc:to:from:subject:message-id:mime-version:date:reply-to :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=L5mdohV5Ko0SGA0KnC7ivB69sfeeYfTVYTLfzUKqBnw=; b=fKNu43MAKhFQaHgOGCvZZhOAXMgsG5fmNvnlpzKThRW1opoEBXa1feyHosqQaBIVms jhHuj3rG2zaVl/YQDvIdbf254Up9pSJXl2IUxqOBxDus+122tKGyWPeVIK/pSwHMrQBM FXf5jrg5MUTvABKDrZAOpnhQWOymCYJtaR3uzL9CpL8aJDrxM4W7t/mLM8c2s2D5YIkC DfehFRE1cNjKZrCYOmWemekpMy8J/L0YBiSSw3NaJITr2vv1see1taeiH1RK8jhIFiDQ kM53be3/ng53UfolgknkC6lDyc+7Sbi56IjpyAIgY5col6HFxdzm57TsCHZCgSkBzwmU 4W+Q== X-Forwarded-Encrypted: i=1; AJvYcCX4/UC3CDAuvRbW7PXdEArkZEw8lszzlkqs2dREIePckRCfqel9y2BPdCrgHWonH6X2cg63v8GCUpXyr2M=@vger.kernel.org X-Gm-Message-State: AOJu0YxCv31R+x/ZX3xH0kKi+jTMO2pLYF0ph76ha/bbYMAPc47b+23p acsdIUmius9M4MqqzQ1bBFUneNJyS4mHO5ex/36h+HfzAdc2Ht97xLQx4msbHv+NsnVufU1udC5 qk2WY0Q== X-Received: from pfbln21.prod.google.com ([2002:a05:6a00:3cd5:b0:7e1:a138:bbf3]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:aa7:88c6:0:b0:7a5:396d:76be with SMTP id d2e1a72fcca58-81fa01b96a6mr317310b3a.27.1768498470072; Thu, 15 Jan 2026 09:34:30 -0800 (PST) Reply-To: Sean Christopherson Date: Thu, 15 Jan 2026 09:34:23 -0800 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260115173427.716021-1-seanjc@google.com> Subject: [PATCH v4 0/4] KVM: nVMX: Disallow access to vmcs12 fields that aren't supported by "hardware" From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Xiaoyao Li , Chao Gao , Xin Li , Yosry Ahmed Content-Type: text/plain; charset="UTF-8" Disallow accesses to vmcs12 fields that are defined by KVM, but are unsupported in the current incarnation of KVM, e.g. due to lack of hardware support for the underlying VMCS fields. The primary motivation is to avoid having to carry the same logic for shadowed VMCS fields, which can't play nice with unsupported fields since VMREAD/VMWRITE will fail when attempting to transfer state between vmcs12 and the shadow VMCS. v4: - Filter out read-only fields too. [Xiaoyao] - Actually test the code. v3: - https://lore.kernel.org/all/20260109041523.1027323-1-seanjc@google.com - Collect reviews. [Xin, Chao] - Actually filter out vmcs12 fields when configuring shadow VMCS. [Chao] - Move VMX MSR configuration into nested_vmx_hardware_setup(). - Add ENC_TO_VMCS12_IDX. [Xiaoyao] - Use a Xiaoyao's crazy double ROL16 math. :-) [Xiaoyao, obviously] v2: - https://lore.kernel.org/all/20251230220220.4122282-1-seanjc@google.com - Name the array of KVM-defined fields kvm_supported_vmcs12_field_offsets, e.g. so that it's no confused with what's supported by hardware. [Xin] - Combine encodings in switch statements for fields shared fate. [Xin] - Drop the extern declaration of supported_vmcs12_field_offsets. [Chao] - Handle GUEST_INTR_STATUS in cpu_has_vmcs12_field() and add a patch to drop the custom handling from init_vmcs_shadow_fields(). [Chao] v1: https://lore.kernel.org/all/20251216012918.1707681-1-seanjc@google.com Sean Christopherson (4): KVM: nVMX: Setup VMX MSRs on loading CPU during nested_vmx_hardware_setup() KVM: VMX: Add a wrapper around ROL16() to get a vmcs12 from a field encoding KVM: nVMX: Disallow access to vmcs12 fields that aren't supported by "hardware" KVM: nVMX: Remove explicit filtering of GUEST_INTR_STATUS from shadow VMCS fields arch/x86/kvm/vmx/hyperv_evmcs.c | 2 +- arch/x86/kvm/vmx/hyperv_evmcs.h | 2 +- arch/x86/kvm/vmx/nested.c | 31 ++++++++------ arch/x86/kvm/vmx/vmcs.h | 9 ++++ arch/x86/kvm/vmx/vmcs12.c | 74 +++++++++++++++++++++++++++++++-- arch/x86/kvm/vmx/vmcs12.h | 8 ++-- arch/x86/kvm/vmx/vmx.c | 2 - 7 files changed, 104 insertions(+), 24 deletions(-) base-commit: acdc5446135932ca974b82d9d9a17762c7a82493 -- 2.52.0.457.g6b5491de43-goog