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 > Cc: Khalid Aziz > --- > 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