vm: region: memmove_v() now supports iovec arrays stored in userspace

This commit is contained in:
2026-02-21 11:20:09 +00:00
parent 0680b73461
commit e1e025ab6a

View File

@@ -876,6 +876,15 @@ kern_status_t vm_region_map_object(
return KERN_INVALID_ARGUMENT; return KERN_INVALID_ARGUMENT;
} }
tracek("vm_region_map_object(%s, %zx, %s, %zx, %zx, %x, %p)",
region->vr_name,
region_offset,
object->vo_name,
object_offset,
length,
prot,
out);
struct vm_region_mapping *mapping struct vm_region_mapping *mapping
= vm_cache_alloc(&mapping_cache, VM_NORMAL); = vm_cache_alloc(&mapping_cache, VM_NORMAL);
if (!mapping) { if (!mapping) {
@@ -1339,8 +1348,8 @@ extern kern_status_t vm_region_memmove_v(
size_t bytes_to_move) size_t bytes_to_move)
{ {
struct iovec_iterator src, dest; struct iovec_iterator src, dest;
iovec_iterator_begin(&src, src_vecs, nr_src_vecs); iovec_iterator_begin_user(&src, src_region, src_vecs, nr_src_vecs);
iovec_iterator_begin(&dest, dest_vecs, nr_dest_vecs); iovec_iterator_begin_user(&dest, dest_region, dest_vecs, nr_dest_vecs);
iovec_iterator_seek(&src, src_offset); iovec_iterator_seek(&src, src_offset);
iovec_iterator_seek(&dest, dest_offset); iovec_iterator_seek(&dest, dest_offset);