Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1410368

[PATCH 0/8] System Calls for Memory Protection Keys

From Dave Hansen <dave@sr71.net>
Newsgroups linux.kernel
Subject [PATCH 0/8] System Calls for Memory Protection Keys
Date 2016-05-31 17:30 +0200
Message-ID <rETMd-4rJ-3@gated-at.bofh.it> (permalink)
Organization linux.* mail to news gateway

Show all headers | View raw


Are there any concerns with merging these into the x86 tree so
that they go upstream for 4.8?

--

Memory Protection Keys for User pages (pkeys) is a CPU feature
which will first appear on Skylake Servers, but will also be
supported on future non-server parts.  It provides a mechanism
for enforcing page-based protections, but without requiring
modification of the page tables when an application changes
wishes to change permissions.

Patches to implement execute-only mapping support using pkeys
were merged in to 4.6.  But, to do anything else useful with
pkeys, an application needs to be able to set the pkey field in
the PTE (obviously has to be done in-kernel) and make changes to
the "rights" register (using unprivileged instructions).

An application also needs to have an an allocator for the keys
themselves.  If two different parts of an application both want
to protect their data with pkeys, they first need to know which
key to use for their individual purposes.

This set introduces 5 system calls, in 3 logical groups:

1. PTE pkey setting (sys_pkey_mprotect(), patches #1-3)
2. Key allocation (sys_pkey_alloc() / sys_pkey_free(), patch #4)
3. Rights register manipulation (sys_pkey_set/get(), patch #5)

These patches build on top of "core" pkeys support already in
4.6, and are based on 4.6 itself with the compat siginfo fix
patches applied (includes MPX selftests).

I have manpages written for some of these syscalls, and have
had multiple rounds of reviews on the manpages list.

This set is also available here (including a fix for the compat
signal handler code):

	git://git.kernel.org/pub/scm/linux/kernel/git/daveh/x86-pkeys.git pkeys-v034

I've written a set of unit tests for these interfaces, which is
available as the last patch in the series and integrated in to
kselftests.

Note: this is based on a plain 4.6 kernel and will have a minor
merge conflict in the x86 selftests makefile with the new
MPX selftest if those get merged first.

=== diffstat ===

Dave Hansen (8):
      x86, pkeys: add fault handling for PF_PK page fault bit
      mm: implement new pkey_mprotect() system call
      x86, pkeys: make mprotect_key() mask off additional vm_flags
      x86: wire up mprotect_key() system call
      x86, pkeys: allocation/free syscalls
      x86, pkeys: add pkey set/get syscalls
      pkeys: add details of system call use to Documentation/
      x86, pkeys: add self-tests

 Documentation/x86/protection-keys.txt         |   63 +
 arch/alpha/include/uapi/asm/mman.h            |    5 +
 arch/mips/include/uapi/asm/mman.h             |    5 +
 arch/parisc/include/uapi/asm/mman.h           |    5 +
 arch/x86/entry/syscalls/syscall_32.tbl        |    5 +
 arch/x86/entry/syscalls/syscall_64.tbl        |    5 +
 arch/x86/include/asm/mmu.h                    |    8 +
 arch/x86/include/asm/mmu_context.h            |   25 +-
 arch/x86/include/asm/pkeys.h                  |   80 +-
 arch/x86/kernel/fpu/xstate.c                  |   73 +-
 arch/x86/mm/fault.c                           |    9 +
 arch/x86/mm/pkeys.c                           |   38 +-
 arch/xtensa/include/uapi/asm/mman.h           |    5 +
 include/linux/pkeys.h                         |   39 +-
 include/uapi/asm-generic/mman-common.h        |    5 +
 mm/mprotect.c                                 |  134 +-
 tools/testing/selftests/x86/Makefile          |    2 +-
 tools/testing/selftests/x86/pkey-helpers.h    |  187 +++
 tools/testing/selftests/x86/protection_keys.c | 1249 +++++++++++++++++
 19 files changed, 1912 insertions(+), 30 deletions(-)

Cc: linux-api@vger.kernel.org
Cc: linux-arch@vger.kernel.org
Cc: linux-mm@kvack.org
Cc: x86@kernel.org
Cc: torvalds@linux-foundation.org
Cc: akpm@linux-foundation.org

Back to linux.kernel | Previous | NextNext in thread | Find similar | Unroll thread


Thread

[PATCH 0/8] System Calls for Memory Protection Keys Dave Hansen <dave@sr71.net> - 2016-05-31 17:30 +0200
  [PATCH 5/8] x86, pkeys: allocation/free syscalls Dave Hansen <dave@sr71.net> - 2016-05-31 17:30 +0200
    Re: [PATCH 5/8] x86, pkeys: allocation/free syscalls Jonathan Corbet <corbet@lwn.net> - 2016-06-01 20:40 +0200
      Re: [PATCH 5/8] x86, pkeys: allocation/free syscalls Dave Hansen <dave@sr71.net> - 2016-06-01 21:40 +0200
        Re: [PATCH 5/8] x86, pkeys: allocation/free syscalls "Michael Kerrisk (man-pages)" <mtk.manpages@gmail.com> - 2016-06-02 02:20 +0200
          Re: [PATCH 5/8] x86, pkeys: allocation/free syscalls Dave Hansen <dave@sr71.net> - 2016-06-02 02:20 +0200
            Re: [PATCH 5/8] x86, pkeys: allocation/free syscalls "Michael Kerrisk (man-pages)" <mtk.manpages@gmail.com> - 2016-06-03 02:30 +0200
              Re: [PATCH 5/8] x86, pkeys: allocation/free syscalls Dave Hansen <dave@sr71.net> - 2016-06-03 19:30 +0200
                Re: [PATCH 5/8] x86, pkeys: allocation/free syscalls "Michael Kerrisk (man-pages)" <mtk.manpages@gmail.com> - 2016-06-03 21:50 +0200
    Re: [PATCH 5/8] x86, pkeys: allocation/free syscalls Arnd Bergmann <arnd@arndb.de> - 2016-06-02 13:50 +0200
      Re: [PATCH 5/8] x86, pkeys: allocation/free syscalls Dave Hansen <dave@sr71.net> - 2016-06-02 23:20 +0200
  [PATCH 4/8] x86: wire up mprotect_key() system call Dave Hansen <dave@sr71.net> - 2016-05-31 17:30 +0200
  [PATCH 3/8] x86, pkeys: make mprotect_key() mask off additional vm_flags Dave Hansen <dave@sr71.net> - 2016-05-31 17:30 +0200
  [PATCH 7/8] pkeys: add details of system call use to Documentation/ Dave Hansen <dave@sr71.net> - 2016-05-31 17:30 +0200
    Re: [PATCH 7/8] pkeys: add details of system call use to  Documentation/ Jonathan Corbet <corbet@lwn.net> - 2016-06-01 18:50 +0200
      Re: [PATCH 7/8] pkeys: add details of system call use to  Documentation/ Dave Hansen <dave@sr71.net> - 2016-06-01 18:50 +0200
        Re: [PATCH 7/8] pkeys: add details of system call use to  Documentation/ Jonathan Corbet <corbet@lwn.net> - 2016-06-01 19:00 +0200
          Re: [PATCH 7/8] pkeys: add details of system call use to  Documentation/ Dave Hansen <dave@sr71.net> - 2016-06-01 19:20 +0200
  [PATCH 6/8] x86, pkeys: add pkey set/get syscalls Dave Hansen <dave@sr71.net> - 2016-05-31 17:30 +0200
  [PATCH 2/8] mm: implement new pkey_mprotect() system call Dave Hansen <dave@sr71.net> - 2016-05-31 17:40 +0200
  [PATCH 1/8] x86, pkeys: add fault handling for PF_PK page fault bit Dave Hansen <dave@sr71.net> - 2016-05-31 17:40 +0200

csiph-web