[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