Received: by 2002:ac0:a5a6:0:0:0:0:0 with SMTP id m35-v6csp177124imm; Thu, 30 Aug 2018 11:10:25 -0700 (PDT) X-Google-Smtp-Source: ANB0VdZrjmu833V+XEb4VXvDokuA9Xgdgh0YXuUjnyKG9ggvJPn92kPsyiOKKL9bpqNDTMsgEg6o X-Received: by 2002:a17:902:6f10:: with SMTP id w16-v6mr11147507plk.216.1535652625447; Thu, 30 Aug 2018 11:10:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1535652625; cv=none; d=google.com; s=arc-20160816; b=sGE+oLu2Xw9ljC4jdCUQkoJSfeWS0JrglXdm0YCtkwHSSj30MU9Z7BeAO0RhE9tuyY wDAe9hojeaQUihcEF0O1uN+Ms8O2qhMIRLOrCRy9itC9h+ZRJIQfouds1Zpz9tJX3vTE 6h+SPxm56sTDsBsCUhF4JYPMcJ40iAV+00h/Rso+CIXMY5/sTxuJmNagXpjtYi5/56/1 os3XGP7rxXDm3GyGaMlUnkJB4G25dIFed7UuVl7Ez0Mo0Y676W4bxUxEInahodxspNb2 W6hUUdkuORBCR5WFg0YOesm5A9HvDEHbzISx1+6D4jvqa0heqLyr53DGUqg6yategrk4 ZoWA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:arc-authentication-results; bh=rTQsBjkLVKfV2r1lwTBcoo+YN8cKwhb1aQkKJUI3kMw=; b=mqBz3JvsVUT01FVubtB8/CWE+Ibcp5y04VchDYAiCZBnD2lB1BhHjAfznKqx5Xz6Hs POmXyqaybG0ne8vPzpO+hM54mDgVGY3Noj5UuwimrkzlKPChJqGe5KTg2+4Cdpt7T2Gx oAP0+C2ClhIPDl1XRnzn4UK4en95UIrg7Gbv82bcUxW6kCpDiWOxl9eMM2ULftS9JuR8 rspMntOfyWEEGSaU3V9di5vgeD0LtQfK98I5zNlmfUjJ8sCLe65vVwt3p/mAZJAY1JUn DEcFUpNdS/wlYXqXfnmcHPvRQfgcwBENcdGq/0yAjcN/NVFkOMl+pAYBLpMkH62LjDJF 5GPw== 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id u129-v6si7361386pfb.247.2018.08.30.11.10.09; Thu, 30 Aug 2018 11:10:25 -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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727813AbeH3WMR (ORCPT + 99 others); Thu, 30 Aug 2018 18:12:17 -0400 Received: from mx2.suse.de ([195.135.220.15]:49696 "EHLO mx1.suse.de" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727336AbeH3WMQ (ORCPT ); Thu, 30 Aug 2018 18:12:16 -0400 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id A8693AFD8; Thu, 30 Aug 2018 18:08:53 +0000 (UTC) Date: Thu, 30 Aug 2018 20:08:49 +0200 From: Joerg Roedel To: Guenter Roeck Cc: linux-kernel@vger.kernel.org, Thomas Gleixner , Michal Hocko , Andi Kleen , Linus Torvalds , x86@kernel.org, Dave Hansen , Pavel Machek Subject: Re: efi boot failures due to PTI with 32 bit builds and Intel CPUs Message-ID: <20180830180849.nmh646ehnolphq4v@suse.de> References: <20180829201659.GA29801@roeck-us.net> <20180830071951.dv6wgnn6ikfhh7yt@suse.de> <20180830113059.qj6yvw4ggktc7yex@suse.de> <915dca84-c98a-fc63-3210-b21dd926b3d4@roeck-us.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <915dca84-c98a-fc63-3210-b21dd926b3d4@roeck-us.net> User-Agent: NeoMutt/20170421 (1.8.2) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Aug 30, 2018 at 05:20:22AM -0700, Guenter Roeck wrote: > Excellent. > > In case it matters: I can use the same 32-bit efi image to boot a 64-bit kernel > without problems. Okay, I tracked it down. The 32-bit EFI code switches the CPU to the read-write version of the GDT which is not mapped in the user page-table. This obviously faults when the kernel entry/exit code restores the segment registers. Without a mapped GDT the #PF and #DF handlers also can't be started, so the machine triple-faults. Below diff fixes it for me, I'll send a proper patch tomorrow. diff --git a/arch/x86/platform/efi/efi_32.c b/arch/x86/platform/efi/efi_32.c index 324b93328b37..892edb4664fb 100644 --- a/arch/x86/platform/efi/efi_32.c +++ b/arch/x86/platform/efi/efi_32.c @@ -87,7 +87,7 @@ void __init efi_call_phys_epilog(pgd_t *save_pgd) { struct desc_ptr gdt_descr; - gdt_descr.address = (unsigned long)get_cpu_gdt_rw(0); + gdt_descr.address = (unsigned long)get_cpu_gdt_ro(0); gdt_descr.size = GDT_SIZE - 1; load_gdt(&gdt_descr);