linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: "Michael Kerrisk (man-pages)" <mtk.manpages@gmail.com>
To: Dave Hansen <dave@sr71.net>, linux-kernel@vger.kernel.org
Cc: mtk.manpages@gmail.com, linux-mm@kvack.org, x86@kernel.org,
	linux-api@vger.kernel.org, linux-arch@vger.kernel.org,
	aarcange@redhat.com, akpm@linux-foundation.org, jack@suse.cz,
	kirill.shutemov@linux.intel.com, n-horiguchi@ah.jp.nec.com,
	torvalds@linux-foundation.org
Subject: Re: [PATCH 00/32] x86: Memory Protection Keys (v7)
Date: Thu, 24 Dec 2015 12:37:28 +0100	[thread overview]
Message-ID: <567BD8F8.2090800@gmail.com> (raw)
In-Reply-To: <20151214190542.39C4886D@viggo.jf.intel.com>

Hi Dave,

On 12/14/2015 08:05 PM, Dave Hansen wrote:
> Memory Protection Keys for User pages is a CPU feature which will
> first appear on Skylake Servers, but will also be supported on
> future non-server parts (there is also a QEMU implementation).  It
> provides a mechanism for enforcing page-based protections, but
> without requiring modification of the page tables when an
> application changes protection domains.  See the Documentation/
> patch for more details.

You've arbitrarily CCed this mail and one other patch in the 
series to linux-api@. This makes the series hard to review
unless one is subscribed to the LKML firehose. Please, for
future iterations of this series, CC the entire patchset to
linux-api@.

Thanks,

Michael


