Received: by 2002:ac0:950c:0:0:0:0:0 with SMTP id f12csp2301248imc; Tue, 12 Mar 2019 10:56:30 -0700 (PDT) X-Google-Smtp-Source: APXvYqwm08ViwPoZA7d0gowrjbxJ9KqxiKKf1VOWmRzyFfj/xz0HPIWdUG0n0R5SWXAesiSW5pT6 X-Received: by 2002:a17:902:8f81:: with SMTP id z1mr41929400plo.265.1552413390842; Tue, 12 Mar 2019 10:56:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1552413390; cv=none; d=google.com; s=arc-20160816; b=XRRVdAZT3xyTNv+H7tU2HsCiBlHHWAtTD5rv6rrpNRp1pZ+19aL0bX2kqv5nUT5btQ q5LHGvSZ60ErLN9FMo+D2eEkPVfXDf+3hxfrDqaSL2aHBFxH3qviN2o52eT3X1zhwoX/ ODsQZ/swKjNG819KtQQ9aQOvmVyn4i3QcrYIn3MuGS9K3FuPAPXzmt55U2mka5JpEzYV qGVWzF+8yoJssL7RJ2lrjnVqkSYiF9IdBY7nXnlGlOQJxdo3aW5cSEtBIGG2jFVeBosu SiN/ebcuePo/fqPJUqs+bQZLNRNr8zmPuXDB4NdnyIJRgR2wxlMlbke2oE2g/a31kG+d cf1w== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=bInh/D/DibRZHj9yVWAdpqvRHBHIGM87CilQuIxUzyg=; b=lPr58SMzbPSEsbhLMaq3195rwkGkMTu7ngMC998fmXWXj8EDhb+vQJ6ZlZgganmPBr 6axaY18W94vjQjl1FoAz4Kkt4/Bv3eldgf9pjkbZh4p/iB5tEasmu1XpVeHv9ilbA9RD 1QwKShG5VT7f1uXYGKmDVTepNOnL/3dTTP6IQuPu+ZF4/NlWUO5UFL226ELy9zqO98lc WbCnOJ4MFjZXrRinVLsoAhwqjkJeToyshTHZj775/lqc6JgvAoGOvud8xuSQxVD5PK9N 5KRj+7wunkLuCe8sWwhV9PWADIRQOXc8LRowjGbSEfvyIiH6nPk7bj74y1ncRN2ZCrdj nQUw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=qrQpNZou; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id o188si8466338pfb.66.2019.03.12.10.56.14; Tue, 12 Mar 2019 10:56:30 -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; dkim=pass header.i=@kernel.org header.s=default header.b=qrQpNZou; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728741AbfCLRyE (ORCPT + 99 others); Tue, 12 Mar 2019 13:54:04 -0400 Received: from mail.kernel.org ([198.145.29.99]:52460 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728267AbfCLRON (ORCPT ); Tue, 12 Mar 2019 13:14:13 -0400 Received: from localhost (unknown [104.133.8.98]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 6BF0E2087C; Tue, 12 Mar 2019 17:14:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1552410852; bh=Q0HDGasTqbXYm/mIkkFN/LWAfAhO2HK7+2iZqtjJz/Y=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=qrQpNZouwtm0WiE4WnKhgv1I5yQvXWeJscuZUwITSfpcNnTdcYUlGQHV5VOmgjnqJ oDvlakP0P4albjJzqGjQ2QEQpIGXNPXEyDtcuA4q4gn/x2u1bo9wOFDa+lHFEqVYFN G0woZyZ1YeseoQ6owQoSHOkJs7/PnlVL8LYtdO8c= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Wei Huang , Thomas Gleixner , "Kirill A. Shutemov" , bp@alien8.de, hpa@zytor.com, Sasha Levin Subject: [PATCH 4.19 047/149] x86/boot/compressed/64: Set EFER.LME=1 in 32-bit trampoline before returning to long mode Date: Tue, 12 Mar 2019 10:07:45 -0700 Message-Id: <20190312170353.730094181@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190312170349.421581206@linuxfoundation.org> References: <20190312170349.421581206@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review X-Patchwork-Hint: ignore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.19-stable review patch. If anyone has any objections, please let me know. ------------------ [ Upstream commit b677dfae5aa197afc5191755a76a8727ffca538a ] In some old AMD KVM implementation, guest's EFER.LME bit is cleared by KVM when the hypervsior detects that the guest sets CR0.PG to 0. This causes the guest OS to reboot when it tries to return from 32-bit trampoline code because the CPU is in incorrect state: CR4.PAE=1, CR0.PG=1, CS.L=1, but EFER.LME=0. As a precaution, set EFER.LME=1 as part of long mode activation procedure. This extra step won't cause any harm when Linux is booted on a bare-metal machine. Signed-off-by: Wei Huang Signed-off-by: Thomas Gleixner Acked-by: Kirill A. Shutemov Cc: bp@alien8.de Cc: hpa@zytor.com Link: https://lkml.kernel.org/r/20190104054411.12489-1-wei@redhat.com Signed-off-by: Sasha Levin --- arch/x86/boot/compressed/head_64.S | 8 ++++++++ arch/x86/boot/compressed/pgtable.h | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/arch/x86/boot/compressed/head_64.S b/arch/x86/boot/compressed/head_64.S index 64037895b085..f105ae8651c9 100644 --- a/arch/x86/boot/compressed/head_64.S +++ b/arch/x86/boot/compressed/head_64.S @@ -600,6 +600,14 @@ ENTRY(trampoline_32bit_src) leal TRAMPOLINE_32BIT_PGTABLE_OFFSET(%ecx), %eax movl %eax, %cr3 3: + /* Set EFER.LME=1 as a precaution in case hypervsior pulls the rug */ + pushl %ecx + movl $MSR_EFER, %ecx + rdmsr + btsl $_EFER_LME, %eax + wrmsr + popl %ecx + /* Enable PAE and LA57 (if required) paging modes */ movl $X86_CR4_PAE, %eax cmpl $0, %edx diff --git a/arch/x86/boot/compressed/pgtable.h b/arch/x86/boot/compressed/pgtable.h index 91f75638f6e6..6ff7e81b5628 100644 --- a/arch/x86/boot/compressed/pgtable.h +++ b/arch/x86/boot/compressed/pgtable.h @@ -6,7 +6,7 @@ #define TRAMPOLINE_32BIT_PGTABLE_OFFSET 0 #define TRAMPOLINE_32BIT_CODE_OFFSET PAGE_SIZE -#define TRAMPOLINE_32BIT_CODE_SIZE 0x60 +#define TRAMPOLINE_32BIT_CODE_SIZE 0x70 #define TRAMPOLINE_32BIT_STACK_END TRAMPOLINE_32BIT_SIZE -- 2.19.1