Received: by 10.192.165.156 with SMTP id m28csp784307imm; Mon, 16 Apr 2018 08:39:41 -0700 (PDT) X-Google-Smtp-Source: AIpwx49V+svI+Xd4RJ9UtTPGPhnHAcKFzuZHYFy2JmNy1DLTrl3/3SI/utSqBy7SvvfgsysTNXDK X-Received: by 10.167.128.2 with SMTP id j2mr21783710pfi.126.1523893181043; Mon, 16 Apr 2018 08:39:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1523893181; cv=none; d=google.com; s=arc-20160816; b=O8sOH2SSZANQAg5bb//WkNU+sQGaIBapj61yvc8yBty31X0OamY9o/cuSPNcp7xZrm QNwWdKSd78baT5/jKJRwC80LoNKUqBmM1Mbw8dTPb7Mkq2UmwDJnX2/Tz8uEMNkIN4gv ALurRlU4YokXwP2BPpY0zU04L5LrLdoL1PrhebHDp6yubop6pibNiqzB3vfvLFnWuTtj ImO7F21M510zM26NJYFahhU+HS8TrPPEOd9ZasrjWR4tKs89Lc4dhnhNsCGg7zDy9xFL Ax3z1u/wTMTbH5BXolTl+nKqPDGoX6D38SS+IWSsoKQ3hd6VO5MTywQS7800/bVIizK1 0Tqg== 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=bT5VN6sXmW/aToSPpapvqXrhndgLgv4KNR1chTNXeTU=; b=QqPW1i4309PeL/MuoJMoa0dH9tHPuK3dSFPJ6XSgOTZ/cc41fmmb++ViBOYtFNUoYy CNMCfVgZD+uxBqhprHx8s2Ek4Qqilm1GRHY6xSO7csNfhnVn2Y5+veDBTUbTyr9Hzl+6 Tr/Wy+1lZ8QsL2Cu89Yg2zKZ449jn/fnRlonR5/zBybzTDm7/ygmoOundBOmmPIxFw/2 JROxJSiGthX93GQDwSQNlvMtG6p8szMvlKUYqlFHch2ZyeQr1L9wPeQ3gucIIK68rIgW hwueIbA5msRdn2VFkARoLVzbJExs5rSlDyKLcMuHs05N/GFgV7/X/JlkmD5cIfcPP8sr qBnQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail (test mode) header.i=@8bytes.org header.s=mail-1 header.b=WVib7+5S; 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 94-v6si12259083ple.56.2018.04.16.08.39.26; Mon, 16 Apr 2018 08:39:41 -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=fail (test mode) header.i=@8bytes.org header.s=mail-1 header.b=WVib7+5S; 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 S1752144AbeDPPZk (ORCPT + 99 others); Mon, 16 Apr 2018 11:25:40 -0400 Received: from 8bytes.org ([81.169.241.247]:35618 "EHLO theia.8bytes.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750709AbeDPPZi (ORCPT ); Mon, 16 Apr 2018 11:25:38 -0400 Received: by theia.8bytes.org (Postfix, from userid 1000) id 6168429B; Mon, 16 Apr 2018 17:25:36 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=8bytes.org; s=mail-1; t=1523892336; bh=ephcB6GkafYbsyVy+i5emcDIy0muhsCv1dXRkW7HlxE=; h=From:To:Cc:Subject:Date:From; b=WVib7+5SQoe51DdQm7vY96mBD4CMPa2uppDx+Lm7msdQ5k4A422F5R9Rx4GIJUIfK hsqo7fF5Iev1NY+DPoWXKijtiF+R6V1qfEQL6Z7i0tfh7/QNbqKpXv0G8YjuSB5J+A WXs+3De0cmc3Qu/UjryY3A+3yrFqNpj4adFeNg9GrJq+b5DpF+PbxAx3GSkR16rA3E Nox9EdujxWSqbbK6whC8kgMrRW0YrVlPW63oJzpL7vkf7sOaNy3vXT6E2Dj9xpFjSP RcxAn34i6o9w30AJ6cLanFfHAJxP6dw1nrlFjXRM8x52kaS+OQN/dnLi5xSa1GNYYe viHxUfe0gyEnA== 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 , "David H . Gutteridge" , jroedel@suse.de, joro@8bytes.org Subject: [PATCH 00/35 v5] PTI support for x32 Date: Mon, 16 Apr 2018 17:24:48 +0200 Message-Id: <1523892323-14741-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 the 5th iteration of my PTI enablement patches for x86-32. There are no real changes between v4 and v5 besides that I rebased the whole patch-set to v4.17-rc1 and resolved the numerous conflicts that this caused. Two separate fixes came up since the last post and I sent them out separatly. One is already in v4.17-rc1 (commit e3e288121408) and the other was sent a few hours ago (https://lkml.org/lkml/2018/4/16/230). I pushed the rebased patches together with the mentioned fix to: git://git.kernel.org/pub/scm/linux/kernel/git/joro/linux.git pti-x32-v5 for easier testing. I tested this version again with my load-test of running perf-top/various x86-selftests/kernel-compile in a loop for a couple of hours. This showed no issues. I also briefly tested a 64bit kernel and this also worked as expected. Previous versions of these patches can be found at: * For v4 Post : https://marc.info/?l=linux-kernel&m=152122860630236&w=2 Git : git://git.kernel.org/pub/scm/linux/kernel/git/joro/linux.git pti-x32-v4 * For v3: Post : https://marc.info/?l=linux-kernel&m=152024559419876&w=2 Git : git://git.kernel.org/pub/scm/linux/kernel/git/joro/linux.git pti-x32-v3 * For v2: Post : https://marc.info/?l=linux-kernel&m=151816914932088&w=2 Git : git://git.kernel.org/pub/scm/linux/kernel/git/joro/linux.git pti-x32-v2 Please review. Thanks, Joerg Joerg Roedel (35): 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: 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/32: Use tss.sp1 as cpu_current_top_of_stack x86/entry/32: Add PTI cr3 switch to non-NMI entry/exit points x86/entry/32: Add PTI cr3 switches to NMI handler code 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 PCID capable CPU x86/entry/32: Add debug code to check entry/exit cr3 arch/x86/Kconfig.debug | 12 + arch/x86/entry/entry_32.S | 640 +++++++++++++++++++++++----- arch/x86/include/asm/mmu_context.h | 5 - 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 | 87 ++++ arch/x86/include/asm/pgtable_32.h | 2 - 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 | 3 + arch/x86/include/asm/pgtable_types.h | 28 +- arch/x86/include/asm/processor-flags.h | 8 +- arch/x86/include/asm/processor.h | 4 - arch/x86/include/asm/switch_to.h | 6 +- arch/x86/include/asm/thread_info.h | 2 - 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 | 9 +- 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 | 4 +- arch/x86/mm/dump_pagetables.c | 21 +- arch/x86/mm/pgtable.c | 105 ++++- arch/x86/mm/pti.c | 42 +- security/Kconfig | 2 +- 29 files changed, 967 insertions(+), 304 deletions(-) -- 2.7.4