Received: by 2002:a05:6500:1b45:b0:1f5:f2ab:c469 with SMTP id cz5csp941774lqb; Wed, 17 Apr 2024 16:00:32 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCUjA5ZIvXWzM5O8nxuZVX1GxDjDs4bxM4YQqvkLICmv12n1aaVfreWwRSL5xQIpcOlU4iVgy2V+rUNFOvhy+OTSzvW4MQm/8VEu4GjIHw== X-Google-Smtp-Source: AGHT+IHC2yj39C0AmBT3xNk3g8C3ynA+CPcfJjn4T5IEubJmlhO9/y6uHpBWhazXmqvUaN6TA5KH X-Received: by 2002:a25:dfc8:0:b0:dcc:54d0:85e2 with SMTP id w191-20020a25dfc8000000b00dcc54d085e2mr900499ybg.24.1713394832680; Wed, 17 Apr 2024 16:00:32 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1713394832; cv=pass; d=google.com; s=arc-20160816; b=m/n8E//nCYfKbAj3IZ6gWW6qC4ljfJ89bVAh7F1sLrJhhifVPysa1ShbdPAvXJHNZH mF7sFFmJER5aegg33IJYZkxV2lNGF5SinpKLKRWdUkkH1paOT4sxl1D7uOuWy1S7NtTW hhKiS+NoCughO3W8kj1FYBeOpcfw/PmQaUH86feEJsm5pJosRLqNRJP8g/bxisTQyxms eNI+6H7RGgcPwKOhV0v7EaeMFOXiokir3uGsKltiiY1BpV5Rmj0qabZS6envDtAeF58r PTz2ehPz9fsG/nHw+KRBMB61m9cGLWGrt2bHiN6XbY6X0JwGX0mFMlqBkT+pETCaIyou 9bHg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=cc:to:from:subject:message-id:references:mime-version :list-unsubscribe:list-subscribe:list-id:precedence:in-reply-to:date :dkim-signature; bh=u4nCdNbCZqVRKbbSCp3PB5n/hRBdzB/PkmDJ8ZQ9Io8=; fh=qaR0D223zO2wSt1MBqKthVm2LoPh2LaODJUcdd1tQ6A=; b=ve6ItRGv4/abeTabZkaBC6COug8PLakaAd6BQBtAwIf59LoDHQuyo0/qVc1O1pLy14 1dGOD5gzZHb5eiDA0EV5LQEMKCTChhC5Z6yfF8aBh+8Nq0nEc0w4ChlNhFc49tD6c+LD dduAJ3NFcGTnqOjYiNtH9JwWaWPywJ1S8Z76IB9Ra/GQBHz75AlmA6XqRMnhOKWG6NuR vwF6YZ/ic54IeWWRTti24q+GbpThEJj1fUwLjIlX037SweaEpvfmqmqHyhwdyoaX/xJr 0y9S2t1yDBfrH5oaYSFS8cKqgiHZFu5yTL7p/UVPYlzih1WcwvVvn+DMmdOIoT0Fll0M 15zA==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=4bmbtJFC; arc=pass (i=1 spf=pass spfdomain=flex--seanjc.bounces.google.com dkim=pass dkdomain=google.com dmarc=pass fromdomain=google.com); spf=pass (google.com: domain of linux-kernel+bounces-149297-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-149297-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [2604:1380:45d1:ec00::1]) by mx.google.com with ESMTPS id q2-20020ad45ca2000000b0069b1d8950f8si210443qvh.461.2024.04.17.16.00.32 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 17 Apr 2024 16:00:32 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-149297-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) client-ip=2604:1380:45d1:ec00::1; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=4bmbtJFC; arc=pass (i=1 spf=pass spfdomain=flex--seanjc.bounces.google.com dkim=pass dkdomain=google.com dmarc=pass fromdomain=google.com); spf=pass (google.com: domain of linux-kernel+bounces-149297-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-149297-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id 50D731C21679 for ; Wed, 17 Apr 2024 23:00:32 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 92F2585297; Wed, 17 Apr 2024 23:00:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="4bmbtJFC" Received: from mail-yw1-f201.google.com (mail-yw1-f201.google.com [209.85.128.201]) (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 5976571734 for ; Wed, 17 Apr 2024 23:00:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713394823; cv=none; b=YLU2ONqVveM1ZtSZEeFTMMhdMr/oJyenV718S57t6qViktQ6qfjqqaRb8Oajkz6WxFV1YRKHmsy6yYQKfHV/U1tfziGxBRZl5EjOHYBQBDbOXoECZtL+WefLS46CY+u1kbRsxrszw6VHwwtMNezGlI8RwwwKJRyXtzBDYDdWbXw= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713394823; c=relaxed/simple; bh=jSyOnZL52ZqVwEzR7qnXau+1BNj/PByM/S+zvuIt55s=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=EtvM63q92D43rIXhCUsHAhsR1N2dA0IxYB8pcMQVk53MCKAmmqYnrwL7hX/hOoM8J1R/Q8rDXEkpjudgDcDL+t75Zo558JgNaVEvCA7zW68bgYjlqYpiVayv2ztq88vWkVB5pCMH2E/qb41XwGZX/hJWJwWW94Okl6Jzv/D3CQ0= 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=4bmbtJFC; arc=none smtp.client-ip=209.85.128.201 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 Received: by mail-yw1-f201.google.com with SMTP id 00721157ae682-61acc68c1bdso15724387b3.1 for ; Wed, 17 Apr 2024 16:00:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1713394821; x=1713999621; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=u4nCdNbCZqVRKbbSCp3PB5n/hRBdzB/PkmDJ8ZQ9Io8=; b=4bmbtJFCGf8ZLkBrpPOBBqpTz2+jBdpHCUP/AvYKloaIXe122ZlyHhB7A4JR5PWuEf Dwqbg8eMJjbncCEbaDln3VzYDHG3hy2GHhd9lLjYa7bQoIPlBP7dMsStqWlVG9O7a21/ J4B2BGIpm/lsvba6sW4f+gL7EWoIQEszaUuB6BRdzEzP4m8tjSMsWcq6bxxJt8LwRmBI qCESsfY1uXEcslTxOtYxc+ChhkUnmPbz9dtf/jIND0ZNwGJbAgiZG4jybUl594wPjM3l FijdzthwBnI9HBM0eteF3dFf0hdMAPvckxSZbvxyb3g2isXN0B0U19TYfgGPWSOGG4m1 S0Ag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713394821; x=1713999621; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=u4nCdNbCZqVRKbbSCp3PB5n/hRBdzB/PkmDJ8ZQ9Io8=; b=HWWTQGjyPyOS20cLyWE0IuEly4TqCDyaQJD4vWp4lTSMKqKAJ2MDAltTprd4C4XgE2 2XNU5D3jk9JtY2c3eqR0mvZusdy9y9G4AEl9ky7SFCM0hPqCJilq/XmQtH8AjbPuUhZy eInvhAXoFYpp9j18IOgPzydvzYpaq9eUuh+GBJhclvixA0Ldr2HNZ3XPyEyvD+KEQtF6 OsySskQ57EGSw6ib60aSwEcUeBmmQ7JqypkfmIbBRfNNt33FOsXbnrdDw5Uk7qtJDO8r c6eJS4ijVf1pOmxr8mTVPLMYz3iDAOXc2Xk4bFfI+SBajrpECiygWVkjfNqzJGE6uquK rsMA== X-Gm-Message-State: AOJu0Yxn3Jw1jPW98W2e9CKM1Yf8APhImj80AD8fXc5X6JszIfGrmWmS WZtfFISONIDjOT5qxrNKn3Re3XE80J1ROhlIjuzSAT2tDNPT/IFRMQqMCVhQj8K6Td3mgMNo8Tf 9rQ== X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a05:6902:1001:b0:dda:c4ec:7db5 with SMTP id w1-20020a056902100100b00ddac4ec7db5mr152739ybt.4.1713394821463; Wed, 17 Apr 2024 16:00:21 -0700 (PDT) Date: Wed, 17 Apr 2024 16:00:19 -0700 In-Reply-To: <20240416201935.3525739-8-pbonzini@redhat.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240416201935.3525739-1-pbonzini@redhat.com> <20240416201935.3525739-8-pbonzini@redhat.com> Message-ID: Subject: Re: [PATCH v2 07/10] KVM: VMX: Introduce test mode related to EPT violation VE From: Sean Christopherson To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, isaku.yamahata@intel.com, xiaoyao.li@intel.com, binbin.wu@linux.intel.com, chao.gao@intel.com Content-Type: text/plain; charset="us-ascii" On Tue, Apr 16, 2024, Paolo Bonzini wrote: > @@ -4711,8 +4722,21 @@ static void init_vmcs(struct vcpu_vmx *vmx) > > exec_controls_set(vmx, vmx_exec_control(vmx)); > > - if (cpu_has_secondary_exec_ctrls()) > + if (cpu_has_secondary_exec_ctrls()) { > secondary_exec_controls_set(vmx, vmx_secondary_exec_control(vmx)); > + if (vmx->ve_info) { > + vmcs_write64(VE_INFORMATION_ADDRESS, > + __pa(vmx->ve_info)); > + } else { > + /* > + * Because SECONDARY_EXEC_EPT_VIOLATION_VE is > + * used only for debugging, it's okay to leave > + * it disabled. > + */ > + secondary_exec_controls_clearbit(vmx, > + SECONDARY_EXEC_EPT_VIOLATION_VE); As below, this is silly. > + } > + } > > if (cpu_has_tertiary_exec_ctrls()) > tertiary_exec_controls_set(vmx, vmx_tertiary_exec_control(vmx)); > @@ -5200,6 +5224,12 @@ static int handle_exception_nmi(struct kvm_vcpu *vcpu) > if (is_invalid_opcode(intr_info)) > return handle_ud(vcpu); > > + /* > + * #VE isn't supposed to happen. Block the VM if it does. > + */ Doesn't need to be a multi-line comment. Though I would just drop the comment, the KVM_BUG_ON() makes it pretty darn clear #VE is unexpected. > + if (KVM_BUG_ON(is_ve_fault(intr_info), vcpu->kvm)) > + return -EIO; > + > error_code = 0; > if (intr_info & INTR_INFO_DELIVER_CODE_MASK) > error_code = vmcs_read32(VM_EXIT_INTR_ERROR_CODE); > @@ -7474,6 +7504,8 @@ void vmx_vcpu_free(struct kvm_vcpu *vcpu) > free_vpid(vmx->vpid); > nested_vmx_free_vcpu(vcpu); > free_loaded_vmcs(vmx->loaded_vmcs); > + if (vmx->ve_info) free_page() handles '0', though hopefully this becomes a moot point. > + free_page((unsigned long)vmx->ve_info); > } > > int vmx_vcpu_create(struct kvm_vcpu *vcpu) > @@ -7567,6 +7599,19 @@ int vmx_vcpu_create(struct kvm_vcpu *vcpu) > goto free_vmcs; > } > > + if (vmcs_config.cpu_based_2nd_exec_ctrl & SECONDARY_EXEC_EPT_VIOLATION_VE) { > + struct page *page; > + > + BUILD_BUG_ON(sizeof(*vmx->ve_info) > PAGE_SIZE); > + > + /* ve_info must be page aligned. */ > + page = alloc_page(GFP_KERNEL_ACCOUNT | __GFP_ZERO); > + if (page) Can we please just treat this as an error. The odds of us screwing up checks against vmx->ve_info are higher than the odds of someone enabling KVM_INTEL_PROVE_VE on a machine with such high memory pressure that a 4KiB allocation fails, all subequent memory allocations succeeding, *and* caring that VM creation fails. The pr_err() in the failure path is even more ridiculous. > + vmx->ve_info = page_to_virt(page); > + else > + pr_err("Failed to allocate ve_info. disabling EPT_VIOLATION_VE.\n"); > + } > + > if (vmx_can_use_ipiv(vcpu)) > WRITE_ONCE(to_kvm_vmx(vcpu->kvm)->pid_table[vcpu->vcpu_id], > __pa(&vmx->pi_desc) | PID_TABLE_ENTRY_VALID);