Received: by 10.223.185.116 with SMTP id b49csp2445680wrg; Mon, 5 Mar 2018 03:04:13 -0800 (PST) X-Google-Smtp-Source: AG47ELto4Zh9x7SKzmNlmVcf5Dk5HMGG8j6MwQAHZeqXK7bHPhZXgNlYsPi3pU+rK1AScATBRELP X-Received: by 10.98.58.3 with SMTP id h3mr15002011pfa.178.1520247852908; Mon, 05 Mar 2018 03:04:12 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1520247852; cv=none; d=google.com; s=arc-20160816; b=LCuNJCGr0pdYhwHyUlvljqiGFL88uG9BYD75OWflN9n6C17LBvL+9O2nuGeA7vlI1h mXZLMB1aX11zD435px8C8N1X99EQRbPCwndG24XFTykbk1vVaKNmP0OST670tm8s5D7M pUF6sIs4/Bid6dBhCMSN/WMcFDUM1sniNc+Vjh944KwX45s9Rruq1r7TQPA1Wub0dPiY 5XDZvZ4D/l7wJ/hVgtjJzX6gd1WyfejFveD7lbjUVPAPJTb5RLsLhpyKtz7LVa2mbkGT wu5WosoUnqeVt1roASOAPyFLPIgux4Ho05jD1CTtCQQiosSkYLTMQWHSPw4TgZbH6ESG OOeQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature:arc-authentication-results; bh=hoLXwpH6HeYT4QiejW444GuAIUvUoqegLhUT/HT6Mi4=; b=p+TsCOocC/NTqdqMHU3YRPe6AbghJB6oscWyL7sATLTRvd+REaSRbrspqd7mN5mGal tFyHdnlTQ5US5iuT91zjfmN1/eXn6tZP2i3uLH5OItP3PgBnNjmB4nq6BfvPk7++rBpU 3EqkgkalGvbZV3Y23+i2uYRTElqulKw3az8mQScdgL+hGwiJgk/EoZV78nOP3ge8DC4q uk9KBIga4BH8RcQHts+2Kpe/mBuuBoW5liUuaHFK1hLV1ptZgYkT2zxEfvRZPeF6nMb8 KXa+hnp3kl6+HLRCRWzoNqjWSyy+87+JHt5c26Rs7eZVZPrEiwOtZkVs4J2fwrWhe7Gy eNDw== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail (test mode) header.i=@8bytes.org header.s=mail-1 header.b=g2srU4uS; 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=8bytes.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id o32-v6si9121997pld.768.2018.03.05.03.03.57; Mon, 05 Mar 2018 03:04:12 -0800 (PST) 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=fail (test mode) header.i=@8bytes.org header.s=mail-1 header.b=g2srU4uS; 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=8bytes.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933846AbeCEK0Z (ORCPT + 99 others); Mon, 5 Mar 2018 05:26:25 -0500 Received: from 8bytes.org ([81.169.241.247]:54012 "EHLO theia.8bytes.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932985AbeCEK0K (ORCPT ); Mon, 5 Mar 2018 05:26:10 -0500 Received: by theia.8bytes.org (Postfix, from userid 1000) id 3D7B72A7; Mon, 5 Mar 2018 11:26:05 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=8bytes.org; s=mail-1; t=1520245565; bh=2kTEnijBpnTsYuVA1vms4saMF/QAfMqrdFZKhl/U54Q=; h=From:To:Cc:Subject:Date:From; b=g2srU4uSb58/U8k2UJ0bO54nAwGccQb23zhlRPL0R+9+LDj+Zk4C+bQXVDQZ5IxNZ mIBw8FBOQnIGoUGoNcJDObBET0qjIPvQm2MOmiXOOjApeHhXjJcO1LPRu3Wf1fts4T LRgDx2TPdUgaICz8CooyAG43aXa8736LBRTr+ONOsw4HJeP2aEBUk6IbUXQ0AgmtgN Ccfk+w9pJGSXff8w9oTTE8PKpQi7mG24HOYsKJGn8X2RnEuSzhLUKavjioxmo0jh8L n5dd9Tlz27zVokjJF3XrZlZ1DAh2SEw6KJB28V/PeiCoAcKXWXcljoBhWkmgAhzuho +XqZjsFFum4sw== From: Joerg Roedel To: Thomas Gleixner , Ingo Molnar , "H . Peter Anvin" Cc: x86@kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Linus Torvalds , Andy Lutomirski , Dave Hansen , Josh Poimboeuf , Juergen Gross , Peter Zijlstra , Borislav Petkov , Jiri Kosina , Boris Ostrovsky , Brian Gerst , David Laight , Denys Vlasenko , Eduardo Valentin , Greg KH , Will Deacon , aliguori@amazon.com, daniel.gruss@iaik.tugraz.at, hughd@google.com, keescook@google.com, Andrea Arcangeli , Waiman Long , Pavel Machek , jroedel@suse.de, joro@8bytes.org Subject: [PATCH 00/34 v3] PTI support for x32 Date: Mon, 5 Mar 2018 11:25:29 +0100 Message-Id: <1520245563-8444-1-git-send-email-joro@8bytes.org> X-Mailer: git-send-email 2.7.4 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi, here is an updated version of my PTI patches for x86-32. I worked in the review comments and fixed a few bugs that were found during review of v2. In particular, the changes to v2 are: * Switched from movsb to movsl for stack copy * Simplified sysexit path to not do a full pt_regs copy, copies now only 2 dwords to entry stack * Renamed pti_set_user_pgd() to pti_set_user_pgtbl() * Added a warning in case someone boots a 32 bit kernel on a PCIE capable machine * Added switch to user-cr3 to the paranoid exit path in case we entered the kernel from kernel-mode with user-cr3 * Simplified the debug handler now that all its special cases are handled in the stack/cr3-switch code * Fixed PGD_PAE_PHYS_MASK for XEN-PV Here is a link to my post of the v2 patches: https://marc.info/?l=linux-kernel&m=151816914932088&w=2 And I also pushed these out to: git://git.kernel.org/pub/scm/linux/kernel/git/joro/linux.git pti-x32-v3 For easier testing. Please review. Thanks, Joerg Joerg Roedel (34): x86/asm-offsets: Move TSS_sp0 and TSS_sp1 to asm-offsets.c x86/entry/32: Rename TSS_sysenter_sp0 to TSS_entry_stack x86/entry/32: Load task stack from x86_tss.sp1 in SYSENTER handler x86/entry/32: Put ESPFIX code into a macro x86/entry/32: Unshare NMI return path x86/entry/32: Split off return-to-kernel path x86/entry/32: Restore segments before int registers x86/entry/32: Enter the kernel via trampoline stack x86/entry/32: Leave the kernel via trampoline stack x86/entry/32: Introduce SAVE_ALL_NMI and RESTORE_ALL_NMI x86/entry/32: Handle Entry from Kernel-Mode on Entry-Stack x86/entry/32: Simplify debug entry point x86/entry/32: Add PTI cr3 switches to NMI handler code x86/entry/32: Add PTI cr3 switch to non-NMI entry/exit points x86/pgtable: Rename pti_set_user_pgd to pti_set_user_pgtbl x86/pgtable/pae: Unshare kernel PMDs when PTI is enabled x86/pgtable/32: Allocate 8k page-tables when PTI is enabled x86/pgtable: Move pgdp kernel/user conversion functions to pgtable.h x86/pgtable: Move pti_set_user_pgtbl() to pgtable.h x86/pgtable: Move two more functions from pgtable_64.h to pgtable.h x86/mm/pae: Populate valid user PGD entries x86/mm/pae: Populate the user page-table with user pgd's x86/mm/legacy: Populate the user page-table with user pgd's x86/mm/pti: Add an overflow check to pti_clone_pmds() x86/mm/pti: Define X86_CR3_PTI_PCID_USER_BIT on x86_32 x86/mm/pti: Clone CPU_ENTRY_AREA on PMD level on x86_32 x86/mm/dump_pagetables: Define INIT_PGD x86/pgtable/pae: Use separate kernel PMDs for user page-table x86/ldt: Reserve address-space range on 32 bit for the LDT x86/ldt: Define LDT_END_ADDR x86/ldt: Split out sanity check in map_ldt_struct() x86/ldt: Enable LDT user-mapping for PAE x86/pti: Allow CONFIG_PAGE_TABLE_ISOLATION for x86_32 x86/mm/pti: Add Warning when booting on a PCIE capable CPU arch/x86/entry/entry_32.S | 668 ++++++++++++++++++++++------ arch/x86/include/asm/mmu_context.h | 4 - arch/x86/include/asm/pgtable-2level.h | 9 + arch/x86/include/asm/pgtable-2level_types.h | 3 + arch/x86/include/asm/pgtable-3level.h | 7 + arch/x86/include/asm/pgtable-3level_types.h | 6 +- arch/x86/include/asm/pgtable.h | 88 ++++ arch/x86/include/asm/pgtable_32_types.h | 9 +- arch/x86/include/asm/pgtable_64.h | 89 +--- arch/x86/include/asm/pgtable_64_types.h | 4 + arch/x86/include/asm/pgtable_types.h | 28 +- arch/x86/include/asm/processor-flags.h | 8 +- arch/x86/include/asm/switch_to.h | 6 +- arch/x86/kernel/asm-offsets.c | 5 + arch/x86/kernel/asm-offsets_32.c | 2 +- arch/x86/kernel/asm-offsets_64.c | 2 - arch/x86/kernel/cpu/common.c | 5 +- arch/x86/kernel/head_32.S | 20 +- arch/x86/kernel/ldt.c | 137 ++++-- arch/x86/kernel/process.c | 2 - arch/x86/kernel/process_32.c | 10 +- arch/x86/mm/dump_pagetables.c | 21 +- arch/x86/mm/pgtable.c | 105 ++++- arch/x86/mm/pti.c | 42 +- security/Kconfig | 2 +- 25 files changed, 963 insertions(+), 319 deletions(-) -- 2.7.4