[PATCH 0/2] kselftest: Make MTE memory access robust

Vladimir Murzin vladimir.murzin at arm.com
Tue Sep 22 03:59:57 PDT 2026


Currently MTE selftests assume that they can skip (expected) MTE
faults by advancing the PC by 4 in mte_default_handler(), but this is
not generally safe, as the faults are triggered from arbitrary library
functions (e.g. memset() and memcpy()). For instance, memset() could
be implemented as simple as:

      mov   x3, x0       // copy pointer
      add   x4, x0, x2   // calculate end
    loop:
      strb  w1, [x3], #1 // faulting access
      cmp   x3, x4
      b.ne  loop
      ret

which leads to an infinite loop since X3 could not be updated.

Or, it could be having advanced implementation (FEAT_MOPS):

      mov   x3, x0         // copy pointer
      setp  [x3]!, x2!, x1 // prologue
      setm  [x3]!, x2!, x1 // main
      sete  [x3]!, x2!, x1 // epilogue
      ret

with faulting access at prologue advancing PC to main could lead to
infinite loop due to main could be triggering unaligned access fault
which kernel fixing up by advancing PC back to prologue.

Address this by introducing memory access helpers with predictable
behavior, allowing faults to be safely handled, and switch the MTE
selftests over to them.

Vladimir Murzin (2):
  kselftest/arm64/mte: Introduce MTE safe memory accessors
  kselftest/arm64/mte: Use MTE safe memory accessors

 .../selftests/arm64/mte/check_buffer_fill.c   | 10 ++---
 .../selftests/arm64/mte/check_child_memory.c  |  6 +--
 .../arm64/mte/check_hugetlb_options.c         |  4 +-
 .../selftests/arm64/mte/check_mmap_options.c  | 10 ++---
 .../arm64/mte/check_tags_inclusion.c          |  4 +-
 .../selftests/arm64/mte/mte_common_util.h     |  4 ++
 .../testing/selftests/arm64/mte/mte_helper.S  | 44 +++++++++++++++++++
 7 files changed, 65 insertions(+), 17 deletions(-)

-- 
2.34.1




More information about the linux-arm-kernel mailing list