@samitouri / QOSamiQemu / commits / d2d7e63da8

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 }