FAILURE MAP
← Case archive

FA-89686 / Instruction set emulation / Open access

Protection fault reported as not-present · case 01

A permission violation on a present page has the present bit clear in its error code.

Verified by executionVariant 1 · 9 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

The protection-fault path does not set the P bit of the error code.

VERIFIED REPAIR

Set bit 0 of the error code for protection faults on present pages.

Unsuccessful approach: Returning only the P bit drops the write and user bits.

Case contract

Input [va, write, user, root, mem]; mem maps decimal-string physical addresses to 32-bit entries (missing = 0). VA splits 10/10/12 (directory index va>>22, table index (va>>12)&0x3FF, offset). The PDE is at root + 4*dir, the PTE at (PDE frame << 12) + 4*table. Bits: P=1, W=2, U=4, A=32, D=64; frame = entry >> 12. Not present -> ['fault', err]; write without W on both levels or user access without U on both levels -> ['fault', err | 1], where err = 2 if write plus 4 if user. On success set A on both entries and D on the PTE only for writes, returning ['ok', physical address, sorted [address, entry] of memory].

Why this case matters

MMU emulation must combine permissions across levels and update accessed/dirty bits exactly as guest operating systems expect.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(*args):
    va, write, user, root, mem = args
    mem = dict(mem)
    d = va >> 22
    t = (va >> 12) & 0x3FF
    off = va & 0xFFF
    err = (2 if write else 0) | (4 if user else 0)
    pde_a = str(root + d * 4)
    pde = mem.get(pde_a, 0)
    if not pde & 1:
        return ['fault', err]
    pte_a = str((pde >> 12 << 12) + t * 4)
    pte = mem.get(pte_a, 0)
    if not pte & 1:
        return ['fault', err]
    if (write and not (pde & pte & 2)) or (user and not (pde & pte & 4)):
        return ['fault', err]
    mem[pde_a] = pde | 32
    mem[pte_a] = pte | 32 | (64 if write else 0)
    return ['ok', (pte >> 12 << 12) | off, [[k, mem[k]] for k in sorted(mem, key=int)]]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('user read of user page', [4206859, 0, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 20747, [['4100', 8231], ['4104', 12289], ['8204', 20519], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36869]]]), ('user write sets dirty', [4206863, 1, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 20751, [['4100', 8231], ['4104', 12289], ['8204', 20583], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36869]]]), ('high table index', [6304011, 0, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 33035, [['4100', 8231], ['4104', 12289], ['8204', 20487], ['8208', 24577], ['10252', 32807], ['12288', 28679], ['12292', 36869]]]), ('kernel write to read-only page', [4210955, 1, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 3]), ('user access through supervisor directory', [8388875, 0, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 5]), ('write through read-only directory', [8388875, 1, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 3]), ('kernel read through read-only directory', [8392971, 0, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 37131, [['4100', 8199], ['4104', 12321], ['8204', 20487], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36901]]]), ('directory entry not present', [12583179, 1, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 6]), ('leaf not present', [4218880, 0, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 0])], [('user read of user page', [4207115, 0, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 21003, [['4100', 8231], ['4104', 12289], ['8204', 20519], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36869]]]), ('user write sets dirty', [4207119, 1, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 21007, [['4100', 8231], ['4104', 12289], ['8204', 20583], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36869]]]), ('high table index', [6304267, 0, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 33291, [['4100', 8231], ['4104', 12289], ['8204', 20487], ['8208', 24577], ['10252', 32807], ['12288', 28679], ['12292', 36869]]]), ('kernel write to read-only page', [4211211, 1, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 3]), ('user access through supervisor directory', [8389131, 0, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 5]), ('write through read-only directory', [8389131, 1, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 3]), ('kernel read through read-only directory', [8393227, 0, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 37387, [['4100', 8199], ['4104', 12321], ['8204', 20487], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36901]]]), ('directory entry not present', [12583435, 1, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 6]), ('leaf not present', [4222976, 0, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 0])], [('user read of user page', [4207371, 0, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 21259, [['4100', 8231], ['4104', 12289], ['8204', 20519], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36869]]]), ('user write sets dirty', [4207375, 1, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 21263, [['4100', 8231], ['4104', 12289], ['8204', 20583], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36869]]]), ('high table index', [6304523, 0, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 33547, [['4100', 8231], ['4104', 12289], ['8204', 20487], ['8208', 24577], ['10252', 32807], ['12288', 28679], ['12292', 36869]]]), ('kernel write to read-only page', [4211467, 1, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 3]), ('user access through supervisor directory', [8389387, 0, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 5]), ('write through read-only directory', [8389387, 1, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 3]), ('kernel read through read-only directory', [8393483, 0, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 37643, [['4100', 8199], ['4104', 12321], ['8204', 20487], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36901]]]), ('directory entry not present', [12583691, 1, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 6]), ('leaf not present', [4227072, 0, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 0])], [('user read of user page', [4207627, 0, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 21515, [['4100', 8231], ['4104', 12289], ['8204', 20519], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36869]]]), ('user write sets dirty', [4207631, 1, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 21519, [['4100', 8231], ['4104', 12289], ['8204', 20583], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36869]]]), ('high table index', [6304779, 0, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 33803, [['4100', 8231], ['4104', 12289], ['8204', 20487], ['8208', 24577], ['10252', 32807], ['12288', 28679], ['12292', 36869]]]), ('kernel write to read-only page', [4211723, 1, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 3]), ('user access through supervisor directory', [8389643, 0, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 5]), ('write through read-only directory', [8389643, 1, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 3]), ('kernel read through read-only directory', [8393739, 0, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 37899, [['4100', 8199], ['4104', 12321], ['8204', 20487], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36901]]]), ('directory entry not present', [12583947, 1, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 6]), ('leaf not present', [4231168, 0, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 0])], [('user read of user page', [4207883, 0, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 21771, [['4100', 8231], ['4104', 12289], ['8204', 20519], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36869]]]), ('user write sets dirty', [4207887, 1, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 21775, [['4100', 8231], ['4104', 12289], ['8204', 20583], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36869]]]), ('high table index', [6305035, 0, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 34059, [['4100', 8231], ['4104', 12289], ['8204', 20487], ['8208', 24577], ['10252', 32807], ['12288', 28679], ['12292', 36869]]]), ('kernel write to read-only page', [4211979, 1, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 3]), ('user access through supervisor directory', [8389899, 0, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 5]), ('write through read-only directory', [8389899, 1, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 3]), ('kernel read through read-only directory', [8393995, 0, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 38155, [['4100', 8199], ['4104', 12321], ['8204', 20487], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36901]]]), ('directory entry not present', [12584203, 1, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 6]), ('leaf not present', [4235264, 0, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 0])]]
