Received: by 2002:a25:6193:0:0:0:0:0 with SMTP id v141csp775146ybb; Sat, 28 Mar 2020 09:46:23 -0700 (PDT) X-Google-Smtp-Source: ADFU+vt3FkjFUsCzYR/XEZm/7uFqmaDf5jbGqvAdXVcvW/zID7rTz+mx+uJOWtm58m2GFjvaA4vi X-Received: by 2002:aca:5444:: with SMTP id i65mr2667710oib.101.1585413983559; Sat, 28 Mar 2020 09:46:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1585413983; cv=none; d=google.com; s=arc-20160816; b=tq3IOMfRgWBVThS0fbR/g7zCnaXSxM/Ez+X1Av49L4M6xkbGcjrN/CYs8Wdob70jMj GDhblDejVu7t/l3d7ObEe1r9YTXVouJIJTBRGtomJYu997f0dzVhD5QMDBXpuhRbKzXE v19MRMPXIEbZwtxwNGkPb+6G7TJ6SXEffQw8pGF38yS2XAohbMjfscBGbiz13yuhlfrj w6yhOC7pV1cHwaAYp31XpEz5gb6CPLnqUWK3NEKlkqS/y3fHhVPD5FdoIunOeNASSu4o MczJX5gBx3XS/zMucmlDEXHWmr/vT2MqDtl5nDk5S35jrmteG6mnaKS2r5wC6pi7rXBE EAVw== 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=LgkvIk7TIuPFzwgARO8zCZtGr9SiErrcYV3mYk0aXKk=; b=u+tFTXgkEwx8wLpQjKJ9FuuaMzm4fiDJH+hpjEZSdT+l9z8vmMIzyW8ZeYNl+UC8hk Harl0jrvgbjjScMYDltjlfFy5jyRPXsV4unbDDDmRq2no3VdrlOQzPKqfFAzTTWQKDcV +Z4pTXe64yo3NjJk7Ij2c48UHHYMRrJAedf9dXGz/HbPW3iUKvidjIRj13sfcFFhcGPZ d4S0Bk1fgho44lOg5NOuehEjTJAZi0Lkckps/+yy8U+v7WTYlTA2aPQR593Te7mO0JaD A+d1cyrA12awVTbB3qV9KFERhiM4A7Upo72oSqZH5hQoaBUsgoi4Vxi37DPruJ1w0LIc zv2A== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 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. [209.132.180.67]) by mx.google.com with ESMTP id q11si1925197otm.263.2020.03.28.09.46.10; Sat, 28 Mar 2020 09:46:23 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 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 S1728043AbgC1Qo1 (ORCPT + 99 others); Sat, 28 Mar 2020 12:44:27 -0400 Received: from mga14.intel.com ([192.55.52.115]:39985 "EHLO mga14.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727943AbgC1QoA (ORCPT ); Sat, 28 Mar 2020 12:44:00 -0400 IronPort-SDR: Y6d+gUy+3Bp2adGnbRJ6ZJYz70kPa9vMKtTKcQSlgyv/NGfJF1X5NhpkdPCnSJDVEaVBDHhMu1 SqKZKSkUZukw== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 Mar 2020 09:43:58 -0700 IronPort-SDR: 3GjHtvYxUcR37wws4I31U+pMTMz9hl2AmF25bYj135Qbbqb+c9iRIwzrwx8lu/YUndhyR+jOiB IAiWSwVHeBow== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.72,317,1580803200"; d="scan'208";a="447771178" Received: from yyu32-desk.sc.intel.com ([143.183.136.146]) by fmsmga005.fm.intel.com with ESMTP; 28 Mar 2020 09:43:58 -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 v3 07/10] x86/fpu/xstate: Update copy_kernel_to_xregs_err() for XSAVES supervisor states Date: Sat, 28 Mar 2020 09:43:04 -0700 Message-Id: <20200328164307.17497-8-yu-cheng.yu@intel.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200328164307.17497-1-yu-cheng.yu@intel.com> References: <20200328164307.17497-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 in this patch. 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