vm: object: fix iterator using wrong buffer offset when seek exceeds current buffer size

This commit is contained in:
2026-02-21 11:07:12 +00:00
parent 0bae39e550
commit ed25ee6761

View File

@@ -96,8 +96,12 @@ static kern_status_t object_iterator_seek(
}
if (it->it_pg) {
it->it_buf = vm_page_get_vaddr(it->it_pg);
virt_addr_t vaddr = (virt_addr_t)vm_page_get_vaddr(it->it_pg);
vaddr += (it->it_offset & VM_PAGE_MASK);
it->it_buf = (void *)vaddr;
it->it_max = vm_page_get_size_bytes(it->it_pg);
it->it_max -= (it->it_offset & VM_PAGE_MASK);
} else {
struct btree_node *n = btree_first(&it->it_obj->vo_pages);
struct vm_page *pg
@@ -112,8 +116,9 @@ static kern_status_t object_iterator_seek(
}
it->it_buf = NULL;
it->it_max = pg ? pg->p_vmo_offset
: it->it_obj->vo_size - it->it_offset;
it->it_max
= pg ? pg->p_vmo_offset - (it->it_offset & VM_PAGE_MASK)
: it->it_obj->vo_size - it->it_offset;
}
return KERN_OK;