diff options
author | Ivan Maidanski <ivmai@mail.ru> | 2015-10-26 08:25:54 +0300 |
---|---|---|
committer | Ivan Maidanski <ivmai@mail.ru> | 2015-10-26 08:25:54 +0300 |
commit | 7a1f75f30855ee1984463d085d3c90e6b2c05940 (patch) | |
tree | d287012cf19c5b2a6714c5fb943b1acda5057818 /dyn_load.c | |
parent | 0a37e6034137c7d5a4472b657739a1659fb20ee3 (diff) | |
download | bdwgc-7a1f75f30855ee1984463d085d3c90e6b2c05940.tar.gz |
Check DATASTART is less than DATAEND even assertions off
* dyn_load.c (GC_register_dynamic_libraries_dl_iterate_phdr):
Abort with the appropriate message if DATASTART is NULL or greater than
DATAEND (same for DATASTART2 and DATAEND2).
* os_dep.c (GC_init_linux_data_start, GC_register_data_segments):
Likewise.
* os_dep.c (GC_init_linux_data_start, GC_register_data_segments):
Remove assertion about DATASTART and DATAEND.
* os_dep.c (GC_init_linux_data_start): Code refactoring.
Diffstat (limited to 'dyn_load.c')
-rw-r--r-- | dyn_load.c | 9 |
1 files changed, 9 insertions, 0 deletions
@@ -624,11 +624,20 @@ STATIC GC_bool GC_register_dynamic_libraries_dl_iterate_phdr(void) # else dataend = DATAEND; # endif + if (NULL == datastart || (word)datastart > (word)dataend) + ABORT_ARG2("Wrong DATASTART/END pair", + ": %p .. %p", datastart, dataend); /* dl_iterate_phdr may forget the static data segment in */ /* statically linked executables. */ GC_add_roots_inner(datastart, dataend, TRUE); # if defined(DATASTART2) + if ((word)DATASTART2 - 1U >= (word)DATAEND2) { + /* Subtract one to check also for NULL */ + /* without a compiler warning. */ + ABORT_ARG2("Wrong DATASTART/END2 pair", + ": %p .. %p", DATASTART2, DATAEND2); + } GC_add_roots_inner(DATASTART2, DATAEND2, TRUE); # endif } |