for label, args, expected in fixtures[N-1]:
    check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
user read of user page['ok', 20747, [['4100', 8231], ['4104', 12289], ['8204', 20519], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36869]]]['ok', 20747, [['4100', 8231], ['4104', 12289], ['8204', 20519], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36869]]]Passed
user write sets dirty['ok', 20751, [['4100', 8231], ['4104', 12289], ['8204', 20583], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36869]]]['ok', 20751, [['4100', 8231], ['4104', 12289], ['8204', 20583], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36869]]]Passed
high table index['ok', 33035, [['4100', 8231], ['4104', 12289], ['8204', 20487], ['8208', 24577], ['10252', 32807], ['12288', 28679], ['12292', 36869]]]['ok', 33035, [['4100', 8231], ['4104', 12289], ['8204', 20487], ['8208', 24577], ['10252', 32807], ['12288', 28679], ['12292', 36869]]]Passed
kernel write to read-only page['fault', 2]['fault', 3]Failed
user access through supervisor directory['fault', 4]['fault', 5]Failed
write through read-only directory['fault', 2]['fault', 3]Failed
kernel read through read-only directory['ok', 37131, [['4100', 8199], ['4104', 12321], ['8204', 20487], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36901]]]['ok', 37131, [['4100', 8199], ['4104', 12321], ['8204', 20487], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36901]]]Passed
directory entry not present['fault', 6]['fault', 6]Passed
leaf not present['fault', 0]['fault', 0]Passed

