1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 10:07:44 +00:00

LibELF: Fix unaligned writes in the relocation code

This commit is contained in:
Gunnar Beutner 2021-07-26 15:04:10 +02:00 committed by Andreas Kling
parent daeb371180
commit ff292fbe5a

View file

@ -53,10 +53,15 @@ bool perform_relative_relocations(FlatPtr base_address)
#else #else
VERIFY(ELF64_R_TYPE(relocation->r_info) == R_X86_64_RELATIVE); VERIFY(ELF64_R_TYPE(relocation->r_info) == R_X86_64_RELATIVE);
#endif #endif
if (use_addend) auto* patch_address = (FlatPtr*)(base_address + relocation->r_offset);
*(FlatPtr*)(base_address + relocation->r_offset) = base_address + relocation->r_addend; FlatPtr relocated_address;
else if (use_addend) {
*(FlatPtr*)(base_address + relocation->r_offset) += base_address; relocated_address = base_address + relocation->r_addend;
} else {
__builtin_memcpy(&relocated_address, patch_address, sizeof(relocated_address));
relocated_address += base_address;
}
__builtin_memcpy(patch_address, &relocated_address, sizeof(relocated_address));
} }
return true; return true;