[PATCH v2 0/5] arm64: mte: add core dump support

Catalin Marinas catalin.marinas at arm.com
Mon Jan 31 08:54:51 PST 2022


Hi,

This is the second version of the core dump support for MTE tags.
Changes since v1
(https://lore.kernel.org/r/20211208121941.494956-1-catalin.marinas@arm.com):

- Made the documentation slightly clearer on what the size of a segment.
- Added Luis' acks.
- Rebased to 5.17-rc2.

The arm64 Memory Tagging Extensions allow assigning a 4-bit (allocation)
tag to a 16-byte memory range. Bits 56..59 of a pointer are checked
against the allocation tag on access and a fault may be raised if
there's a mismatch. The additional 4-bit metadata is useful for
debugging hence this series to dump it to the core file.

When a core file is generated and the user has mappings with PROT_MTE,
segments with the PT_ARM_MEMTAG_MTE type are dumped. These correspond to
the PT_LOAD segments for the same virtual addresses. The choice of an
ELF segment rather than a note was made due to the 32-bit size
limitation of a note which would only cover vmas up to 37-bit.

The last patch documents the core file format. The tags are dumped
packed, two 4-bit tags per byte (unlike ptrace where we have one tag per
byte) and there is no header to define the format, it's all fixed for
the PT_ARM_MEMTAG_MTE type.

Below you can see the output of 'readelf -a core' for a program mapping
two regions with PROT_MTE, one 2-page and the other 4-page long. Half of
the first page in each range was filled with 0xa and 0xb tags
respectively.

Program Headers:
  Type           Offset   VirtAddr           PhysAddr           FileSiz  MemSiz   Flg Align
  ...
  LOAD           0x030000 0x0000ffff80034000 0x0000000000000000 0x000000 0x002000 RW  0x1000
  LOAD           0x030000 0x0000ffff80036000 0x0000000000000000 0x004000 0x004000 RW  0x1000
  ...
  LOPROC+0x1     0x05b000 0x0000ffff80034000 0x0000000000000000 0x000100 0x002000     0
  LOPROC+0x1     0x05b100 0x0000ffff80036000 0x0000000000000000 0x000200 0x004000     0

The relevant 'od -tx1 core' output:

05b000 bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb
*
05b040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
*
05b100 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
*
05b140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
*
05b300

Catalin Marinas (5):
  elfcore: Replace CONFIG_{IA64,UML} checks with a new option
  elf: Introduce the ARM MTE ELF segment type
  arm64: mte: Define the number of bytes for storing the tags in a page
  arm64: mte: Dump the MTE tags in the core file
  arm64: mte: Document the core dump file format

 .../arm64/memory-tagging-extension.rst        |  23 ++++
 arch/arm64/Kconfig                            |   1 +
 arch/arm64/include/asm/mte-def.h              |   1 +
 arch/arm64/kernel/Makefile                    |   1 +
 arch/arm64/kernel/elfcore.c                   | 123 ++++++++++++++++++
 arch/arm64/lib/mte.S                          |   4 +-
 arch/arm64/mm/mteswap.c                       |   2 +-
 arch/ia64/Kconfig                             |   1 +
 arch/x86/um/Kconfig                           |   1 +
 fs/Kconfig.binfmt                             |   3 +
 include/linux/elfcore.h                       |   4 +-
 include/uapi/linux/elf.h                      |   3 +
 12 files changed, 162 insertions(+), 5 deletions(-)
 create mode 100644 arch/arm64/kernel/elfcore.c




More information about the linux-arm-kernel mailing list