Received: by 2002:a25:1985:0:0:0:0:0 with SMTP id 127csp4267195ybz; Tue, 28 Apr 2020 08:26:48 -0700 (PDT) X-Google-Smtp-Source: APiQypIisUaVG9lEWOHlOyRELbiUxOQXn8OxFYwVbyCWu/JBilisvirYD54gcqFrDndz2ek4yxv4 X-Received: by 2002:a17:906:1d4c:: with SMTP id o12mr25916560ejh.357.1588087608755; Tue, 28 Apr 2020 08:26:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1588087608; cv=none; d=google.com; s=arc-20160816; b=DQm8WZL9Qp1zAHtbNYuIPXaBp0ceHc95WnDprTrtWnBUaoS6XsUxGtA6KhWXQ/UWyL TV0JV/pf0kmTmWd66ZdnOpTUTWfBwCILJVvGZHi1iveOyLfN3rDggKEZzYMMGPUFLUZQ 8Ei4SJu6A5iu2p/Eskw9hoaBPQa4uChZunYNJ99fmZYufoJnfObN087F1X+eOrgNDtSC x04DITBL8ocD76kF3Nn13YcNRN3j5eqQDdyw+r3nqkpkudcDJOlT5FgtU5Q4jrKA6AL8 89eiOIn+QL8All4LbRPfwthK34rRZzYpttSbsRfo9sYPU6LRfJk7RWbCNzJYeeqpF6Kz d5eA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from; bh=1hMybPC/JdHLjCZe07w0p1BhhOS/rFalPw6g6Z5YSZA=; b=cFESTa5HMxCYLW3PyGQQlM1lM6Fu6LO8v3ubOajJTKfAegeiNCLLNvKvgZ+XoWgyvy HOW5dvMYyzDBDxnovuFPJvroZkDkv4Ag6NjaNZJ6t2IbKMg8LsvRYS+HkP6g74HhuMDI dJ/d2F19bSwJWbZFNNkSEj3qDl+2HeDwcPcUIeSe28w8+eOurhcmtVZpMrFchF2yVh4i mcDctvGjPGWCVIbZm95Wf2tvTlBQ+u+MuNONSBb2WkVRCvnU4ADn2FWayOw5KJga1Odo olML8V5jUFj0n3pVOFiJ+xODr5vpN07QlFId/oqpYc1rjhxizk2j2ckAM5xW/6WmQXOm +Vkw== 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=8bytes.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id t14si1717381edi.331.2020.04.28.08.26.18; Tue, 28 Apr 2020 08:26:48 -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=8bytes.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728235AbgD1PSA (ORCPT + 99 others); Tue, 28 Apr 2020 11:18:00 -0400 Received: from 8bytes.org ([81.169.241.247]:37386 "EHLO theia.8bytes.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728178AbgD1PRz (ORCPT ); Tue, 28 Apr 2020 11:17:55 -0400 Received: by theia.8bytes.org (Postfix, from userid 1000) id 732BFE06; Tue, 28 Apr 2020 17:17:44 +0200 (CEST) From: Joerg Roedel To: x86@kernel.org Cc: hpa@zytor.com, Andy Lutomirski , Dave Hansen , Peter Zijlstra , Thomas Hellstrom , Jiri Slaby , Dan Williams , Tom Lendacky , Juergen Gross , Kees Cook , David Rientjes , Cfir Cohen , Erdem Aktas , Masami Hiramatsu , Mike Stunes , Joerg Roedel , Joerg Roedel , linux-kernel@vger.kernel.org, kvm@vger.kernel.org, virtualization@lists.linux-foundation.org Subject: [PATCH v3 12/75] x86/boot/compressed/64: Switch to __KERNEL_CS after GDT is loaded Date: Tue, 28 Apr 2020 17:16:22 +0200 Message-Id: <20200428151725.31091-13-joro@8bytes.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200428151725.31091-1-joro@8bytes.org> References: <20200428151725.31091-1-joro@8bytes.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Joerg Roedel When the pre-decompression code loads its first GDT in startup_64, it is still running on the CS value of the previous GDT. In the case of SEV-ES this is the EFI GDT. To make exception handling work (especially IRET) the CPU needs to switch to a CS value in the current GDT, so jump to __KERNEL_CS after the first GDT is loaded. Signed-off-by: Joerg Roedel --- arch/x86/boot/compressed/head_64.S | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/arch/x86/boot/compressed/head_64.S b/arch/x86/boot/compressed/head_64.S index 4f7e6b84be07..6b11060c3a0f 100644 --- a/arch/x86/boot/compressed/head_64.S +++ b/arch/x86/boot/compressed/head_64.S @@ -393,6 +393,14 @@ SYM_CODE_START(startup_64) addq %rax, 2(%rax) lgdt (%rax) + /* Reload CS so IRET returns to a CS actually in the GDT */ + pushq $__KERNEL_CS + leaq .Lon_kernel_cs(%rip), %rax + pushq %rax + lretq + +.Lon_kernel_cs: + /* * paging_prepare() sets up the trampoline and checks if we need to * enable 5-level paging. -- 2.17.1