SHA-256 / 8f9b72a88835efc68bf297ce684903d4ab79801a966d6f7917e8c1afb6d258af

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(*args):
    va, write, user, root, mem = args
    mem = dict(mem)
    d = va >> 22
    t = (va >> 12) & 0x3FF
    off = va & 0xFFF
    err = (2 if write else 0) | (4 if user else 0)
    pde_a = str(root + d * 4)
    pde = mem.get(pde_a, 0)
    if not pde & 1:
        return ['fault', err]
    pte_a = str((pde >> 12 << 12) + t * 4)
    pte = mem.get(pte_a, 0)
    if not pte & 1:
        return ['fault', err]
    if (write and not (pde & pte & 2)) or (user and not (pde & pte & 4)):
        return ['fault', 1]
    mem[pde_a] = pde | 32
    mem[pte_a] = pte | 32 | (64 if write else 0)
    return ['ok', (pte >> 12 << 12) | off, [[k, mem[k]] for k in sorted(mem, key=int)]]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('user read of user page', [4206859, 0, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 20747, [['4100', 8231], ['4104', 12289], ['8204', 20519], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36869]]]), ('user write sets dirty', [4206863, 1, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 20751, [['4100', 8231], ['4104', 12289], ['8204', 20583], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36869]]]), ('high table index', [6304011, 0, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 33035, [['4100', 8231], ['4104', 12289], ['8204', 20487], ['8208', 24577], ['10252', 32807], ['12288', 28679], ['12292', 36869]]]), ('kernel write to read-only page', [4210955, 1, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 3]), ('user access through supervisor directory', [8388875, 0, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 5]), ('write through read-only directory', [8388875, 1, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 3]), ('kernel read through read-only directory', [8392971, 0, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 37131, [['4100', 8199], ['4104', 12321], ['8204', 20487], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36901]]]), ('directory entry not present', [12583179, 1, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 6]), ('leaf not present', [4218880, 0, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 0])], [('user read of user page', [4207115, 0, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 21003, [['4100', 8231], ['4104', 12289], ['8204', 20519], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36869]]]), ('user write sets dirty', [4207119, 1, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 21007, [['4100', 8231], ['4104', 12289], ['8204', 20583], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36869]]]), ('high table index', [6304267, 0, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 33291, [['4100', 8231], ['4104', 12289], ['8204', 20487], ['8208', 24577], ['10252', 32807], ['12288', 28679], ['12292', 36869]]]), ('kernel write to read-only page', [4211211, 1, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 3]), ('user access through supervisor directory', [8389131, 0, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 5]), ('write through read-only directory', [8389131, 1, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 3]), ('kernel read through read-only directory', [8393227, 0, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 37387, [['4100', 8199], ['4104', 12321], ['8204', 20487], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36901]]]), ('directory entry not present', [12583435, 1, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 6]), ('leaf not present', [4222976, 0, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 0])], [('user read of user page', [4207371, 0, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 21259, [['4100', 8231], ['4104', 12289], ['8204', 20519], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36869]]]), ('user write sets dirty', [4207375, 1, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 21263, [['4100', 8231], ['4104', 12289], ['8204', 20583], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36869]]]), ('high table index', [6304523, 0, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 33547, [['4100', 8231], ['4104', 12289], ['8204', 20487], ['8208', 24577], ['10252', 32807], ['12288', 28679], ['12292', 36869]]]), ('kernel write to read-only page', [4211467, 1, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 3]), ('user access through supervisor directory', [8389387, 0, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 5]), ('write through read-only directory', [8389387, 1, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 3]), ('kernel read through read-only directory', [8393483, 0, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 37643, [['4100', 8199], ['4104', 12321], ['8204', 20487], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36901]]]), ('directory entry not present', [12583691, 1, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 6]), ('leaf not present', [4227072, 0, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 0])], [('user read of user page', [4207627, 0, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 21515, [['4100', 8231], ['4104', 12289], ['8204', 20519], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36869]]]), ('user write sets dirty', [4207631, 1, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 21519, [['4100', 8231], ['4104', 12289], ['8204', 20583], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36869]]]), ('high table index', [6304779, 0, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 33803, [['4100', 8231], ['4104', 12289], ['8204', 20487], ['8208', 24577], ['10252', 32807], ['12288', 28679], ['12292', 36869]]]), ('kernel write to read-only page', [4211723, 1, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 3]), ('user access through supervisor directory', [8389643, 0, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 5]), ('write through read-only directory', [8389643, 1, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 3]), ('kernel read through read-only directory', [8393739, 0, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 37899, [['4100', 8199], ['4104', 12321], ['8204', 20487], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36901]]]), ('directory entry not present', [12583947, 1, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 6]), ('leaf not present', [4231168, 0, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 0])], [('user read of user page', [4207883, 0, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 21771, [['4100', 8231], ['4104', 12289], ['8204', 20519], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36869]]]), ('user write sets dirty', [4207887, 1, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 21775, [['4100', 8231], ['4104', 12289], ['8204', 20583], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36869]]]), ('high table index', [6305035, 0, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 34059, [['4100', 8231], ['4104', 12289], ['8204', 20487], ['8208', 24577], ['10252', 32807], ['12288', 28679], ['12292', 36869]]]), ('kernel write to read-only page', [4211979, 1, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 3]), ('user access through supervisor directory', [8389899, 0, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 5]), ('write through read-only directory', [8389899, 1, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 3]), ('kernel read through read-only directory', [8393995, 0, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 38155, [['4100', 8199], ['4104', 12321], ['8204', 20487], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36901]]]), ('directory entry not present', [12584203, 1, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 6]), ('leaf not present', [4235264, 0, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 0])]]
