java-topology/defects/ppsspp/patch/ppsspp-0003-irjit-bypage-block-removal.patch

21 lines
1 KiB
Diff

# UNDF: UNDF-2026-000000903
--- a/Core/MIPS/IR/IRJit.cpp
+++ b/Core/MIPS/IR/IRJit.cpp
@@ -363,4 +363,5 @@
for (u32 page = startPage; page <= endPage; ++page) {
- auto iter = std::find(byPage_[page].begin(), byPage_[page].end(), blockIndex);
+ auto& pageBlocks = byPage_[page];
+ auto iter = std::find(pageBlocks.begin(), pageBlocks.end(), blockIndex);
+ // TODO: Replace vector with unordered_set for O(1) removal
if (iter != byPage_[page].end()) {
byPage_[page].erase(iter);
#
# CWE-407: IRBlockCache::RemoveBlockFromPageLookup scans byPage_[page]
# vector with std::find for block removal — O(B) per page where B =
# blocks in that page. Called for every page spanned by the block being
# removed. When self-modifying code or icache flushes trigger frequent
# block invalidation, pages with many compiled blocks degrade.
# Fix: replace the vector<int> per page with an unordered_set<int> for
# O(1) membership test and removal.
# Severity: MEDIUM — JIT block invalidation is triggered by
# sceKernelIcacheClearAll and self-modifying code patterns.