mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-10-23 09:03:22 -05:00
Register copied the protection it had recorded for pages it already watched over the protection the kernel had just reported. A guest that reserves address space, which registers it as PROT_NONE, then maps direct memory over it read-write and registers it again kept the stale PROT_NONE. Collect only write-protects pages with PROT_WRITE, so writes to that memory were reported once and never again. With PPSA12544 on the macOS port, the title menu text blinked and glyphs went missing. Register now keeps a recorded protection only where its own write protection explains what the kernel reports, and takes the kernel's protection otherwise. A protected page that was mapped again also loses its protected mark, so erase no longer restores the old protection over the new mapping. The kernel is read under the lock, so a concurrent Collect cannot protect a page between the read and the merge. Test write_watch_mapped: a reservation, a mapping over it and a second registration keep reporting writes, and a protected page reserved again stays PROT_NONE. AI-assisted: yes