for label, args, expected in fixtures[N-1]:
    check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
user read of user page['ok', 20747, [['4100', 8231], ['4104', 12289], ['8204', 20519], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36869]]]['ok', 20747, [['4100', 8231], ['4104', 12289], ['8204', 20519], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36869]]]Passed
user write sets dirty['ok', 20751, [['4100', 8231], ['4104', 12289], ['8204', 20583], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36869]]]['ok', 20751, [['4100', 8231], ['4104', 12289], ['8204', 20583], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36869]]]Passed
high table index['ok', 33035, [['4100', 8231], ['4104', 12289], ['8204', 20487], ['8208', 24577], ['10252', 32807], ['12288', 28679], ['12292', 36869]]]['ok', 33035, [['4100', 8231], ['4104', 12289], ['8204', 20487], ['8208', 24577], ['10252', 32807], ['12288', 28679], ['12292', 36869]]]Passed
kernel write to read-only page['fault', 1]['fault', 3]Failed
user access through supervisor directory['fault', 1]['fault', 5]Failed
write through read-only directory['fault', 1]['fault', 3]Failed
kernel read through read-only directory['ok', 37131, [['4100', 8199], ['4104', 12321], ['8204', 20487], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36901]]]['ok', 37131, [['4100', 8199], ['4104', 12321], ['8204', 20487], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36901]]]Passed
directory entry not present['fault', 6]['fault', 6]Passed
leaf not present['fault', 0]['fault', 0]Passed

