Skip to content
  1. Mar 20, 2018
  2. Mar 19, 2018
    • Andy Lutomirski's avatar
      selftests/x86/ptrace_syscall: Fix for yet more glibc interference · 4b0b37d4
      Andy Lutomirski authored
      
      
      glibc keeps getting cleverer, and my version now turns raise() into
      more than one syscall.  Since the test relies on ptrace seeing an
      exact set of syscalls, this breaks the test.  Replace raise(SIGSTOP)
      with syscall(SYS_tgkill, ...) to force glibc to get out of our way.
      
      Signed-off-by: default avatarAndy Lutomirski <luto@kernel.org>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: linux-kselftest@vger.kernel.org
      Cc: stable@vger.kernel.org
      Link: http://lkml.kernel.org/r/bc80338b453afa187bc5f895bd8e2c8d6e264da2.1521300271.git.luto@kernel.org
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      4b0b37d4
  3. Mar 17, 2018
  4. Mar 16, 2018
  5. Mar 15, 2018
  6. Mar 14, 2018
    • Josh Poimboeuf's avatar
      jump_label: Fix sparc64 warning · af1d830b
      Josh Poimboeuf authored
      The kbuild test robot reported the following warning on sparc64:
      
        kernel/jump_label.c: In function '__jump_label_update':
        kernel/jump_label.c:376:51: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
             WARN_ONCE(1, "can't patch jump_label at %pS", (void *)entry->code);
      
      On sparc64, the jump_label entry->code field is of type u32, but
      pointers are 64-bit.  Silence the warning by casting entry->code to an
      unsigned long before casting it to a pointer.  This is also what the
      sparc jump label code does.
      
      Fixes: dc1dd184
      
       ("jump_label: Warn on failed jump_label patching attempt")
      Reported-by: default avatarkbuild test robot <fengguang.wu@intel.com>
      Signed-off-by: default avatarJosh Poimboeuf <jpoimboe@redhat.com>
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Jason Baron <jbaron@akamai.com>
      Cc: Borislav Petkov <bp@suse.de>
      Cc: "David S . Miller" <davem@davemloft.net>
      Link: https://lkml.kernel.org/r/c966fed42be6611254a62d46579ec7416548d572.1521041026.git.jpoimboe@redhat.com
      af1d830b
    • Andy Whitcroft's avatar
      x86/speculation, objtool: Annotate indirect calls/jumps for objtool on 32-bit kernels · a14bff13
      Andy Whitcroft authored
      In the following commit:
      
        9e0e3c51
      
       ("x86/speculation, objtool: Annotate indirect calls/jumps for objtool")
      
      ... we added annotations for CALL_NOSPEC/JMP_NOSPEC on 64-bit x86 kernels,
      but we did not annotate the 32-bit path.
      
      Annotate it similarly.
      
      Signed-off-by: default avatarAndy Whitcroft <apw@canonical.com>
      Acked-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
      Cc: Andy Lutomirski <luto@kernel.org>
      Cc: Arjan van de Ven <arjan@linux.intel.com>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: Dan Williams <dan.j.williams@intel.com>
      Cc: Dave Hansen <dave.hansen@linux.intel.com>
      Cc: David Woodhouse <dwmw2@infradead.org>
      Cc: David Woodhouse <dwmw@amazon.co.uk>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Cc: Josh Poimboeuf <jpoimboe@redhat.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Link: http://lkml.kernel.org/r/20180314112427.22351-1-apw@canonical.com
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      a14bff13
    • Andy Lutomirski's avatar
      x86/vm86/32: Fix POPF emulation · b5069782
      Andy Lutomirski authored
      
      
      POPF would trap if VIP was set regardless of whether IF was set.  Fix it.
      
      Suggested-by: default avatarStas Sergeev <stsp@list.ru>
      Reported-by: default avatarBart Oldeman <bartoldeman@gmail.com>
      Signed-off-by: default avatarAndy Lutomirski <luto@kernel.org>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: Brian Gerst <brgerst@gmail.com>
      Cc: Denys Vlasenko <dvlasenk@redhat.com>
      Cc: H. Peter Anvin <hpa@zytor.com>
      Cc: Josh Poimboeuf <jpoimboe@redhat.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: stable@vger.kernel.org
      Fixes: 5ed92a8a
      
       ("x86/vm86: Use the normal pt_regs area for vm86")
      Link: http://lkml.kernel.org/r/ce95f40556e7b2178b6bc06ee9557827ff94bd28.1521003603.git.luto@kernel.org
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      b5069782
    • Andy Lutomirski's avatar
      selftests/x86/entry_from_vm86: Add test cases for POPF · 78393fdd
      Andy Lutomirski authored
      
      
      POPF is currently broken -- add tests to catch the error.  This
      results in:
      
         [RUN]	POPF with VIP set and IF clear from vm86 mode
         [INFO]	Exited vm86 mode due to STI
         [FAIL]	Incorrect return reason (started at eip = 0xd, ended at eip = 0xf)
      
      because POPF currently fails to check IF before reporting a pending
      interrupt.
      
      This patch also makes the FAIL message a bit more informative.
      
      Reported-by: default avatarBart Oldeman <bartoldeman@gmail.com>
      Signed-off-by: default avatarAndy Lutomirski <luto@kernel.org>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: Brian Gerst <brgerst@gmail.com>
      Cc: Denys Vlasenko <dvlasenk@redhat.com>
      Cc: H. Peter Anvin <hpa@zytor.com>
      Cc: Josh Poimboeuf <jpoimboe@redhat.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Stas Sergeev <stsp@list.ru>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: stable@vger.kernel.org
      Link: http://lkml.kernel.org/r/a16270b5cfe7832d6d00c479d0f871066cbdb52b.1521003603.git.luto@kernel.org
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      78393fdd
    • Andy Lutomirski's avatar
      selftests/x86/entry_from_vm86: Exit with 1 if we fail · 327d53d0
      Andy Lutomirski authored
      
      
      Fix a logic error that caused the test to exit with 0 even if test
      cases failed.
      
      Signed-off-by: default avatarAndy Lutomirski <luto@kernel.org>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: Brian Gerst <brgerst@gmail.com>
      Cc: Denys Vlasenko <dvlasenk@redhat.com>
      Cc: H. Peter Anvin <hpa@zytor.com>
      Cc: Josh Poimboeuf <jpoimboe@redhat.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Stas Sergeev <stsp@list.ru>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: bartoldeman@gmail.com
      Cc: stable@vger.kernel.org
      Link: http://lkml.kernel.org/r/b1cc37144038958a469c8f70a5f47a6a5638636a.1521003603.git.luto@kernel.org
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      327d53d0
  7. Mar 13, 2018
    • Linus Torvalds's avatar
      Merge tag 'nfs-for-4.16-4' of git://git.linux-nfs.org/projects/trondmy/linux-nfs · fc6eabbb
      Linus Torvalds authored
      Pull NFS client bugfixes from Trond Myklebust:
       "Hightlights include the following stable fixes:
      
         - NFS: Fix an incorrect type in struct nfs_direct_req
      
         - pNFS: Prevent the layout header refcount going to zero in
           pnfs_roc()
      
         - NFS: Fix unstable write completion"
      
      * tag 'nfs-for-4.16-4' of git://git.linux-nfs.org/projects/trondmy/linux-nfs:
        NFS: Fix unstable write completion
        pNFS: Prevent the layout header refcount going to zero in pnfs_roc()
        NFS: Fix an incorrect type in struct nfs_direct_req
      fc6eabbb
  8. Mar 12, 2018
    • Andy Shevchenko's avatar
      x86/platform/intel-mid: Add special handling for ACPI HW reduced platforms · 02428742
      Andy Shevchenko authored
      
      
      When switching to ACPI HW reduced platforms we still want to initialize timers.
      Override x86_init.acpi.reduced_hw_init to achieve that.
      
      Signed-off-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
      Reviewed-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
      Cc: Eric Biederman <ebiederm@xmission.com>
      Cc: Juergen Gross <jgross@suse.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Rafael J . Wysocki <rafael.j.wysocki@intel.com>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: linux-acpi@vger.kernel.org
      Link: http://lkml.kernel.org/r/20180220180506.65523-3-andriy.shevchenko@linux.intel.com
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      02428742
    • Andy Shevchenko's avatar
      ACPI, x86/boot: Introduce the ->reduced_hw_early_init() ACPI callback · 81b53e5f
      Andy Shevchenko authored
      
      
      Some ACPI hardware reduced platforms need to initialize certain devices
      defined by the ACPI hardware specification even though in principle
      those devices should not be present in an ACPI hardware reduced platform.
      
      To allow that to happen, make it possible to override the generic
      x86_init callbacks and provide a custom legacy_pic value, add a new
      ->reduced_hw_early_init() callback to struct x86_init_acpi and make
      acpi_reduced_hw_init() use it.
      
      Signed-off-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
      Reviewed-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
      Cc: Eric Biederman <ebiederm@xmission.com>
      Cc: Juergen Gross <jgross@suse.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Rafael J . Wysocki <rafael.j.wysocki@intel.com>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: linux-acpi@vger.kernel.org
      Link: http://lkml.kernel.org/r/20180220180506.65523-2-andriy.shevchenko@linux.intel.com
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      81b53e5f
    • Andy Shevchenko's avatar
      ACPI, x86/boot: Split out acpi_generic_reduce_hw_init() and export · 50beba07
      Andy Shevchenko authored
      
      
      This is a preparation patch to allow override the hardware reduced
      initialization on ACPI enabled platforms.
      
      No functional change intended.
      
      Signed-off-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
      Reviewed-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
      Cc: Eric Biederman <ebiederm@xmission.com>
      Cc: Juergen Gross <jgross@suse.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Rafael J . Wysocki <rafael.j.wysocki@intel.com>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: linux-acpi@vger.kernel.org
      Link: http://lkml.kernel.org/r/20180220180506.65523-1-andriy.shevchenko@linux.intel.com
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      50beba07
    • Kirill A. Shutemov's avatar
      x86/pconfig: Provide defines and helper to run MKTME_KEY_PROG leaf · 24c51785
      Kirill A. Shutemov authored
      
      
      MKTME_KEY_PROG allows to manipulate MKTME keys in the CPU.
      
      Signed-off-by: default avatarKirill A. Shutemov <kirill.shutemov@linux.intel.com>
      Cc: Dave Hansen <dave.hansen@intel.com>
      Cc: Kai Huang <kai.huang@linux.intel.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Tom Lendacky <thomas.lendacky@amd.com>
      Cc: linux-mm@kvack.org
      Link: http://lkml.kernel.org/r/20180305162610.37510-6-kirill.shutemov@linux.intel.com
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      24c51785
    • Kirill A. Shutemov's avatar
      x86/pconfig: Detect PCONFIG targets · be7825c1
      Kirill A. Shutemov authored
      
      
      Intel PCONFIG targets are enumerated via new CPUID leaf 0x1b. This patch
      detects all supported targets of PCONFIG and implements helper to check
      if the target is supported.
      
      Signed-off-by: default avatarKirill A. Shutemov <kirill.shutemov@linux.intel.com>
      Cc: Dave Hansen <dave.hansen@intel.com>
      Cc: Kai Huang <kai.huang@linux.intel.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Tom Lendacky <thomas.lendacky@amd.com>
      Cc: linux-mm@kvack.org
      Link: http://lkml.kernel.org/r/20180305162610.37510-5-kirill.shutemov@linux.intel.com
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      be7825c1
    • Kirill A. Shutemov's avatar
      x86/tme: Detect if TME and MKTME is activated by BIOS · cb06d8e3
      Kirill A. Shutemov authored
      
      
      IA32_TME_ACTIVATE MSR (0x982) can be used to check if BIOS has enabled
      TME and MKTME. It includes which encryption policy/algorithm is selected
      for TME or available for MKTME. For MKTME, the MSR also enumerates how
      many KeyIDs are available.
      
      We would need to exclude KeyID bits from physical address bits.
      detect_tme() would adjust cpuinfo_x86::x86_phys_bits accordingly.
      
      We have to do this even if we are not going to use KeyID bits
      ourself. VM guests still have to know that these bits are not usable
      for physical address.
      
      Signed-off-by: default avatarKirill A. Shutemov <kirill.shutemov@linux.intel.com>
      Cc: Dave Hansen <dave.hansen@intel.com>
      Cc: Kai Huang <kai.huang@linux.intel.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Tom Lendacky <thomas.lendacky@amd.com>
      Cc: linux-mm@kvack.org
      Link: http://lkml.kernel.org/r/20180305162610.37510-3-kirill.shutemov@linux.intel.com
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      cb06d8e3
    • Ingo Molnar's avatar
    • Kirill A. Shutemov's avatar
      x86/cpufeatures: Add Intel PCONFIG cpufeature · 7958b224
      Kirill A. Shutemov authored
      
      
      CPUID.0x7.0x0:EDX[18] indicates whether Intel CPU support PCONFIG instruction.
      
      Signed-off-by: default avatarKirill A. Shutemov <kirill.shutemov@linux.intel.com>
      Cc: Dave Hansen <dave.hansen@intel.com>
      Cc: Kai Huang <kai.huang@linux.intel.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Tom Lendacky <thomas.lendacky@amd.com>
      Cc: linux-mm@kvack.org
      Link: http://lkml.kernel.org/r/20180305162610.37510-4-kirill.shutemov@linux.intel.com
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      7958b224
    • Kirill A. Shutemov's avatar
      x86/cpufeatures: Add Intel Total Memory Encryption cpufeature · 1da961d7
      Kirill A. Shutemov authored
      
      
      CPUID.0x7.0x0:ECX[13] indicates whether CPU supports Intel Total Memory
      Encryption.
      
      Signed-off-by: default avatarKirill A. Shutemov <kirill.shutemov@linux.intel.com>
      Cc: Dave Hansen <dave.hansen@intel.com>
      Cc: Kai Huang <kai.huang@linux.intel.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Tom Lendacky <thomas.lendacky@amd.com>
      Cc: linux-mm@kvack.org
      Link: http://lkml.kernel.org/r/20180305162610.37510-2-kirill.shutemov@linux.intel.com
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      1da961d7
    • Kirill A. Shutemov's avatar
      x86/boot/compressed/64: Handle 5-level paging boot if kernel is above 4G · 194a9749
      Kirill A. Shutemov authored
      
      
      This patch addresses a shortcoming in current boot process on machines
      that supports 5-level paging.
      
      If a bootloader enables 64-bit mode with 4-level paging, we might need to
      switch over to 5-level paging. The switching requires the disabling
      paging. It works fine if kernel itself is loaded below 4G.
      
      But if the bootloader put the kernel above 4G (not sure if anybody does
      this), we would lose control as soon as paging is disabled, because the
      code becomes unreachable to the CPU.
      
      This patch implements a trampoline in lower memory to handle this
      situation.
      
      We only need the memory for a very short time, until the main kernel
      image sets up own page tables.
      
      We go through the trampoline even if we don't have to: if we're already
      in 5-level paging mode or if we don't need to switch to it. This way the
      trampoline gets tested on every boot.
      
      Signed-off-by: default avatarKirill A. Shutemov <kirill.shutemov@linux.intel.com>
      Cc: Andy Lutomirski <luto@amacapital.net>
      Cc: Andy Lutomirski <luto@kernel.org>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: Borislav Petkov <bp@suse.de>
      Cc: Brian Gerst <brgerst@gmail.com>
      Cc: Cyrill Gorcunov <gorcunov@openvz.org>
      Cc: Denys Vlasenko <dvlasenk@redhat.com>
      Cc: H. Peter Anvin <hpa@zytor.com>
      Cc: Josh Poimboeuf <jpoimboe@redhat.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Matthew Wilcox <willy@infradead.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: linux-mm@kvack.org
      Link: http://lkml.kernel.org/r/20180312100246.89175-5-kirill.shutemov@linux.intel.com
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      194a9749
    • Kirill A. Shutemov's avatar
      x86/boot/compressed/64: Use page table in trampoline memory · 0a1756bd
      Kirill A. Shutemov authored
      
      
      If a bootloader enables 64-bit mode with 4-level paging, we might need to
      switch over to 5-level paging. The switching requires the disabling
      paging. It works fine if kernel itself is loaded below 4G.
      
      But if the bootloader put the kernel above 4G (i.e. in kexec() case),
      we would lose control as soon as paging is disabled, because the code
      becomes unreachable to the CPU.
      
      To handle the situation, we need a trampoline in lower memory that would
      take care of switching on 5-level paging.
      
      Apart from the trampoline code itself we also need a place to store
      top-level page table in lower memory as we don't have a way to load
      64-bit values into CR3 in 32-bit mode. We only really need 8 bytes there
      as we only use the very first entry of the page table. But we allocate a
      whole page anyway.
      
      This patch switches 32-bit code to use page table in trampoline memory.
      
      Signed-off-by: default avatarKirill A. Shutemov <kirill.shutemov@linux.intel.com>
      Cc: Andy Lutomirski <luto@amacapital.net>
      Cc: Andy Lutomirski <luto@kernel.org>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: Borislav Petkov <bp@suse.de>
      Cc: Brian Gerst <brgerst@gmail.com>
      Cc: Cyrill Gorcunov <gorcunov@openvz.org>
      Cc: Denys Vlasenko <dvlasenk@redhat.com>
      Cc: H. Peter Anvin <hpa@zytor.com>
      Cc: Josh Poimboeuf <jpoimboe@redhat.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Matthew Wilcox <willy@infradead.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: linux-mm@kvack.org
      Link: http://lkml.kernel.org/r/20180312100246.89175-4-kirill.shutemov@linux.intel.com
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      0a1756bd
    • Kirill A. Shutemov's avatar
      x86/boot/compressed/64: Use stack from trampoline memory · f7ff53e4
      Kirill A. Shutemov authored
      
      
      As the first step on using trampoline memory, let's make 32-bit code use
      stack there.
      
      Separate stack is required to return back from trampoline and we cannot
      user stack from 64-bit mode as it may be above 4G.
      
      Signed-off-by: default avatarKirill A. Shutemov <kirill.shutemov@linux.intel.com>
      Cc: Andy Lutomirski <luto@amacapital.net>
      Cc: Andy Lutomirski <luto@kernel.org>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: Borislav Petkov <bp@suse.de>
      Cc: Brian Gerst <brgerst@gmail.com>
      Cc: Cyrill Gorcunov <gorcunov@openvz.org>
      Cc: Denys Vlasenko <dvlasenk@redhat.com>
      Cc: H. Peter Anvin <hpa@zytor.com>
      Cc: Josh Poimboeuf <jpoimboe@redhat.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Matthew Wilcox <willy@infradead.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: linux-mm@kvack.org
      Link: http://lkml.kernel.org/r/20180312100246.89175-3-kirill.shutemov@linux.intel.com
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      f7ff53e4
    • Kirill A. Shutemov's avatar
      x86/boot/compressed/64: Make sure we have a 32-bit code segment · 7beebacc
      Kirill A. Shutemov authored
      
      
      When kernel starts in 64-bit mode we inherit the GDT from the bootloader.
      It may cause a problem if the GDT doesn't have a 32-bit code segment
      where we expect it to be.
      
      Load our own GDT with known segments.
      
      Signed-off-by: default avatarKirill A. Shutemov <kirill.shutemov@linux.intel.com>
      Cc: Andy Lutomirski <luto@amacapital.net>
      Cc: Andy Lutomirski <luto@kernel.org>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: Borislav Petkov <bp@suse.de>
      Cc: Brian Gerst <brgerst@gmail.com>
      Cc: Cyrill Gorcunov <gorcunov@openvz.org>
      Cc: Denys Vlasenko <dvlasenk@redhat.com>
      Cc: H. Peter Anvin <hpa@zytor.com>
      Cc: Josh Poimboeuf <jpoimboe@redhat.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Matthew Wilcox <willy@infradead.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: linux-mm@kvack.org
      Link: http://lkml.kernel.org/r/20180312100246.89175-2-kirill.shutemov@linux.intel.com
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      7beebacc
    • Kirill A. Shutemov's avatar
      x86/mm: Do not use paravirtualized calls in native_set_p4d() · a5b162b2
      Kirill A. Shutemov authored
      
      
      In 4-level paging mode, native_set_p4d() updates the entry in the top-level
      page table. With PTI, update to the top-level kernel page table requires
      update to the userspace copy of the table as well, using pti_set_user_pgd().
      
      native_set_p4d() uses p4d_val() and pgd_val() to convert types between
      p4d_t and pgd_t.
      
      p4d_val() and pgd_val() are paravirtualized and we must not use them in
      native helpers, as they crash the boot in paravirtualized environments.
      
      Replace p4d_val() and pgd_val() with native_p4d_val() and
      native_pgd_val() in native_set_p4d().
      
      Reported-by: default avatarFengguang Wu <fengguang.wu@intel.com>
      Signed-off-by: default avatarKirill A. Shutemov <kirill.shutemov@linux.intel.com>
      Cc: Andy Lutomirski <luto@kernel.org>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: Brian Gerst <brgerst@gmail.com>
      Cc: Denys Vlasenko <dvlasenk@redhat.com>
      Cc: H. Peter Anvin <hpa@zytor.com>
      Cc: Josh Poimboeuf <jpoimboe@redhat.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Fixes: 91f606a8
      
       ("x86/mm: Replace compile-time checks for 5-level paging with runtime-time checks")
      Link: http://lkml.kernel.org/r/20180305081641.4290-1-kirill.shutemov@linux.intel.com
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      a5b162b2
    • Baoquan He's avatar
      kdump, vmcoreinfo: Export pgtable_l5_enabled value · c100a583
      Baoquan He authored
      
      
      User-space utilities examining crash-kernels need to know if the
      crashed kernel was in 5-level paging mode or not.
      
      So write 'pgtable_l5_enabled' to vmcoreinfo, which covers these
      three cases:
      
        pgtable_l5_enabled == 0 when:
         - Compiled with !CONFIG_X86_5LEVEL
         - Compiled with CONFIG_X86_5LEVEL=y while CPU has no 'la57' flag
      
        pgtable_l5_enabled != 0 when:
         - Compiled with CONFIG_X86_5LEVEL=y and CPU has 'la57' flag
      
      Signed-off-by: default avatarBaoquan He <bhe@redhat.com>
      Acked-by: default avatarKirill A. Shutemov <kirill.shutemov@linux.intel.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: douly.fnst@cn.fujitsu.com
      Cc: dyoung@redhat.com
      Cc: ebiederm@xmission.com
      Cc: kirill.shutemov@linux.intel.com
      Cc: vgoyal@redhat.com
      Link: http://lkml.kernel.org/r/20180302051801.19594-1-bhe@redhat.com
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      c100a583
    • Kirill A. Shutemov's avatar
      x86/boot/compressed/64: Prepare new top-level page table for trampoline · e9d0e633
      Kirill A. Shutemov authored
      
      
      If trampoline code would need to switch between 4- and 5-level paging
      modes, we have to use a page table in trampoline memory.
      
      Having it in trampoline memory guarantees that it's below 4G and we can
      point CR3 to it from 32-bit trampoline code.
      
      We only use the page table if the desired paging mode doesn't match the
      mode we are in. Otherwise the page table is unused and trampoline code
      wouldn't touch CR3.
      
      For 4- to 5-level paging transition, we set up current (4-level paging)
      CR3 as the first and the only entry in a new top-level page table.
      
      For 5- to 4-level paging transition, copy page table pointed by first
      entry in the current top-level page table as our new top-level page
      table.
      
      If the page table is used by trampoline we would need to copy it to new
      page table outside trampoline and update CR3 before restoring trampoline
      memory.
      
      Tested-by: default avatarBorislav Petkov <bp@suse.de>
      Signed-off-by: default avatarKirill A. Shutemov <kirill.shutemov@linux.intel.com>
      Cc: Andy Lutomirski <luto@amacapital.net>
      Cc: Andy Shevchenko <andy.shevchenko@gmail.com>
      Cc: Cyrill Gorcunov <gorcunov@openvz.org>
      Cc: Eric Biederman <ebiederm@xmission.com>
      Cc: H. Peter Anvin <hpa@zytor.com>
      Cc: Juergen Gross <jgross@suse.com>
      Cc: Kees Cook <keescook@chromium.org>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Matthew Wilcox <willy@infradead.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: linux-mm@kvack.org
      Link: http://lkml.kernel.org/r/20180226180451.86788-6-kirill.shutemov@linux.intel.com
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      e9d0e633