Module Name: src Committed By: riastradh Date: Sun Apr 23 11:53:00 UTC 2023
Modified Files: src/libexec/ld.elf_so: rtld.c Log Message: dlopen(3): Read _rtld_objtail under the lock. XXX pullup-8 XXX pullup-9 XXX pullup-10 To generate a diff of this commit: cvs rdiff -u -r1.212 -r1.213 src/libexec/ld.elf_so/rtld.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/libexec/ld.elf_so/rtld.c diff -u src/libexec/ld.elf_so/rtld.c:1.212 src/libexec/ld.elf_so/rtld.c:1.213 --- src/libexec/ld.elf_so/rtld.c:1.212 Tue Sep 13 10:18:58 2022 +++ src/libexec/ld.elf_so/rtld.c Sun Apr 23 11:53:00 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: rtld.c,v 1.212 2022/09/13 10:18:58 riastradh Exp $ */ +/* $NetBSD: rtld.c,v 1.213 2023/04/23 11:53:00 riastradh Exp $ */ /* * Copyright 1996 John D. Polstra. @@ -40,7 +40,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: rtld.c,v 1.212 2022/09/13 10:18:58 riastradh Exp $"); +__RCSID("$NetBSD: rtld.c,v 1.213 2023/04/23 11:53:00 riastradh Exp $"); #endif /* not lint */ #include <sys/param.h> @@ -1026,7 +1026,7 @@ __strong_alias(__dlopen,dlopen) void * dlopen(const char *name, int mode) { - Obj_Entry **old_obj_tail = _rtld_objtail; + Obj_Entry **old_obj_tail; Obj_Entry *obj = NULL; int flags = _RTLD_DLOPEN; bool nodelete; @@ -1038,6 +1038,8 @@ dlopen(const char *name, int mode) _rtld_exclusive_enter(&mask); + old_obj_tail = _rtld_objtail; + flags |= (mode & RTLD_GLOBAL) ? _RTLD_GLOBAL : 0; flags |= (mode & RTLD_NOLOAD) ? _RTLD_NOLOAD : 0;