system/memory: Use memmove() for directly accessible regions
Similar to what's done in commit 4a73aee88140 ("softmmu: Use memmove in flatview_write_continue"), there are more sites where the overlapping source and destination buffer are allowed for the directly accessible regions. Use memmove() in those sites, listed as below. hw/remote/vfio-user-obj.c::vfu_object_mr_rw include/system/memory.h::address_space_read system/physmem.c::flatview_read_continue_step Signed-off-by: Gavin Shan <gshan@redhat.com> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Peter Xu <peterx@redhat.com> Link: https://lore.kernel.org/r/20260728031731.286666-2-gshan@redhat.com Signed-off-by: Peter Xu <peterx@redhat.com>
Gavin Shan committed
Jul 28, 2026 at 13:17 UTC
d2d7e63da8e9a6ac4bb23e3ecc1de468530c9437
3 files changed
+4
-4
hw/remote/vfio-user-obj.c
+2
-2
@@ -375,9 +375,9 @@ static int vfu_object_mr_rw(MemoryRegion *mr, uint8_t *buf, hwaddr offset,
375
ram_ptr = memory_region_get_ram_ptr(mr);
376
377
if (is_write) {
378
- memcpy((ram_ptr + offset), buf, size);
378
+ memmove((ram_ptr + offset), buf, size);
379
} else {
380
- memcpy(buf, (ram_ptr + offset), size);
380
+ memmove(buf, (ram_ptr + offset), size);
381
}
382
383
return 0;
include/system/memory.h
+1
-1
@@ -2741,7 +2741,7 @@ MemTxResult address_space_read(const AddressSpace *as, hwaddr addr,
2741
mr = flatview_translate(fv, addr, &addr1, &l, false, attrs);
2742
if (len == l && memory_access_is_direct(mr, false, attrs)) {
2743
ptr = qemu_map_ram_ptr(mr->ram_block, addr1);
2744
- memcpy(buf, ptr, len);
2744
+ memmove(buf, ptr, len);
2745
} else {
2746
result = flatview_read_continue(fv, addr, attrs, buf, len,
2747
addr1, l, mr);
system/physmem.c
+1
-1
@@ -3363,7 +3363,7 @@ static MemTxResult flatview_read_continue_step(MemTxAttrs attrs, uint8_t *buf,
3363
uint8_t *ram_ptr = qemu_ram_ptr_length(mr->ram_block, mr_addr, l,
3364
false, false);
3365
3366
- memcpy(buf, ram_ptr, *l);
3366
+ memmove(buf, ram_ptr, *l);
3367
3368
return MEMTX_OK;
3369
}