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
This commit is contained in:
Horst Schirmeier
2016-08-06 17:29:30 +02:00
parent a2798cc2bf
commit fbd788f05e
3 changed files with 3 additions and 3 deletions

View File

@ -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 BX_SELECTED_CONTROLLER(channel).buffer[7] = 0; // reserved
// Data // Data
memcpy(BX_SELECTED_CONTROLLER(channel).buffer + 8, src, size); memmove(BX_SELECTED_CONTROLLER(channel).buffer + 8, src, size);
} }
void BX_CPP_AttrRegparmN(1) void BX_CPP_AttrRegparmN(1)

View File

@ -304,7 +304,7 @@ void bx_pci_ide_c::timer()
// To avoid buffer overflow reset buffer pointers and copy data if necessary // 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; count = BX_PIDE_THIS s.bmdma[channel].buffer_top - BX_PIDE_THIS s.bmdma[channel].buffer_idx;
if (count > 0) { 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_top = BX_PIDE_THIS s.bmdma[channel].buffer + count;
BX_PIDE_THIS s.bmdma[channel].buffer_idx = BX_PIDE_THIS s.bmdma[channel].buffer; BX_PIDE_THIS s.bmdma[channel].buffer_idx = BX_PIDE_THIS s.bmdma[channel].buffer;

View File

@ -448,7 +448,7 @@ int bx_sound_linux_c::alsa_pcm_write()
BX_ERROR(("ALSA: short write, write %d frames", ret)); BX_ERROR(("ALSA: short write, write %d frames", ret));
} }
audio_bufsize -= alsa_bufsize; 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)) { if ((audio_bufsize == 0) && (alsa_buffer != NULL)) {
free(alsa_buffer); free(alsa_buffer);