dm vdo indexer: validate record page numbers better

Move the record_page_number validation check into the
chapter index lookup function in order to detect (and
discard) corrupted values on all paths.

Signed-off-by: Matthew Sakai <msakai@redhat.com>
Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
Cc: stable@vger.kernel.org
This commit is contained in:
Matthew Sakai 2026-08-11 15:02:34 -04:00 committed by Mikulas Patocka
parent 936293c9f3
commit e3683a76a3
2 changed files with 11 additions and 10 deletions

View File

@ -284,10 +284,17 @@ int uds_search_chapter_index_page(struct delta_index_page *index_page,
if (result != UDS_SUCCESS)
return result;
if (was_entry_found(&entry, address))
*record_page_ptr = uds_get_delta_entry_value(&entry);
else
if (!was_entry_found(&entry, address)) {
*record_page_ptr = NO_CHAPTER_INDEX_ENTRY;
return UDS_SUCCESS;
}
*record_page_ptr = uds_get_delta_entry_value(&entry);
result = VDO_ASSERT(*record_page_ptr < geometry->record_pages_per_chapter,
"0 <= %d < %u", *record_page_ptr,
geometry->record_pages_per_chapter);
if (result != VDO_SUCCESS)
*record_page_ptr = NO_CHAPTER_INDEX_ENTRY;
return UDS_SUCCESS;
return result;
}

View File

@ -891,12 +891,6 @@ int uds_search_cached_record_page(struct volume *volume, struct uds_request *req
if (record_page_number == NO_CHAPTER_INDEX_ENTRY)
return UDS_SUCCESS;
result = VDO_ASSERT(record_page_number < geometry->record_pages_per_chapter,
"0 <= %d < %u", record_page_number,
geometry->record_pages_per_chapter);
if (result != VDO_SUCCESS)
return result;
page_number = geometry->index_pages_per_chapter + record_page_number;
physical_page = map_to_physical_page(&volume->geometry, chapter, page_number);