D846 - The command processor reaches the guest's heap blocks

Status: decided Date: 2026-10-14

The command processor reads and writes guest memory only where a lookup says the guest holds it. That lookup now accepts a live block on the guest's heap as well as a kernel mapping. libc keeps every block malloc and its family hand out, by start and size, and drops it when it is freed. orbistoun_libc::heap_block_holds answers whether a range lies wholly inside one. The worker's read and write lookups take either answer.

Why: malloc is served from the host heap (D128), outside every mapping the kernel records. A title that gives the GPU a fence or label it allocated on its heap had its first submission stopped: PPSA21564's first RELEASE_MEM targeted such a block, the command processor refused it as out of bounds, and fourteen submissions waited behind it. On the console that title works (D709), so its GPU writes the title's heap. A live block is memory the guest holds and writes itself, so the command processor writing it on the guest's behalf reaches nothing the guest could not.

Rejected: