From nobody Sat Jul 25 00:15:54 2026 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2A8E63749E9 for ; Tue, 21 Jul 2026 16:47:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784652476; cv=none; b=PC2QnfVB/zrIdRpTziwWinXEhNpEZdzYaKtlqRsnrnFkdex+uS+oj9vfr7+pSIpg/rsxk2BNT3sgE9octwZOlqD4J+1TWwLwjxPyQlWneIvFidEAgoACZ8jY77qAMgedLyrL18+ySn4UVYvWJ8ZM/ueH52x6IeAe7fizFRENF5Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784652476; c=relaxed/simple; bh=6RwquLywhi0GBUCnzatAMSofcxVHNo0nZEB3gMhfyWc=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=WSYNgD4T7J9ikgdwfiEHbCLpw2og2tZ7ALgJaj8QG+8xfiAhsv4Eghs7+IhAu4NWwJefOJnmNLoEiqYS7SiktMzsOt/ID5EFJd7rm5R2IaGrayUzt3ArsbyRbe0smFBg7Kcx0AZvadlsZjvrPPsIAVglMzPRSMlXKqqljxvwh4s= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=ECsSr0jI; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=ZmsO8l5P; arc=none smtp.client-ip=170.10.129.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="ECsSr0jI"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="ZmsO8l5P" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1784652471; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=be3+Li/Szx6t4rZokyI99j2GfhjzMsbkOxQWganE5Mw=; b=ECsSr0jI7VObXm+K0bwnfNQ1EHsWBY6XFGWiABLxBvLTBmznDb/KsaQQnnyX07MCC/0VGR aU1RkwxGVSwIiYhw1jQhpJdwrHl4YV318YaiNtllqquJNOu8e0idOD7ZHQOQ1jMPr7iA40 5RRSMFC69wUrVGTpVikoTw8kQOFiOXA= Received: from mail-wr1-f72.google.com (mail-wr1-f72.google.com [209.85.221.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-691-DTlNr6gWNxSaO058pR6tGg-1; Tue, 21 Jul 2026 12:47:49 -0400 X-MC-Unique: DTlNr6gWNxSaO058pR6tGg-1 X-Mimecast-MFC-AGG-ID: DTlNr6gWNxSaO058pR6tGg_1784652468 Received: by mail-wr1-f72.google.com with SMTP id ffacd0b85a97d-47f835ac1aeso325923f8f.3 for ; Tue, 21 Jul 2026 09:47:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1784652468; x=1785257268; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to:content-type; bh=be3+Li/Szx6t4rZokyI99j2GfhjzMsbkOxQWganE5Mw=; b=ZmsO8l5PYnOuju9ndnj3ze3phK9B3AVkmjMwjgKTDrJi5nmBEyn/NaZv+vklTdaqy1 tVeJerjZV8/MNZOBMHqZmwJC2NPtf5u5P9oiJss9Tphm8SIbrB0adUeFMyDoN1+3lD47 N7lmDsirLxlK9skPt7rwz1cBt5T0imcjIvLflgQ49MHDsta26kVpz9Mby8aqmlwPYaGz dY8nHnBzcfWERETKUIiN2ASsTw6GL08YnPtEkmnee6lfioy77tm8BV/ppThcHjxxG+zT vRZ7+7koXSO2+/4bMJ5YAkZK6t6sUBVlSRck8DUiDzlJRFqRW656RKG4bqzXLCfq8dfJ //Cw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784652468; x=1785257268; h=content-transfer-encoding:mime-version: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=be3+Li/Szx6t4rZokyI99j2GfhjzMsbkOxQWganE5Mw=; b=SEwsHY4/BNy0byKNmNCr26NndhrT9QvhxFXiHaoXJTNKlJ+44bLw3Ka72hSily/YXX zA/hgQ+iHnJ/XExItBhQhGuVapu7uTUpnFYnSRR3ODPyVjxCz05zv8SgM7cwB465ePmK IKd2MPCzG7c0Tm6NpNaHg7AeBTOL7FBgp/wzYqj9/1cgjaARHBFC0bhwdjQxjns43eem PCUhE3+RX075X4wA7OBdFoJE/EqsZgUmbP/y1RWdrcoF+acTald8CE6vjzy3MyGvKO/k yLWbj0OfU5pkkAlbVxwYbdR6WdHtFeAE1ZkjihGZNaHuyQyTdmO70iWiX2rCFUHYKx8z 1T8g== X-Gm-Message-State: AOJu0Yy1CIpI36yMbxDy7VOKkAkV9h65OKdeEjZdh6YYptoA5sVjcs/m twJhSEHuejk1yuQ1xjjasOw8ZbiYGAJ7vIEwbV0np7s4dq1Hz1RFvj3DxCHIsv7ryKP9aAO9Ij+ yYOJOyQpiXqYn3txmXoRqh0Fk1mVTrf7pgU4+LBXnSm9l/ACn752ePGm8eyDZy+PB2knJQhdvMF M+K/NL1yQuPsV93U8pSFOzY5nQfgH7eLTzk5fssHr6wWshAvKhUQ== X-Gm-Gg: AR+sD13jHxT6U9WJWQW6uNAKIM1+XoUBCqYTFFvO21SLRpflNR9nqqA4jEcOZb7IYPb J5+EMFGGuTDSGMJipYlJRUEOazAHUqn4V34tS5tu9zoPsytHQhjJRaqHVUhxon62Y4taNQwBWdW jrbM2l4OtudHBbLSAapIwqojQ/ViVrfACgJdbFN6l43uyHPWaFMKjIRXrrduEFf61MO6aLefywJ E8a5LrZ3ofe9lviUqrgLckBeh4X3fFaTAKu0qK1TQPG18cXFpVMDEb9yZDU7Uy2S5mNduFbA8BK PjJH5hiZ0sfhCBpRms9QgQUoOi4oPekV5ri1yH2yswCOF2N+SNHLojkGlQp0Xlgc/ZvFhi4MxX1 bYLu8tFiqL3J98ZZHBBNp9/+K1Uh6RPiqnn9kfiTwe6i+iGKC+FWmrA4WAemaQ5h1kfXtdEUIc9 X4AA== X-Received: by 2002:a05:6000:400f:b0:47f:8152:e568 with SMTP id ffacd0b85a97d-47f8152e595mr4213988f8f.60.1784652468418; Tue, 21 Jul 2026 09:47:48 -0700 (PDT) X-Received: by 2002:a05:6000:400f:b0:47f:8152:e568 with SMTP id ffacd0b85a97d-47f8152e595mr4213959f8f.60.1784652467986; Tue, 21 Jul 2026 09:47:47 -0700 (PDT) Received: from [192.168.1.84] ([93.56.170.76]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-47f63ec7c69sm43124153f8f.17.2026.07.21.09.47.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Jul 2026 09:47:47 -0700 (PDT) From: Paolo Bonzini To: linux-kernel@vger.kernel.org, kvm@vger.kernel.org Cc: Sean Christopherson , stable@vger.kernel.org Subject: [PATCH] KVM: VMX: add memory clobber to asm for VMX instructions Date: Tue, 21 Jul 2026 18:47:46 +0200 Message-ID: <20260721164746.376551-1-pbonzini@redhat.com> X-Mailer: git-send-email 2.55.0 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" VMCLEAR/VMREAD/VMWRITE/VMPTRLD access the internal VMCS cache, which is not visible to the compiler; without a memory clobber, the compiler can reorder them in troublesome ways because "asm volatile" and "asm goto" only protect against removal of the asm. For example, placing a VMWRITE before the corresponding VMCS pointer is loaded can lead to corruption. While none of this has been observed, it is better to prevent than cure. Likewise, INVEPT and INVVPID access the TLB and, even though in their case the effect is only visible to the next VMLAUNCH/VMRESUME, it is technically correct to add the clobber there too. So avoid any urge to special case them, and simply hardcode "memory" into the clobber list of vmx_asm1() and vmx_asm2(). __vmcs_readl() open-codes its own asm, so add the clobber there as well. Link: https://lore.kernel.org/kvm/CABgObfbL3t21yVeSwiLSjjOUER+rTYDPHYAH9YU4= TWGRjx6XHg@mail.gmail.com/ Cc: Sean Christopherson Cc: stable@vger.kernel.org Signed-off-by: Paolo Bonzini Reviewed-by: Sean Christopherson --- arch/x86/kvm/vmx/vmx_ops.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/arch/x86/kvm/vmx/vmx_ops.h b/arch/x86/kvm/vmx/vmx_ops.h index 81784befaaf4..9ffe03a0c223 100644 --- a/arch/x86/kvm/vmx/vmx_ops.h +++ b/arch/x86/kvm/vmx/vmx_ops.h @@ -101,7 +101,7 @@ static __always_inline unsigned long __vmcs_readl(unsig= ned long field) =20 : [output] "=3Dr" (value) : [field] "r" (field) - : "cc" + : "cc", "memory" : do_fail, do_exception); =20 return value; @@ -145,7 +145,7 @@ static __always_inline unsigned long __vmcs_readl(unsig= ned long field) =20 : ASM_CALL_CONSTRAINT, [output] "=3D&r" (value) : [field] "r" (field) - : "cc"); + : "cc", "memory"); return value; =20 #endif /* CONFIG_CC_HAS_ASM_GOTO_OUTPUT */ @@ -192,7 +192,7 @@ do { \ asm goto("1: " __stringify(insn) " %0\n\t" \ "jna %l[error]\n\t" \ _ASM_EXTABLE(1b, %l[fault]) \ - : : op1 : "cc" : error, fault); \ + : : op1 : "cc", "memory" : error, fault); \ return; \ error: \ instrumentation_begin(); \ @@ -208,7 +208,7 @@ do { \ asm goto("1: " __stringify(insn) " %1, %0\n\t" \ "jna %l[error]\n\t" \ _ASM_EXTABLE(1b, %l[fault]) \ - : : op1, op2 : "cc" : error, fault); \ + : : op1, op2 : "cc", "memory" : error, fault);\ return; \ error: \ instrumentation_begin(); \ --=20 2.55.0