Index: libexec/ld.so/library_subr.c =================================================================== RCS file: /mount/openbsd/cvs/src/libexec/ld.so/library_subr.c,v diff -u -p -u -p -r1.55 library_subr.c --- libexec/ld.so/library_subr.c 27 Apr 2023 12:27:56 -0000 1.55 +++ libexec/ld.so/library_subr.c 20 Dec 2024 16:29:43 -0000 @@ -533,6 +533,17 @@ _dl_link_child(elf_object_t *dep, elf_ob } void +_dl_unlink_children(void) +{ + elf_object_t *node; + + for (node = _dl_objects; node != NULL; node = node->next) { + if (node->refcount > 0) + _dl_child_refcnt_decrement(node); + } +} + +void object_vec_grow(struct object_vector *vec, int more) { vec->alloc += more; Index: libexec/ld.so/loader.c =================================================================== RCS file: /mount/openbsd/cvs/src/libexec/ld.so/loader.c,v diff -u -p -u -p -r1.223 loader.c --- libexec/ld.so/loader.c 22 Jan 2024 02:08:31 -0000 1.223 +++ libexec/ld.so/loader.c 20 Dec 2024 16:29:43 -0000 @@ -202,6 +202,7 @@ _dl_dtors(void) /* ORDER? */ _dl_unload_dlopen(); + _dl_unlink_children(); DL_DEB(("doing dtors\n")); Index: libexec/ld.so/resolve.h =================================================================== RCS file: /mount/openbsd/cvs/src/libexec/ld.so/resolve.h,v diff -u -p -u -p -r1.108 resolve.h --- libexec/ld.so/resolve.h 21 May 2024 05:00:47 -0000 1.108 +++ libexec/ld.so/resolve.h 20 Dec 2024 16:29:43 -0000 @@ -318,6 +318,7 @@ int _dl_load_dep_libs(elf_object_t *obje int _dl_rtld(elf_object_t *object); void _dl_call_init(elf_object_t *object); void _dl_link_child(elf_object_t *dep, elf_object_t *p); +void _dl_unlink_children(void); void _dl_link_grpsym(elf_object_t *object); void _dl_cache_grpsym_list_setup(elf_object_t *_object); void _dl_link_grpref(elf_object_t *load_group, elf_object_t *load_object);