SHA-256 / 6e7c1603b015d7a73f6088db02afa7e5f1d0a10dd0bd2008887e506621acd325

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(*args):
    va, write, user, root, mem = args
    mem = dict(mem)
    d = va >> 22
    t = (va >> 12) & 0x3FF
    off = va & 0xFFF
    err = (2 if write else 0) | (4 if user else 0)
    pde_a = str(root + d * 4)
    pde = mem.get(pde_a, 0)
    if not pde & 1:
        return ['fault', err]
    pte_a = str((pde >> 12 << 12) + t * 4)
    pte = mem.get(pte_a, 0)
    if not pte & 1:
        return ['fault', err]
    if (write and not (pde & pte & 2)) or (user and not (pde & pte & 4)):
        return ['fault', err | 1]
    mem[pde_a] = pde | 32
    mem[pte_a] = pte | 32 | (64 if write else 0)
    return ['ok', (pte >> 12 << 12) | off, [[k, mem[k]] for k in sorted(mem, key=int)]]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('user read of user page', [4206859, 0, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 20747, [['4100', 8231], ['4104', 12289], ['8204', 20519], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36869]]]), ('user write sets dirty', [4206863, 1, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 20751, [['4100', 8231], ['4104', 12289], ['8204', 20583], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36869]]]), ('high table index', [6304011, 0, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 33035, [['4100', 8231], ['4104', 12289], ['8204', 20487], ['8208', 24577], ['10252', 32807], ['12288', 28679], ['12292', 36869]]]), ('kernel write to read-only page', [4210955, 1, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 3]), ('user access through supervisor directory', [8388875, 0, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 5]), ('write through read-only directory', [8388875, 1, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 3]), ('kernel read through read-only directory', [8392971, 0, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 37131, [['4100', 8199], ['4104', 12321], ['8204', 20487], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36901]]]), ('directory entry not present', [12583179, 1, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 6]), ('leaf not present', [4218880, 0, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 0])], [('user read of user page', [4207115, 0, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 21003, [['4100', 8231], ['4104', 12289], ['8204', 20519], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36869]]]), ('user write sets dirty', [4207119, 1, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 21007, [['4100', 8231], ['4104', 12289], ['8204', 20583], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36869]]]), ('high table index', [6304267, 0, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 33291, [['4100', 8231], ['4104', 12289], ['8204', 20487], ['8208', 24577], ['10252', 32807], ['12288', 28679], ['12292', 36869]]]), ('kernel write to read-only page', [4211211, 1, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 3]), ('user access through supervisor directory', [8389131, 0, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 5]), ('write through read-only directory', [8389131, 1, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 3]), ('kernel read through read-only directory', [8393227, 0, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 37387, [['4100', 8199], ['4104', 12321], ['8204', 20487], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36901]]]), ('directory entry not present', [12583435, 1, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 6]), ('leaf not present', [4222976, 0, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 0])], [('user read of user page', [4207371, 0, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 21259, [['4100', 8231], ['4104', 12289], ['8204', 20519], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36869]]]), ('user write sets dirty', [4207375, 1, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 21263, [['4100', 8231], ['4104', 12289], ['8204', 20583], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36869]]]), ('high table index', [6304523, 0, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 33547, [['4100', 8231], ['4104', 12289], ['8204', 20487], ['8208', 24577], ['10252', 32807], ['12288', 28679], ['12292', 36869]]]), ('kernel write to read-only page', [4211467, 1, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 3]), ('user access through supervisor directory', [8389387, 0, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 5]), ('write through read-only directory', [8389387, 1, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 3]), ('kernel read through read-only directory', [8393483, 0, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 37643, [['4100', 8199], ['4104', 12321], ['8204', 20487], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36901]]]), ('directory entry not present', [12583691, 1, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 6]), ('leaf not present', [4227072, 0, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 0])], [('user read of user page', [4207627, 0, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 21515, [['4100', 8231], ['4104', 12289], ['8204', 20519], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36869]]]), ('user write sets dirty', [4207631, 1, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 21519, [['4100', 8231], ['4104', 12289], ['8204', 20583], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36869]]]), ('high table index', [6304779, 0, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 33803, [['4100', 8231], ['4104', 12289], ['8204', 20487], ['8208', 24577], ['10252', 32807], ['12288', 28679], ['12292', 36869]]]), ('kernel write to read-only page', [4211723, 1, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 3]), ('user access through supervisor directory', [8389643, 0, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 5]), ('write through read-only directory', [8389643, 1, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 3]), ('kernel read through read-only directory', [8393739, 0, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 37899, [['4100', 8199], ['4104', 12321], ['8204', 20487], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36901]]]), ('directory entry not present', [12583947, 1, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 6]), ('leaf not present', [4231168, 0, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 0])], [('user read of user page', [4207883, 0, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 21771, [['4100', 8231], ['4104', 12289], ['8204', 20519], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36869]]]), ('user write sets dirty', [4207887, 1, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 21775, [['4100', 8231], ['4104', 12289], ['8204', 20583], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36869]]]), ('high table index', [6305035, 0, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 34059, [['4100', 8231], ['4104', 12289], ['8204', 20487], ['8208', 24577], ['10252', 32807], ['12288', 28679], ['12292', 36869]]]), ('kernel write to read-only page', [4211979, 1, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 3]), ('user access through supervisor directory', [8389899, 0, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 5]), ('write through read-only directory', [8389899, 1, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 3]), ('kernel read through read-only directory', [8393995, 0, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['ok', 38155, [['4100', 8199], ['4104', 12321], ['8204', 20487], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36901]]]), ('directory entry not present', [12584203, 1, 1, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 6]), ('leaf not present', [4235264, 0, 0, 4096, {'4100': 8199, '8204': 20487, '8208': 24577, '10252': 32775, '4104': 12289, '12288': 28679, '12292': 36869}], ['fault', 0])]]
