git: b27eb9ce96b8 - main - __cxa_thread_call_dtors(3): fix dtor pointer validity check

From: Konstantin Belousov <kib_at_FreeBSD.org>
Date: Fri, 03 May 2024 23:23:34 UTC
The branch main has been updated by kib:

URL: https://cgit.FreeBSD.org/src/commit/?id=b27eb9ce96b838622e125fd969e8dc4914aabe18

commit b27eb9ce96b838622e125fd969e8dc4914aabe18
Author:     Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2024-05-03 09:32:01 +0000
Commit:     Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2024-05-03 23:23:15 +0000

    __cxa_thread_call_dtors(3): fix dtor pointer validity check
    
    When checking for the destructor pointer belonging to some still
    loaded dso, do not limit the possible dso to the one instantiated the
    destructor. For instance, dso could set up the dtr pointer to a function
    from libcxx.
    
    PR:     278701
    Reported by:    vd
    Reviewed by:    dim, emaste, markj
    Sponsored by:   The FreeBSD Foundation
    MFC after:      1 week
    Differential revision:  https://reviews.freebsd.org/D45074
---
 lib/libc/stdlib/cxa_thread_atexit_impl.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/libc/stdlib/cxa_thread_atexit_impl.c b/lib/libc/stdlib/cxa_thread_atexit_impl.c
index f95384b30347..3123bd12dca8 100644
--- a/lib/libc/stdlib/cxa_thread_atexit_impl.c
+++ b/lib/libc/stdlib/cxa_thread_atexit_impl.c
@@ -102,7 +102,7 @@ walk_cb_call(struct cxa_thread_dtor *dtor)
 {
 	struct dl_phdr_info phdr_info;
 
-	if (_rtld_addr_phdr(dtor->dso, &phdr_info) &&
+	if (_rtld_addr_phdr(dtor->func, &phdr_info) &&
 	    __elf_phdr_match_addr(&phdr_info, dtor->func))
 		dtor->func(dtor->obj);
 	else