From: Catalin Marinas <catalin.marinas@arm.com>
To: linux-arm-kernel@lists.infradead.org
Cc: linux-mm@kvack.org, linux-arch@vger.kernel.org,
Will Deacon <will@kernel.org>,
Dave P Martin <Dave.Martin@arm.com>,
Vincenzo Frascino <vincenzo.frascino@arm.com>,
Szabolcs Nagy <szabolcs.nagy@arm.com>,
Kevin Brodsky <kevin.brodsky@arm.com>,
Andrey Konovalov <andreyknvl@google.com>,
Peter Collingbourne <pcc@google.com>
Subject: [PATCH v4 00/26] arm64: Memory Tagging Extension user-space support
Date: Fri, 15 May 2020 18:15:46 +0100 [thread overview]
Message-ID: <20200515171612.1020-1-catalin.marinas@arm.com> (raw)
This is the fourth version (third version here [1]) of the series adding
user-space support for the ARMv8.5 Memory Tagging Extension ([2], [3]).
The patches are also available on this branch:
git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux devel/mte-v4
Changes in this version:
- Swap and suspend to disk support for saving/restoring tags.
- Deferred the tag zeroing from clear_page() to set_pte_at() to cope
with RAM filesystems that do not start from a zeroed page. The
copy_page() function was also optimised to only copy tags if the page
has been previously mapped as tagged (PROT_MTE). This mechanism
requires a new PG_arch_2 flag.
- memcmp_pages() rewritten to always return a no-match if at least one
of the pages is tagged (tag comparison avoided).
- ptrace() updated to prevent accessing tags in a page that has not been
mapped with PROT_MTE (PG_arch_2 flag not set).
- copy_mount_options() fix re-implemented to avoid
arch_has_exact_copy_from_user().
- The CPUID handling has been reworked to ensure that, when the feature
is not backed by the DT, the HWCAP is also hidden from user. Note that
the DT description is still under internal discussion on whether we
need it or not.
- A new early param, arm64.mte_disable, was introduced to facilitate
testing with and without MTE on platforms that support it.
- Asynchronous TCF SIGSEGV is no longer forced, so it can be ignored but
the user thread.
- CONFIG_ARM64_MTE is now default y since swap is supported.
To do or discuss:
- prctl() accepting an include vs exclude mask for the GCR_EL1.Excl
field. There is an ongoing discussion on v3 which accepts an include
mask with 0 being a special case equivalent to 1. If this is not
desirable, we can change this to an exclude mask.
- mmap(tagged_addr, PROT_MTE) pre-tagging the memory with the tag given
in the tagged_addr hint.
- ptrace() to expose the prctl() configuration for the user thread (or
the TCF and GCR_EL1.Excl fields).
- coredump (user) to also dump the tags.
- Kselftest patches will be made available.
[1] https://lore.kernel.org/linux-arm-kernel/20200421142603.3894-1-catalin.marinas@arm.com/
[2] https://community.arm.com/developer/ip-products/processors/b/processors-ip-blog/posts/enhancing-memory-safety
[3] https://developer.arm.com/-/media/Arm%20Developer%20Community/PDF/Arm_Memory_Tagging_Extension_Whitepaper.pdf
Catalin Marinas (14):
arm64: mte: Use Normal Tagged attributes for the linear map
arm64: mte: Clear the tags when a page is mapped in user-space with
PROT_MTE
arm64: mte: Tags-aware aware memcmp_pages() implementation
arm64: mte: Add PROT_MTE support to mmap() and mprotect()
mm: Introduce arch_validate_flags()
arm64: mte: Validate the PROT_MTE request via arch_validate_flags()
mm: Allow arm64 mmap(PROT_MTE) on RAM-based files
arm64: mte: Allow user control of the tag check mode via prctl()
arm64: mte: Allow user control of the generated random tags via
prctl()
arm64: mte: Restore the GCR_EL1 register after a suspend
arm64: mte: Add PTRACE_{PEEK,POKE}MTETAGS support
fs: Handle intra-page faults in copy_mount_options()
arm64: mte: Check the DT memory nodes for MTE support
arm64: mte: Introduce early param to disable MTE support
Kevin Brodsky (1):
mm: Introduce arch_calc_vm_flag_bits()
Steven Price (4):
mm: Add PG_ARCH_2 page flag
mm: Add arch hooks for saving/restoring tags
arm64: mte: Enable swap of tagged pages
arm64: mte: Save tags when hibernating
Vincenzo Frascino (7):
arm64: mte: system register definitions
arm64: mte: CPU feature detection and initial sysreg configuration
arm64: mte: Add specific SIGSEGV codes
arm64: mte: Handle synchronous and asynchronous tag check faults
arm64: mte: Tags-aware copy_page() implementation
arm64: mte: Kconfig entry
arm64: mte: Add Memory Tagging Extension documentation
.../admin-guide/kernel-parameters.txt | 4 +
Documentation/arm64/cpu-feature-registers.rst | 2 +
Documentation/arm64/elf_hwcaps.rst | 5 +
Documentation/arm64/index.rst | 1 +
.../arm64/memory-tagging-extension.rst | 297 ++++++++++++++++
arch/arm64/Kconfig | 33 ++
arch/arm64/boot/dts/arm/fvp-base-revc.dts | 1 +
arch/arm64/include/asm/assembler.h | 12 +
arch/arm64/include/asm/cpucaps.h | 4 +-
arch/arm64/include/asm/cpufeature.h | 12 +-
arch/arm64/include/asm/hwcap.h | 1 +
arch/arm64/include/asm/kvm_arm.h | 3 +-
arch/arm64/include/asm/memory.h | 17 +-
arch/arm64/include/asm/mman.h | 78 +++++
arch/arm64/include/asm/mte.h | 86 +++++
arch/arm64/include/asm/page.h | 2 +-
arch/arm64/include/asm/pgtable-prot.h | 2 +
arch/arm64/include/asm/pgtable.h | 45 ++-
arch/arm64/include/asm/processor.h | 4 +
arch/arm64/include/asm/sysreg.h | 62 ++++
arch/arm64/include/asm/thread_info.h | 4 +-
arch/arm64/include/uapi/asm/hwcap.h | 2 +
arch/arm64/include/uapi/asm/mman.h | 14 +
arch/arm64/include/uapi/asm/ptrace.h | 4 +
arch/arm64/kernel/Makefile | 1 +
arch/arm64/kernel/cpufeature.c | 126 ++++++-
arch/arm64/kernel/cpuinfo.c | 2 +
arch/arm64/kernel/entry.S | 37 ++
arch/arm64/kernel/hibernate.c | 118 +++++++
arch/arm64/kernel/mte.c | 324 ++++++++++++++++++
arch/arm64/kernel/process.c | 31 +-
arch/arm64/kernel/ptrace.c | 9 +-
arch/arm64/kernel/signal.c | 8 +
arch/arm64/kernel/suspend.c | 4 +
arch/arm64/kernel/syscall.c | 10 +
arch/arm64/lib/Makefile | 2 +
arch/arm64/lib/mte.S | 140 ++++++++
arch/arm64/mm/Makefile | 1 +
arch/arm64/mm/copypage.c | 14 +-
arch/arm64/mm/dump.c | 4 +
arch/arm64/mm/fault.c | 9 +-
arch/arm64/mm/mmu.c | 22 +-
arch/arm64/mm/mteswap.c | 82 +++++
arch/arm64/mm/proc.S | 8 +-
arch/x86/kernel/signal_compat.c | 2 +-
fs/namespace.c | 24 +-
fs/proc/page.c | 3 +
fs/proc/task_mmu.c | 4 +
include/asm-generic/pgtable.h | 23 ++
include/linux/kernel-page-flags.h | 1 +
include/linux/mm.h | 8 +
include/linux/mman.h | 22 +-
include/linux/page-flags.h | 3 +
include/trace/events/mmflags.h | 9 +-
include/uapi/asm-generic/siginfo.h | 4 +-
include/uapi/linux/prctl.h | 9 +
mm/Kconfig | 3 +
mm/mmap.c | 9 +
mm/mprotect.c | 6 +
mm/page_io.c | 10 +
mm/shmem.c | 9 +
mm/swapfile.c | 2 +
mm/util.c | 2 +-
tools/vm/page-types.c | 2 +
64 files changed, 1765 insertions(+), 37 deletions(-)
create mode 100644 Documentation/arm64/memory-tagging-extension.rst
create mode 100644 arch/arm64/include/asm/mman.h
create mode 100644 arch/arm64/include/asm/mte.h
create mode 100644 arch/arm64/include/uapi/asm/mman.h
create mode 100644 arch/arm64/kernel/mte.c
create mode 100644 arch/arm64/lib/mte.S
create mode 100644 arch/arm64/mm/mteswap.c
next reply other threads:[~2020-05-15 17:16 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-15 17:15 Catalin Marinas [this message]
2020-05-15 17:15 ` [PATCH v4 01/26] arm64: mte: system register definitions Catalin Marinas
2020-05-15 17:15 ` [PATCH v4 02/26] arm64: mte: CPU feature detection and initial sysreg configuration Catalin Marinas
2020-05-15 17:15 ` [PATCH v4 03/26] arm64: mte: Use Normal Tagged attributes for the linear map Catalin Marinas
2020-05-15 17:15 ` [PATCH v4 04/26] arm64: mte: Add specific SIGSEGV codes Catalin Marinas
2020-05-15 17:15 ` [PATCH v4 05/26] arm64: mte: Handle synchronous and asynchronous tag check faults Catalin Marinas
2020-05-15 17:15 ` [PATCH v4 06/26] mm: Add PG_ARCH_2 page flag Catalin Marinas
2020-05-15 17:15 ` [PATCH v4 07/26] arm64: mte: Clear the tags when a page is mapped in user-space with PROT_MTE Catalin Marinas
2020-05-15 17:15 ` [PATCH v4 08/26] arm64: mte: Tags-aware copy_page() implementation Catalin Marinas
2020-05-15 17:15 ` [PATCH v4 09/26] arm64: mte: Tags-aware aware memcmp_pages() implementation Catalin Marinas
2020-05-15 17:15 ` [PATCH v4 10/26] mm: Introduce arch_calc_vm_flag_bits() Catalin Marinas
2020-05-15 17:15 ` [PATCH v4 11/26] arm64: mte: Add PROT_MTE support to mmap() and mprotect() Catalin Marinas
2020-05-27 18:57 ` Peter Collingbourne
2020-05-28 9:14 ` Catalin Marinas
2020-05-28 11:05 ` Szabolcs Nagy
2020-05-28 16:34 ` Catalin Marinas
2020-05-28 18:35 ` Evgenii Stepanov
2020-05-29 11:19 ` Catalin Marinas
2020-06-01 8:55 ` Dave Martin
2020-06-01 14:45 ` Catalin Marinas
2020-06-01 15:04 ` Dave Martin
2020-05-15 17:15 ` [PATCH v4 12/26] mm: Introduce arch_validate_flags() Catalin Marinas
2020-05-15 17:15 ` [PATCH v4 13/26] arm64: mte: Validate the PROT_MTE request via arch_validate_flags() Catalin Marinas
2020-05-15 17:16 ` [PATCH v4 14/26] mm: Allow arm64 mmap(PROT_MTE) on RAM-based files Catalin Marinas
2020-05-15 17:16 ` [PATCH v4 15/26] arm64: mte: Allow user control of the tag check mode via prctl() Catalin Marinas
2020-05-27 7:46 ` Will Deacon
2020-05-27 8:32 ` Dave Martin
2020-05-27 8:48 ` Will Deacon
2020-05-27 11:16 ` Catalin Marinas
2020-05-15 17:16 ` [PATCH v4 16/26] arm64: mte: Allow user control of the generated random tags " Catalin Marinas
2020-05-15 17:16 ` [PATCH v4 17/26] arm64: mte: Restore the GCR_EL1 register after a suspend Catalin Marinas
2020-05-15 17:16 ` [PATCH v4 18/26] arm64: mte: Add PTRACE_{PEEK,POKE}MTETAGS support Catalin Marinas
2020-05-29 21:25 ` Luis Machado
2020-06-01 12:07 ` Catalin Marinas
2020-06-01 15:17 ` Luis Machado
2020-06-01 16:33 ` Catalin Marinas
2020-05-15 17:16 ` [PATCH v4 19/26] fs: Handle intra-page faults in copy_mount_options() Catalin Marinas
2020-05-15 17:16 ` [PATCH v4 20/26] mm: Add arch hooks for saving/restoring tags Catalin Marinas
2020-05-15 17:16 ` [PATCH v4 21/26] arm64: mte: Enable swap of tagged pages Catalin Marinas
2020-05-15 17:16 ` [PATCH v4 22/26] arm64: mte: Save tags when hibernating Catalin Marinas
2020-05-15 17:16 ` [PATCH v4 23/26] arm64: mte: Check the DT memory nodes for MTE support Catalin Marinas
2020-05-15 17:16 ` [PATCH v4 24/26] arm64: mte: Introduce early param to disable " Catalin Marinas
2020-05-18 11:26 ` Vladimir Murzin
2020-05-18 11:31 ` Will Deacon
2020-05-18 17:20 ` Catalin Marinas
2020-05-22 5:57 ` Patrick Daly
2020-05-22 10:37 ` Catalin Marinas
2020-05-27 2:11 ` Patrick Daly
2020-05-27 9:55 ` Will Deacon
2020-05-27 10:37 ` Szabolcs Nagy
2020-05-27 11:12 ` Catalin Marinas
2020-05-19 16:14 ` Catalin Marinas
2021-01-21 19:37 ` Andrey Konovalov
2021-01-22 2:03 ` Andrey Konovalov
2021-01-22 14:41 ` Catalin Marinas
2021-01-22 17:28 ` Andrey Konovalov
2020-05-15 17:16 ` [PATCH v4 25/26] arm64: mte: Kconfig entry Catalin Marinas
2020-05-15 17:16 ` [PATCH v4 26/26] arm64: mte: Add Memory Tagging Extension documentation Catalin Marinas
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=20200515171612.1020-1-catalin.marinas@arm.com \
--to=catalin.marinas@arm.com \
--cc=Dave.Martin@arm.com \
--cc=andreyknvl@google.com \
--cc=kevin.brodsky@arm.com \
--cc=linux-arch@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-mm@kvack.org \
--cc=pcc@google.com \
--cc=szabolcs.nagy@arm.com \
--cc=vincenzo.frascino@arm.com \
--cc=will@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