mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-10-22 02:39:05 +02:00
Find4GBBase found 256 MB of free address space for the views and then unmapped it, so the gaps between the views went back to the system. On a 32-bit Android device, a running game had malloc heaps between VRAM and RAM and GPU driver buffers just past RAM, and masked guest addresses (bits 30-31 cleared) reach a whole GB above base, mostly heap. A stray guest access landed in those silently instead of faulting, and another thread could even map something where a view was about to go, which the view's MAP_FIXED then replaced. That fits the 32-bit-only crashes deep in system libraries and in our own heap structures. Keep the range reserved as PROT_NONE and map the views over it, putting the reservation back when a view is released. Mask out bits 28-29 too on 32-bit (no valid address has them), so accesses stay inside the reservation. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>