> This set enables for two things in the end:
> 1. Allows "execute-only" memory
> 2. Enables KVM to run Protection-Key-enabled guests
> 
> Changes from v6:
>  * fix up ??'s showing up in in smaps' VmFlags field
>  * added execute-only support
>  * removed all the new syscalls from this set.  We can discuss
>    them in detail after this is merged.
> 
> Changes from v5:
> 
>  * make types in read_pkru() u32's, not ints
>  * rework VM_* bits to avoid using __ffsl() and clean up
>    vma_pkey()
>  * rework pte_allows_gup() to use p??_val() instead of passing
>    around p{te,md,ud}_t types.
>  * Fix up some inconsistent bool vs. int usage
>  * corrected name of ARCH_VM_PKEY_FLAGS in patch description
>  * remove NR_PKEYS... config option.  Just define it directly
> 
> Changes from v4:
> 
>  * Made "allow setting of XSAVE state" safe if we got preempted
>    between when we saved our FPU state and when we restore it.
>    (I would appreciate a look from Ingo on this patch).
>  * Fixed up a few things from Thomas's latest comments: splt up
>    siginfo in to x86 and generic, removed extra 'eax' variable
>    in rdpkru function, reworked vm_flags assignment, reworded
>    a comment in pte_allows_gup()
>  * Add missing DISABLED/REQUIRED_MASK14 in cpufeature.h
>  * Added comment about compile optimization in fault path
>  * Left get_user_pages_locked() alone.  Andrea thinks we need it.
> 
> Changes from RFCv3:
> 
>  * Added 'current' and 'foreign' variants of get_user_pages() to
>    help indicate whether protection keys should be enforced.
>    Thanks to Jerome Glisse for pointing out this issue.
>  * Added "allocation" and set/get system calls so that we can do
>    management of proection keys in the kernel.  This opens the
>    door to use of specific protection keys for kernel use in the
>    future, such as for execute-only memory.
>  * Removed the kselftest code for the moment.  It will be
>    submitted separately.
> 
> Thanks Ingo and Thomas for most of these):
> Changes from RFCv2 (Thanks Ingo and Thomas for most of these):
> 
>  * few minor compile warnings
>  * changed 'nopku' interaction with cpuid bits.  Now, we do not
>    clear the PKU cpuid bit, we just skip enabling it.
>  * changed __pkru_allows_write() to also check access disable bit
>  * removed the unused write_pkru()
>  * made si_pkey a u64 and added some patch description details.
>    Also made it share space in siginfo with MPX and clarified
>    comments.
>  * give some real text for the Processor Trace xsave state
>  * made vma_pkey() less ugly (and much more optimized actually)
>  * added SEGV_PKUERR to copy_siginfo_to_user()
>  * remove page table walk when filling in si_pkey, added some
>    big fat comments about it being inherently racy.
>  * added self test code
> 
> This code is not runnable to anyone outside of Intel unless they
> have some special hardware or a fancy simulator.  There is a qemu
> model to emulate the feature, but it is not currently implemented
> fully enough to be usable.  If you are interested in running this
> for real, please get in touch with me.  Hardware is available to a
> very small but nonzero number of people.
> 
> This set is also available here:
> 
> 	git://git.kernel.org/pub/scm/linux/kernel/git/daveh/x86-pkeys.git pkeys-v018
> 
> === diffstat ===
> 
> Dave Hansen (32):
>       mm, gup: introduce concept of "foreign" get_user_pages()
>       x86, fpu: add placeholder for Processor Trace XSAVE state
>       x86, pkeys: Add Kconfig option
>       x86, pkeys: cpuid bit definition
>       x86, pkeys: define new CR4 bit
>       x86, pkeys: add PKRU xsave fields and data structure(s)
>       x86, pkeys: PTE bits for storing protection key
>       x86, pkeys: new page fault error code bit: PF_PK
>       x86, pkeys: store protection in high VMA flags
>       x86, pkeys: arch-specific protection bits
>       x86, pkeys: pass VMA down in to fault signal generation code
>       signals, pkeys: notify userspace about protection key faults
>       x86, pkeys: fill in pkey field in siginfo
>       x86, pkeys: add functions to fetch PKRU
>       mm: factor out VMA fault permission checking
>       x86, mm: simplify get_user_pages() PTE bit handling
>       x86, pkeys: check VMAs and PTEs for protection keys
>       mm: add gup flag to indicate "foreign" mm access
>       x86, pkeys: optimize fault handling in access_error()
>       x86, pkeys: differentiate instruction fetches
>       x86, pkeys: dump PKRU with other kernel registers
>       x86, pkeys: dump PTE pkey in /proc/pid/smaps
>       x86, pkeys: add Kconfig prompt to existing config option
>       x86, pkeys: actually enable Memory Protection Keys in CPU
>       mm, multi-arch: pass a protection key in to calc_vm_flag_bits()
>       x86, pkeys: add arch_validate_pkey()
>       x86: separate out LDT init from context init
>       x86, fpu: allow setting of XSAVE state
>       x86, pkeys: allow kernel to modify user pkey rights register
>       x86, pkeys: create an x86 arch_calc_vm_prot_bits() for VMA flags
>       x86, pkeys: execute-only support
>       x86, pkeys: Documentation
> 
>  Documentation/kernel-parameters.txt         |   3 +
>  Documentation/x86/protection-keys.txt       |  27 +++
>  arch/mips/mm/gup.c                          |   3 +-
>  arch/powerpc/include/asm/mman.h             |   5 +-
>  arch/powerpc/include/asm/mmu_context.h      |  12 ++
>  arch/s390/include/asm/mmu_context.h         |  12 ++
>  arch/s390/mm/gup.c                          |   3 +-
>  arch/sh/mm/gup.c                            |   2 +-
>  arch/sparc/mm/gup.c                         |   2 +-
>  arch/unicore32/include/asm/mmu_context.h    |  12 ++
>  arch/x86/Kconfig                            |  16 ++
>  arch/x86/include/asm/cpufeature.h           |  56 +++---
>  arch/x86/include/asm/disabled-features.h    |  13 ++
>  arch/x86/include/asm/fpu/internal.h         |   2 +
>  arch/x86/include/asm/fpu/types.h            |  12 ++
>  arch/x86/include/asm/fpu/xstate.h           |   4 +-
>  arch/x86/include/asm/mmu_context.h          |  85 ++++++++-
>  arch/x86/include/asm/pgtable.h              |  38 ++++
>  arch/x86/include/asm/pgtable_types.h        |  34 +++-
>  arch/x86/include/asm/pkeys.h                |  34 ++++
>  arch/x86/include/asm/required-features.h    |   5 +
>  arch/x86/include/asm/special_insns.h        |  22 +++
>  arch/x86/include/uapi/asm/mman.h            |  22 +++
>  arch/x86/include/uapi/asm/processor-flags.h |   2 +
>  arch/x86/kernel/cpu/common.c                |  42 +++++
>  arch/x86/kernel/fpu/core.c                  |  63 +++++++
>  arch/x86/kernel/fpu/xstate.c                | 185 +++++++++++++++++++-
>  arch/x86/kernel/ldt.c                       |   4 +-
>  arch/x86/kernel/process_64.c                |   2 +
>  arch/x86/kernel/setup.c                     |   9 +
>  arch/x86/mm/Makefile                        |   2 +
>  arch/x86/mm/fault.c                         | 171 +++++++++++++++---
>  arch/x86/mm/gup.c                           |  46 +++--
>  arch/x86/mm/mpx.c                           |   4 +-
>  arch/x86/mm/pkeys.c                         | 101 +++++++++++
>  drivers/char/agp/frontend.c                 |   2 +-
>  drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c     |   4 +-
>  drivers/gpu/drm/i915/i915_gem_userptr.c     |   2 +-
>  drivers/gpu/drm/radeon/radeon_ttm.c         |   4 +-
>  drivers/gpu/drm/via/via_dmablit.c           |   3 +-
>  drivers/infiniband/core/umem.c              |   2 +-
>  drivers/infiniband/core/umem_odp.c          |   8 +-
>  drivers/infiniband/hw/mthca/mthca_memfree.c |   3 +-
>  drivers/infiniband/hw/qib/qib_user_pages.c  |   3 +-
>  drivers/infiniband/hw/usnic/usnic_uiom.c    |   2 +-
>  drivers/iommu/amd_iommu_v2.c                |   8 +-
>  drivers/media/pci/ivtv/ivtv-udma.c          |   4 +-
>  drivers/media/pci/ivtv/ivtv-yuv.c           |  10 +-
>  drivers/media/v4l2-core/videobuf-dma-sg.c   |   3 +-
>  drivers/misc/sgi-gru/grufault.c             |   3 +-
>  drivers/scsi/st.c                           |   2 -
>  drivers/staging/android/ashmem.c            |   4 +-
>  drivers/video/fbdev/pvr2fb.c                |   4 +-
>  drivers/virt/fsl_hypervisor.c               |   5 +-
>  fs/exec.c                                   |   8 +-
>  fs/proc/task_mmu.c                          |  14 ++
>  include/asm-generic/mm_hooks.h              |  12 ++
>  include/linux/mm.h                          |  60 +++++--
>  include/linux/mman.h                        |   6 +-
>  include/linux/pkeys.h                       |  33 ++++
>  include/uapi/asm-generic/siginfo.h          |  17 +-
> 
> Cc: linux-api@vger.kernel.org
> Cc: linux-arch@vger.kernel.org
> Cc: aarcange@redhat.com
> Cc: akpm@linux-foundation.org
> Cc: jack@suse.cz
> Cc: kirill.shutemov@linux.intel.com
> Cc: linux-api@vger.kernel.org
> Cc: linux-arch@vger.kernel.org
> Cc: n-horiguchi@ah.jp.nec.com
> Cc: x86@kernel.org
> Cc: torvalds@linux-foundation.org
> --
> To unsubscribe from this list: send the line "unsubscribe linux-api" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 


