Skip to content

aarch64: kernel-mode near-null DATA_ABORT — FAR=0x2, ELR in kernel text, ESR=0x96000005 DFSC=0x5, 1/100 clean cortex-a72 boots (PR-A acceptance battery) #641

Description

@ryanbreen

A new fatal field signature turned up in the T3-G PR3 (PR-A) acceptance battery on
fix/producer-corruption-family @ 14272b9a. It matches nothing filed, so it is filed on its own
rather than folded into any tolerated bucket.

Field signature

[DATA_ABORT] FAR=0x2 ELR=0xffff0000404e80a0 ESR=0x96000005 DFSC=0x5 TTBR0=0x10000440dd000 from_el0=0
[FATAL_REGS] label=DATA_ABORT cpu=0 spsr=0x600000c5 esr=0x96000005 far=0x2 elr=0xffff0000404e80a0 sp=0xffff0000431ffd90
  x0=0xffff000040800338 x1=0xffff0000431ffec8 x2=0x8 x3=0x68
  x4=0x0 x5=0x0 x6=0x0 x7=0x0
  x8=0x0 x9=0x2 x10=0x7fa42 x11=0x0
  x12=0xffffffffffff00b8 x13=0x50 x14=0x4b8 x15=0xffffffffffff00b8
  x16=0x2 x17=0x0 x18=0x0 x19=0xffff000040800338
  x20=0x1 x21=0xffff0000431ffe58 x22=0xffff000050393de8 x23=0xffff000050397fb0
  x24=0xffff000040606938 x25=0xffff000040606908 x26=0xffff000040606920 x27=0xffff00005032c708
  x28=0xffff00005032c708 x29=0xffff0000406068f0 x30=0xffff00004040a2e0
  percpu_kst=0xffff000043200000 user_rsp_scratch=0xffff0000431ffd90
  STACK=boot_cpu0
[DATA_ABORT] kernel-mode fault, deferring process cleanup
[DATA_ABORT] deferred_tid=9 queued=1

A kernel-mode (EL1, from_el0=0) data abort on a translation fault at level 1 (DFSC=0x5) against
a near-null address, FAR=0x2. The ELR is a valid kernel-text address and the two registers
holding 0x2 (x9, x16) point at a small-integer/uninitialised-pointer dereference rather than a
wild pointer. x19 = 0xffff000040800338 is a SCHEDULER-region address; DAIF in spsr=0x600000c5
shows the fault was taken with interrupts masked, on CPU 0, on the boot CPU stack
(STACK=boot_cpu0), 6 s into the boot.

Why it is not one of the filed faces

filed why this is not it
#633 [PC_ALIGN], EL0, ELR is a small tid — this is EL1, a data abort, valid ELR
#635 FAR == ELR, instruction abort ESR=0x8600000e — this is FAR != ELR, data abort
#637 EL0 resumed at a kernel address, from_el0=1 — this is from_el0=0
#576 / #626 zero PC (ELR=0, ESR=0x86000005 / 0x8600000d) — ELR here is valid kernel text
#612 wild-context DATA_ABORT in the FAR=0x292 region — FAR=0x2 is a different address class
#639 FAR=0x210 ELR=0x0 with a kernel VA in spsr (architecturally impossible dump class) — this dump is internally consistent
#640 end-of-RAM external abort, ESR=0x96000010 DFSC=0x10 — different fault class

Rate and provenance

1 boot in 100 on the clean cortex-a72 profile of the PR-A battery (196/200 GREEN overall; the
other three non-GREEN boots were pre-adjudicated #555, pre-adjudicated #613, and one attributed
#635). Not reproduced on the max profile (0/100), the starved legs (0/100), the service-sequence
gate (0/50) or the strict gate (0/60). The gate correctly bucketed it UNATTRIBUTED; no tolerance
was added for it, so it fails the gate wherever it recurs.

Serial preserved in-repo:
docs/planning/teardown-unification/pr3-acceptance-battery-serials/clean-cortex100-boot97-far0x2-null-data-abort.txt
(with the other three battery serials and a provenance README beside it).

What is not known

The faulting instruction is not resolved to a symbol here — the address resolution needs the exact
boot_tests-profile ELF of 14272b9a, and no producer for the 0x2 value is named. Nothing in
PR-A contains or measures this face: [RESUME_PC_REFUSED: count was 0 on this boot, as on all 330
boots of the battery.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions