summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar liamwhite2024-02-27 09:39:11 -0500
committerGravatar GitHub2024-02-27 15:39:11 +0100
commit1de37306a521a3ee22f1f6703fa9c2f8169dcacb (patch)
treeb6c1b734b448c1de56c9fbb6113f8e8baa0cc741
parenttexture_cache: use two-pass collection for costly load resources (#13096) (diff)
downloadyuzu-1de37306a521a3ee22f1f6703fa9c2f8169dcacb.tar.gz
yuzu-1de37306a521a3ee22f1f6703fa9c2f8169dcacb.tar.xz
yuzu-1de37306a521a3ee22f1f6703fa9c2f8169dcacb.zip
buffer_cache: avoid overflow in usage tracker (#13166)
-rw-r--r--src/video_core/buffer_cache/usage_tracker.h6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/video_core/buffer_cache/usage_tracker.h b/src/video_core/buffer_cache/usage_tracker.h
index 5f8688d31..ae511ccb6 100644
--- a/src/video_core/buffer_cache/usage_tracker.h
+++ b/src/video_core/buffer_cache/usage_tracker.h
@@ -26,6 +26,9 @@ public:
26 void Track(u64 offset, u64 size) noexcept { 26 void Track(u64 offset, u64 size) noexcept {
27 const size_t page = offset >> PAGE_SHIFT; 27 const size_t page = offset >> PAGE_SHIFT;
28 const size_t page_end = (offset + size) >> PAGE_SHIFT; 28 const size_t page_end = (offset + size) >> PAGE_SHIFT;
29 if (page_end < page || page_end >= pages.size()) {
30 return;
31 }
29 TrackPage(page, offset, size); 32 TrackPage(page, offset, size);
30 if (page == page_end) { 33 if (page == page_end) {
31 return; 34 return;
@@ -41,6 +44,9 @@ public:
41 [[nodiscard]] bool IsUsed(u64 offset, u64 size) const noexcept { 44 [[nodiscard]] bool IsUsed(u64 offset, u64 size) const noexcept {
42 const size_t page = offset >> PAGE_SHIFT; 45 const size_t page = offset >> PAGE_SHIFT;
43 const size_t page_end = (offset + size) >> PAGE_SHIFT; 46 const size_t page_end = (offset + size) >> PAGE_SHIFT;
47 if (page_end < page || page_end >= pages.size()) {
48 return false;
49 }
44 if (IsPageUsed(page, offset, size)) { 50 if (IsPageUsed(page, offset, size)) {
45 return true; 51 return true;
46 } 52 }