-- 
Michael Kerrisk
Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/
Linux/UNIX System Programming Training: http://man7.org/training/

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

      parent reply	other threads:[~2015-12-24 11:37 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-12-14 19:05 [PATCH 00/32] x86: Memory Protection Keys (v7) Dave Hansen
2015-12-14 19:05 ` [PATCH 01/32] mm, gup: introduce concept of "foreign" get_user_pages() Dave Hansen
2016-01-05 10:51   ` Vlastimil Babka
2016-01-06 17:43     ` Dave Hansen
2015-12-14 19:05 ` [PATCH 02/32] x86, fpu: add placeholder for Processor Trace XSAVE state Dave Hansen
2015-12-14 19:05 ` [PATCH 03/32] x86, pkeys: Add Kconfig option Dave Hansen
2015-12-14 19:05 ` [PATCH 04/32] x86, pkeys: cpuid bit definition Dave Hansen
2015-12-14 19:05 ` [PATCH 05/32] x86, pkeys: define new CR4 bit Dave Hansen
2015-12-14 19:05 ` [PATCH 06/32] x86, pkeys: add PKRU xsave fields and data structure(s) Dave Hansen
2015-12-14 19:05 ` [PATCH 07/32] x86, pkeys: PTE bits for storing protection key Dave Hansen
2015-12-14 19:05 ` [PATCH 08/32] x86, pkeys: new page fault error code bit: PF_PK Dave Hansen
2015-12-14 19:06 ` [PATCH 09/32] x86, pkeys: store protection in high VMA flags Dave Hansen
2015-12-14 19:06 ` [PATCH 10/32] x86, pkeys: arch-specific protection bits Dave Hansen
2015-12-14 19:06 ` [PATCH 11/32] x86, pkeys: pass VMA down in to fault signal generation code Dave Hansen
2015-12-14 19:06 ` [PATCH 12/32] signals, pkeys: notify userspace about protection key faults Dave Hansen
2015-12-14 19:06 ` [PATCH 13/32] x86, pkeys: fill in pkey field in siginfo Dave Hansen
2015-12-14 19:06 ` [PATCH 14/32] x86, pkeys: add functions to fetch PKRU Dave Hansen
2015-12-14 19:56   ` Thomas Gleixner
2015-12-14 19:06 ` [PATCH 15/32] mm: factor out VMA fault permission checking Dave Hansen
2015-12-14 19:06 ` [PATCH 16/32] x86, mm: simplify get_user_pages() PTE bit handling Dave Hansen
2015-12-14 19:56   ` Thomas Gleixner
2015-12-14 19:06 ` [PATCH 17/32] x86, pkeys: check VMAs and PTEs for protection keys Dave Hansen
2015-12-14 19:06 ` [PATCH 18/32] mm: add gup flag to indicate "foreign" mm access Dave Hansen
2015-12-14 19:06 ` [PATCH 19/32] x86, pkeys: optimize fault handling in access_error() Dave Hansen
2015-12-14 19:06 ` [PATCH 20/32] x86, pkeys: differentiate instruction fetches Dave Hansen
2015-12-14 19:06 ` [PATCH 21/32] x86, pkeys: dump PKRU with other kernel registers Dave Hansen
2015-12-14 19:06 ` [PATCH 22/32] x86, pkeys: dump PTE pkey in /proc/pid/smaps Dave Hansen
2016-01-05 13:32   ` Vlastimil Babka
2016-01-06 17:46     ` Dave Hansen
2015-12-14 19:06 ` [PATCH 23/32] x86, pkeys: add Kconfig prompt to existing config option Dave Hansen
2015-12-14 19:06 ` [PATCH 24/32] x86, pkeys: actually enable Memory Protection Keys in CPU Dave Hansen
2015-12-14 20:00   ` Thomas Gleixner
2015-12-14 19:06 ` [PATCH 25/32] mm, multi-arch: pass a protection key in to calc_vm_flag_bits() Dave Hansen
2015-12-14 19:06 ` [PATCH 26/32] x86, pkeys: add arch_validate_pkey() Dave Hansen
2015-12-14 19:06 ` [PATCH 27/32] x86: separate out LDT init from context init Dave Hansen
2015-12-14 19:06 ` [PATCH 28/32] x86, fpu: allow setting of XSAVE state Dave Hansen
2015-12-14 19:06 ` [PATCH 29/32] x86, pkeys: allow kernel to modify user pkey rights register Dave Hansen
2015-12-14 19:06 ` [PATCH 30/32] x86, pkeys: create an x86 arch_calc_vm_prot_bits() for VMA flags Dave Hansen
2015-12-14 19:06 ` [PATCH 31/32] x86, pkeys: execute-only support Dave Hansen
2015-12-14 20:05   ` Kees Cook
2015-12-14 23:37     ` Dave Hansen
2015-12-14 23:39       ` Andy Lutomirski
2015-12-14 23:41         ` Kees Cook
2015-12-14 23:44         ` Dave Hansen
2015-12-14 23:47           ` Andy Lutomirski
2015-12-15  0:26             ` Dave Hansen
2015-12-14 23:39       ` Kees Cook
2015-12-14 19:06 ` [PATCH 32/32] x86, pkeys: Documentation Dave Hansen
2015-12-24 11:37 ` Michael Kerrisk (man-pages) [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=567BD8F8.2090800@gmail.com \
    --to=mtk.manpages@gmail.com \
    --cc=aarcange@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=dave@sr71.net \
    --cc=jack@suse.cz \
    --cc=kirill.shutemov@linux.intel.com \
    --cc=linux-api@vger.kernel.org \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=n-horiguchi@ah.jp.nec.com \
    --cc=torvalds@linux-foundation.org \
    --cc=x86@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).