diff options
| author | riastradh <riastradh@NetBSD.org> | 2023-04-23 11:53:00 +0000 |
|---|---|---|
| committer | riastradh <riastradh@NetBSD.org> | 2023-04-23 11:53:00 +0000 |
| commit | 7e84a51f1e0fe056fc0a5c61f12f05119544946e (patch) | |
| tree | 26a81072170c1254e66b9c612a710763b8bba53b /libexec | |
| parent | 57ddfc8e7700239067debf3473f4804ac25bedf7 (diff) | |
dlopen(3): Read _rtld_objtail under the lock.
XXX pullup-8
XXX pullup-9
XXX pullup-10
Diffstat (limited to 'libexec')
| -rw-r--r-- | libexec/ld.elf_so/rtld.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/libexec/ld.elf_so/rtld.c b/libexec/ld.elf_so/rtld.c index 8e152d59586..484389fc246 100644 --- a/libexec/ld.elf_so/rtld.c +++ b/libexec/ld.elf_so/rtld.c @@ -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; |
