freebsd-dev/libexec/rtld-elf
Konstantin Belousov 630caa95d4 rtld: preserve the 'seen' state of the dlerror message in errmsg_save()
rtld preserves its current error message around calls to user init/fini
lists, to not override original error with potential secondary errors
caused by user code recursing into rtld.  After 4d9128da54,
the preservation of the string itself is not enough, the 'seen'
indicator must be preserved as well.  Otherwise, since new code does not
clear string (it cannot), call to _rtld_error() from errmsg_restore()
revived whatever message was consumed last.

Change errmsg_save() to return structure recording both 'seen' indicator
and the message, if any.

PR:	255698
Reported by:	Eugene M. Kim <astralblue@gmail.com>
Sponsored by:	The FreeBSD Foundation
MFC after:	3 days
2021-05-11 02:47:00 +03:00
..
aarch64 rtld: define TLS_DTV_OFFSET on all architectures 2021-04-09 23:46:24 +03:00
amd64 rtld: use _get_tp() in __tls_get_addr() 2021-04-09 23:46:24 +03:00
arm rtld: define TLS_DTV_OFFSET on all architectures 2021-04-09 23:46:24 +03:00
i386 rtld: use _get_tp() in __tls_get_addr() 2021-04-09 23:46:24 +03:00
mips rtld: use _get_tp() in __tls_get_addr() 2021-04-09 23:46:24 +03:00
powerpc rtld-elf(1): remove obsolete pre_init() hook 2020-12-25 19:47:46 +01:00
powerpc64 rtld-elf(1): remove obsolete pre_init() hook 2020-12-25 19:47:46 +01:00
riscv rtld-elf(1): remove obsolete pre_init() hook 2020-12-25 19:47:46 +01:00
rtld-libc rtld: avoid recursing on rtld_bind_lock for write 2021-04-09 23:46:24 +03:00
tests rtld: introduce PRELOAD_FDS 2021-03-24 23:40:48 +01:00
debug.c libexec: adoption of SPDX licensing ID tags. 2017-11-27 15:25:02 +00:00
debug.h Use rtld_putstr() instead of write() for the rtld msg() macro 2019-06-26 15:43:26 +00:00
libmap.c rtld: call close(2) after errno is saved 2021-01-02 04:43:32 +02:00
libmap.conf Move libmap.conf to libexec/rtld-elf/ 2018-09-18 00:25:00 +00:00
libmap.h rtld-elf: make it compile with WARNS=3 2018-10-29 21:08:11 +00:00
Makefile rtld-elf: link libcompiler_rt on all architectures 2020-12-28 00:44:25 -08:00
Makefile.depend new depends 2015-06-16 23:37:19 +00:00
map_object.c Undo 'fix off by one' part of r365360. 2020-09-05 22:48:27 +00:00
paths.h rtld-elf: compile with WANRS=4 warnings other than -Wcast-align 2018-10-29 21:08:19 +00:00
rtld_lock.c rtld: make dlerror() thread-local 2021-04-10 17:33:34 +03:00
rtld_lock.h rtld_lock.h: add some comments about versioning of struct RtldLockInfo 2021-04-11 11:16:13 +03:00
rtld_malloc.c Remove remnants of optimization for > pagesize allocations. 2019-09-02 08:03:29 +00:00
rtld_malloc.h Add header file missed in r343564. 2019-01-29 22:45:24 +00:00
rtld_printf.c Reduce size of rtld by 22% by pulling in less code from libc 2019-06-30 11:49:58 +00:00
rtld_printf.h Use rtld_putstr() instead of write() for the rtld msg() macro 2019-06-26 15:43:26 +00:00
rtld_tls.h Remove sparc64 specific parts of rtld-elf. 2020-02-26 18:49:25 +00:00
rtld_utrace.h Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
rtld.1 rtld dl_iterate_phdr(): dlpi_tls_data is wrong 2021-04-06 03:23:08 +03:00
rtld.c rtld: preserve the 'seen' state of the dlerror message in errmsg_save() 2021-05-11 02:47:00 +03:00
rtld.h rtld: unstaticise lockinfo and obj_from_addr() 2021-04-10 17:33:33 +03:00
Symbol.map rtld dl_iterate_phdr(): dlpi_tls_data is wrong 2021-04-06 03:23:08 +03:00
xmalloc.c Make p_vaddr % p_align == p_offset % p_align for (some) TLS segments. 2020-04-04 22:37:50 +00:00