buffer_cache: avoid overflow in usage tracker (#13166)

This commit is contained in:
liamwhite 2024-02-27 09:39:11 -05:00 committed by GitHub
parent 9bc85dda5f
commit 1de37306a5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -26,6 +26,9 @@ public:
void Track(u64 offset, u64 size) noexcept { void Track(u64 offset, u64 size) noexcept {
const size_t page = offset >> PAGE_SHIFT; const size_t page = offset >> PAGE_SHIFT;
const size_t page_end = (offset + size) >> PAGE_SHIFT; const size_t page_end = (offset + size) >> PAGE_SHIFT;
if (page_end < page || page_end >= pages.size()) {
return;
}
TrackPage(page, offset, size); TrackPage(page, offset, size);
if (page == page_end) { if (page == page_end) {
return; return;
@ -41,6 +44,9 @@ public:
[[nodiscard]] bool IsUsed(u64 offset, u64 size) const noexcept { [[nodiscard]] bool IsUsed(u64 offset, u64 size) const noexcept {
const size_t page = offset >> PAGE_SHIFT; const size_t page = offset >> PAGE_SHIFT;
const size_t page_end = (offset + size) >> PAGE_SHIFT; const size_t page_end = (offset + size) >> PAGE_SHIFT;
if (page_end < page || page_end >= pages.size()) {
return false;
}
if (IsPageUsed(page, offset, size)) { if (IsPageUsed(page, offset, size)) {
return true; return true;
} }