On 01/04/2017 11:46 PM, Khalid Aziz wrote:
> ADI is a new feature supported on sparc M7 and newer processors to allow
> hardware to catch rogue accesses to memory. ADI is supported for data
> fetches only and not instruction fetches. An app can enable ADI on its
> data pages, set version tags on them and use versioned addresses to
> access the data pages. Upper bits of the address contain the version
> tag. On M7 processors, upper four bits (bits 63-60) contain the version
> tag. If a rogue app attempts to access ADI enabled data pages, its
> access is blocked and processor generates an exception.
> 
> This patch extends mprotect to enable ADI (TSTATE.mcde), enable/disable
> MCD (Memory Corruption Detection) on selected memory ranges, enable
> TTE.mcd in PTEs, return ADI parameters to userspace and save/restore ADI
> version tags on page swap out/in.  It also adds handlers for all traps
> related to MCD. ADI is not enabled by default for any task. A task must
> explicitly enable ADI on a memory range and set version tag for ADI to
> be effective for the task.
> 
> Signed-off-by: Khalid Aziz <khalid.a...@oracle.com>
> Cc: Khalid Aziz <kha...@gonehiking.org>
> ---
> v2:
>       - Fixed a build error
> 
> v3:
>       - Removed CONFIG_SPARC_ADI
>       - Replaced prctl commands with mprotect
>       - Added auxiliary vectors for ADI parameters
>       - Enabled ADI for swappable pages
> 
>  Documentation/sparc/adi.txt             | 239 
> ++++++++++++++++++++++++++++++++
>  arch/sparc/include/asm/adi.h            |   6 +
>  arch/sparc/include/asm/adi_64.h         |  46 ++++++
>  arch/sparc/include/asm/elf_64.h         |   8 ++
>  arch/sparc/include/asm/hugetlb.h        |  13 ++
>  arch/sparc/include/asm/hypervisor.h     |   2 +
>  arch/sparc/include/asm/mman.h           |  40 +++++-
>  arch/sparc/include/asm/mmu_64.h         |   2 +
>  arch/sparc/include/asm/mmu_context_64.h |  32 +++++
>  arch/sparc/include/asm/pgtable_64.h     |  97 ++++++++++++-
>  arch/sparc/include/asm/ttable.h         |  10 ++
>  arch/sparc/include/asm/uaccess_64.h     | 120 +++++++++++++++-
>  arch/sparc/include/uapi/asm/asi.h       |   5 +
>  arch/sparc/include/uapi/asm/auxvec.h    |   8 ++
>  arch/sparc/include/uapi/asm/mman.h      |   2 +
>  arch/sparc/include/uapi/asm/pstate.h    |  10 ++
>  arch/sparc/kernel/Makefile              |   1 +
>  arch/sparc/kernel/adi_64.c              |  93 +++++++++++++
>  arch/sparc/kernel/entry.h               |   3 +
>  arch/sparc/kernel/head_64.S             |   1 +
>  arch/sparc/kernel/mdesc.c               |   4 +
>  arch/sparc/kernel/process_64.c          |  21 +++
>  arch/sparc/kernel/sun4v_mcd.S           |  16 +++
>  arch/sparc/kernel/traps_64.c            | 142 ++++++++++++++++++-
>  arch/sparc/kernel/ttable_64.S           |   6 +-
>  arch/sparc/mm/gup.c                     |  37 +++++
>  arch/sparc/mm/tlb.c                     |  28 ++++
>  arch/x86/kernel/signal_compat.c         |   2 +-
>  include/asm-generic/pgtable.h           |   5 +
>  include/linux/mm.h                      |   2 +
>  include/uapi/asm-generic/siginfo.h      |   5 +-
>  mm/memory.c                             |   2 +-
>  mm/rmap.c                               |   4 +-

I haven't actually reviewed the code and looked at why you need
set_swp_pte_at() function, but the code that add the generic version of
this function need to be separated from the rest of the patch. Also,
given the size of this patch, I suspect the rest also need to be broken
into more patches.

Jerome

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to