Received: by 2002:a25:868d:0:0:0:0:0 with SMTP id z13csp2779271ybk; Tue, 12 May 2020 08:00:05 -0700 (PDT) X-Google-Smtp-Source: APiQypJ41pKeV+u1nVQR4ii/N5NjYAGNPtjVMuUvBpC2+UtjczFGWYXEb9twEG7+ZPhx2+fjD4Rx X-Received: by 2002:a17:906:6b1b:: with SMTP id q27mr17572544ejr.158.1589295605085; Tue, 12 May 2020 08:00:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1589295605; cv=none; d=google.com; s=arc-20160816; b=BqYvsj/z9+GQ8Bg8I3HTSe7DN1qf4kyN7NAVPLMl6U9vr8+rqXZUGQJO5KG3Oxin1A pRmMcacTkB886eMrH3/x9wpbsZaZiHMI3v2cvNWBSrwkLZGf2N6drBoOWZODC2cL3UQt 4PJ+FS6Ir9F8SSORyqi+ByaK3ff0DHas5vjPq7IKsvsmvc8BCUMxzUx/IQWehaAyyHUy c1PhqOfIseSu5DgD9Od05fYwalzkxcp/OZ9UUTS7QOVaOCDp04rp0HhsY8TVsWSSvCC2 KPWn2Rz/E6ruOG7Yt8ZF6rn0LalwrP5bT6zZsFr8tBSlyP8HN9PvidvAv9A4/0hgaWrE 5K/Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :ironport-sdr:ironport-sdr; bh=rr+AMLbEKgFcWB/YOJFG1aDhip6cpV1MIzCTkBAbBSY=; b=EJKg50ywOR18lQO09h6129nwxM7/IqHqxqWFTh6uUwKwru5UTiQUTAQWabwFIScVLK s0TveeBBWvouX0a+OKBJgBRNqNJ0ZuMyklnTZEUQAmngudv9/PPoq80fz75pSm4s77mI cJjiIuOQcBFNkVvAdVpSsiFXjsoOQ1MDbZuRMQdRqqbhNwvobxER1IFy4kL1UIXNSVbO 63Gnej6bvHB/0Y+VKNkUWX0Fm3BiEYdzOS2sHDUVOQ8TZqDXH9et3DlXCYtOKchcaE74 W6zc1McvUQg2PO0Y9bffH7U5ZAaBn6bz3HtCkaZ9ixwPKhNqV9qJmRU434ISXM2EdjiG +cCw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id e23si8180638edy.578.2020.05.12.07.59.41; Tue, 12 May 2020 08:00:05 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730484AbgELOz3 (ORCPT + 99 others); Tue, 12 May 2020 10:55:29 -0400 Received: from mga05.intel.com ([192.55.52.43]:29539 "EHLO mga05.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730411AbgELOzM (ORCPT ); Tue, 12 May 2020 10:55:12 -0400 IronPort-SDR: MF+rmYGRC+dONSs+Vi17H+Pu5DvRqEkFUTBIqZOmCm8D73MC0kwUWV8Jnkm9gq7dK+lF+a67dP ol6+44yLagnQ== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 May 2020 07:55:09 -0700 IronPort-SDR: 5BGt1Er0IEtYNiIdToDY6IItbQ969MpoNCRYRf5kJhQEEVwL8hvJwMQ8ky5czNTWq9AzNYRJ+f peoXAgVRONWw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.73,384,1583222400"; d="scan'208";a="371587823" Received: from yyu32-desk.sc.intel.com ([143.183.136.146]) by fmsmga001.fm.intel.com with ESMTP; 12 May 2020 07:55:08 -0700 From: Yu-cheng Yu To: linux-kernel@vger.kernel.org, x86@kernel.org, "H. Peter Anvin" , Thomas Gleixner , Ingo Molnar , Dave Hansen , Tony Luck , Andy Lutomirski , Borislav Petkov , Rik van Riel , "Ravi V. Shankar" , Sebastian Andrzej Siewior , Fenghua Yu , Peter Zijlstra Cc: Yu-cheng Yu Subject: [PATCH v4 07/10] x86/fpu/xstate: Update copy_kernel_to_xregs_err() for XSAVES supervisor states Date: Tue, 12 May 2020 07:54:41 -0700 Message-Id: <20200512145444.15483-8-yu-cheng.yu@intel.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200512145444.15483-1-yu-cheng.yu@intel.com> References: <20200512145444.15483-1-yu-cheng.yu@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The function copy_kernel_to_xregs_err() uses XRSTOR, which can work with standard or compacted format without supervisor xstates. However, when supervisor xstates are present, XRSTORS must be used. Fix it by using XRSTORS when XSAVES is enabled. I also considered if there were additional cases where XRSTOR might be mistakenly called instead of XRSTORS. There are only three XRSTOR sites in kernel: 1. copy_kernel_to_xregs_booting(), already switches between XRSTOR and XRSTORS based on X86_FEATURE_XSAVES. 2. copy_user_to_xregs(), which *needs* XRSTOR because it is copying from userspace and must never copy supervisor state with XRSTORS. 3. copy_kernel_to_xregs_err() mistakenly used XRSTOR only. Fixed it. Signed-off-by: Yu-cheng Yu Reviewed-by: Dave Hansen --- arch/x86/include/asm/fpu/internal.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/arch/x86/include/asm/fpu/internal.h b/arch/x86/include/asm/fpu/internal.h index a42fcb4b690d..42159f45bf9c 100644 --- a/arch/x86/include/asm/fpu/internal.h +++ b/arch/x86/include/asm/fpu/internal.h @@ -400,7 +400,10 @@ static inline int copy_kernel_to_xregs_err(struct xregs_state *xstate, u64 mask) u32 hmask = mask >> 32; int err; - XSTATE_OP(XRSTOR, xstate, lmask, hmask, err); + if (static_cpu_has(X86_FEATURE_XSAVES)) + XSTATE_OP(XRSTORS, xstate, lmask, hmask, err); + else + XSTATE_OP(XRSTOR, xstate, lmask, hmask, err); return err; } -- 2.21.0