diff options
| author | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-09-28 09:31:48 -0400 |
|---|---|---|
| committer | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-09-28 09:31:48 -0400 |
| commit | 7023742accd4b2bf5dbeaf82907e465c905dbdad (patch) | |
| tree | d4dc733894235a8198bb38909701387a22d86cb2 /firmware | |
| parent | ab393b15abac5b6c0790bb4c4fd86bc62c531bf4 (diff) | |
| download | open-iov-7023742accd4b2bf5dbeaf82907e465c905dbdad.tar.gz open-iov-7023742accd4b2bf5dbeaf82907e465c905dbdad.zip | |
sema: never execute work decoded from swept RAM; pin only tracker sems
The content sweep reads arbitrary guest RAM and ran the full push decoder on
every page, so fabricated method streams in unrelated data executed
fills/copies: one boot scanned 65M pages, 'decoded' 124k pushes and ran
dozens of memsets from false positives - writes into live guest memory (a
guest kernel crashed in nvidia_uvm right after such a boot).
- Swept pages now only permit the bounded semaphore-release writes; fills
and copies execute only for pushes the pump read through a trusted ring
translation.
- Pushes read for a compute (GR) channel apply releases only: their method
space is not the copy engine's, so aliased encodings must never become
memory writes.
- sempages.py derives the pages to pin from the client's tracker objects
(sem object + sem memory) instead of matching bare sem-object shapes, which
pinned 140 pages where the client has ~53 sems; shape scan remains as a
fallback when no tracker resolves.
Diffstat (limited to 'firmware')
0 files changed, 0 insertions, 0 deletions
