mbox series

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

Message ID 20220131165456.2160675-1-catalin.marinas@arm.com (mailing list archive)
Headers show
Series arm64: mte: add core dump support | expand

Message

Catalin Marinas Jan. 31, 2022, 4:54 p.m. UTC
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

Comments

Will Deacon Feb. 15, 2022, 11:18 p.m. UTC | #1
On Mon, 31 Jan 2022 16:54:51 +0000, Catalin Marinas wrote:
> 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.
> 
> [...]

Applied to arm64 (for-next/mte), thanks!

[1/5] elfcore: Replace CONFIG_{IA64, UML} checks with a new option
      https://git.kernel.org/arm64/c/b62a8486de3a
[2/5] elf: Introduce the ARM MTE ELF segment type
      https://git.kernel.org/arm64/c/761b9b366cec
[3/5] arm64: mte: Define the number of bytes for storing the tags in a page
      https://git.kernel.org/arm64/c/ab1e435ca791
[4/5] arm64: mte: Dump the MTE tags in the core file
      https://git.kernel.org/arm64/c/6dd8b1a0b6cb
[5/5] arm64: mte: Document the core dump file format
      https://git.kernel.org/arm64/c/731451ab3c0c

Cheers,