From fbd788f05e818b60126746b9fc52c69aedcca5ce Mon Sep 17 00:00:00 2001 From: Horst Schirmeier Date: Sat, 6 Aug 2016 17:29:30 +0200 Subject: [PATCH] bochs: backport overlapping memcpy fix Upstream SVN r12563: "Bugfix: use memmove() if source and destination range can overlap (found with valgrind)." (Manually backported, the code structure has significantly changed before this fix.) Change-Id: Id176fb5b0aca806908cfb06f06bb5a7221ccc9c4 --- simulators/bochs/iodev/harddrv.cc | 2 +- simulators/bochs/iodev/pci_ide.cc | 2 +- simulators/bochs/iodev/soundlnx.cc | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/simulators/bochs/iodev/harddrv.cc b/simulators/bochs/iodev/harddrv.cc index 773ad0c6..63d082c1 100644 --- a/simulators/bochs/iodev/harddrv.cc +++ b/simulators/bochs/iodev/harddrv.cc @@ -3120,7 +3120,7 @@ void bx_hard_drive_c::init_mode_sense_single(Bit8u channel, const void* src, int BX_SELECTED_CONTROLLER(channel).buffer[7] = 0; // reserved // Data - memcpy(BX_SELECTED_CONTROLLER(channel).buffer + 8, src, size); + memmove(BX_SELECTED_CONTROLLER(channel).buffer + 8, src, size); } void BX_CPP_AttrRegparmN(1) diff --git a/simulators/bochs/iodev/pci_ide.cc b/simulators/bochs/iodev/pci_ide.cc index a8a9639e..27942bb5 100644 --- a/simulators/bochs/iodev/pci_ide.cc +++ b/simulators/bochs/iodev/pci_ide.cc @@ -304,7 +304,7 @@ void bx_pci_ide_c::timer() // To avoid buffer overflow reset buffer pointers and copy data if necessary count = BX_PIDE_THIS s.bmdma[channel].buffer_top - BX_PIDE_THIS s.bmdma[channel].buffer_idx; if (count > 0) { - memcpy(BX_PIDE_THIS s.bmdma[channel].buffer, BX_PIDE_THIS s.bmdma[channel].buffer_idx, count); + memmove(BX_PIDE_THIS s.bmdma[channel].buffer, BX_PIDE_THIS s.bmdma[channel].buffer_idx, count); } BX_PIDE_THIS s.bmdma[channel].buffer_top = BX_PIDE_THIS s.bmdma[channel].buffer + count; BX_PIDE_THIS s.bmdma[channel].buffer_idx = BX_PIDE_THIS s.bmdma[channel].buffer; diff --git a/simulators/bochs/iodev/soundlnx.cc b/simulators/bochs/iodev/soundlnx.cc index 8cb5a5c4..9fbe79cf 100644 --- a/simulators/bochs/iodev/soundlnx.cc +++ b/simulators/bochs/iodev/soundlnx.cc @@ -448,7 +448,7 @@ int bx_sound_linux_c::alsa_pcm_write() BX_ERROR(("ALSA: short write, write %d frames", ret)); } audio_bufsize -= alsa_bufsize; - memcpy(audio_buffer, audio_buffer+alsa_bufsize, audio_bufsize); + memmove(audio_buffer, audio_buffer+alsa_bufsize, audio_bufsize); } if ((audio_bufsize == 0) && (alsa_buffer != NULL)) { free(alsa_buffer);