diff --git a/Core/ELF/ElfReader.cpp b/Core/ELF/ElfReader.cpp index 463eede050..10929c06f8 100644 --- a/Core/ELF/ElfReader.cpp +++ b/Core/ELF/ElfReader.cpp @@ -262,6 +262,10 @@ void ElfReader::LoadRelocations2(int rel_seg) }else{ addr_seg = seg; relocate_to = segmentVAddr[addr_seg]; + if (!Memory::IsValidAddress(relocate_to)) { + ERROR_LOG(LOADER, "ELF: Bad address to relocate to: %08x", relocate_to); + continue; + } if((flag&0x06)==0x00){ rel_offset = cmd; @@ -290,6 +294,10 @@ void ElfReader::LoadRelocations2(int rel_seg) rel_offset = rel_base+segmentVAddr[off_seg]; + if (!Memory::IsValidAddress(relocate_to)) { + ERROR_LOG(LOADER, "ELF: Bad rel_offset: %08x", rel_offset); + continue; + } if((flag&0x38)==0x00){ lo16 = 0;