aot_reloc_x86_64: Fix pointer overflows (#809)

Fix pointer overflow of `(uint8 *)symbol_addr + reloc_addend` detected by UBSan:
```
core/iwasm/aot/arch/aot_reloc_x86_64.c:232:43: runtime error: addition of unsigned offset to 0x000041209004 overflowed to 0x000041209000
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior core/iwasm/aot/arch/aot_reloc_x86_64.c:232:43
```
This commit is contained in:
YAMAMOTO Takashi 2021-11-08 17:15:44 +09:00 committed by GitHub
parent 487072a78e
commit 2613a68108
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -225,12 +225,13 @@ apply_relocation(AOTModule *module, uint8 *target_section_addr,
- get_plt_table_size() - get_plt_table_size()
+ get_plt_item_size() * symbol_index; + get_plt_item_size() * symbol_index;
target_addr = (intptr_t) /* L + A - P */ target_addr = (intptr_t) /* L + A - P */
(plt + reloc_addend - (target_section_addr + reloc_offset)); ((uintptr_t)plt + reloc_addend
- (uintptr_t)(target_section_addr + reloc_offset));
} }
else { else {
target_addr = (intptr_t) /* L + A - P */ target_addr = (intptr_t) /* L + A - P */
((uint8 *)symbol_addr + reloc_addend ((uintptr_t)symbol_addr + reloc_addend
- (target_section_addr + reloc_offset)); - (uintptr_t)(target_section_addr + reloc_offset));
} }
#if defined(BH_PLATFORM_WINDOWS) #if defined(BH_PLATFORM_WINDOWS)