for label, args, expected in fixtures[N-1]:
    check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
user read of user page['ok', 20747, [['4100', 8231], ['4104', 12289], ['8204', 20519], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36869]]]['ok', 20747, [['4100', 8231], ['4104', 12289], ['8204', 20519], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36869]]]Passed
user write sets dirty['ok', 20751, [['4100', 8231], ['4104', 12289], ['8204', 20583], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36869]]]['ok', 20751, [['4100', 8231], ['4104', 12289], ['8204', 20583], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36869]]]Passed
high table index['ok', 33035, [['4100', 8231], ['4104', 12289], ['8204', 20487], ['8208', 24577], ['10252', 32807], ['12288', 28679], ['12292', 36869]]]['ok', 33035, [['4100', 8231], ['4104', 12289], ['8204', 20487], ['8208', 24577], ['10252', 32807], ['12288', 28679], ['12292', 36869]]]Passed
kernel write to read-only page['fault', 3]['fault', 3]Passed
user access through supervisor directory['fault', 5]['fault', 5]Passed
write through read-only directory['fault', 3]['fault', 3]Passed
kernel read through read-only directory['ok', 37131, [['4100', 8199], ['4104', 12321], ['8204', 20487], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36901]]]['ok', 37131, [['4100', 8199], ['4104', 12321], ['8204', 20487], ['8208', 24577], ['10252', 32775], ['12288', 28679], ['12292', 36901]]]Passed
directory entry not present['fault', 6]['fault', 6]Passed
leaf not present['fault', 0]['fault', 0]Passed

SHA-256 / d0dc04aab67a160880b8d83dd808b5f6d8d89019f60eb8208111188639653cb1

Verification & scope

A deterministic bounded teaching model of one emulator rule; the instruction semantics are a stipulated contract inspired by common ISAs and are not a claim of cycle-exact or architectural conformance. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.

Observations recorded using Python 3.12.14 at 2026-09-29T14:51:19.800926+00:00.

Case digest / 95028f118466e54b353332969412b6dd761a524cffd6c959e1be6b24350000dd