summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordrahn <drahn@openbsd.org>2002-03-17 04:46:53 +0000
committerdrahn <drahn@openbsd.org>2002-03-17 04:46:53 +0000
commita526b250cd49b795808165b6bbca846c7c9dd248 (patch)
treeb2c4a61101f47baca2ea48ae148f993a5c176b00
parentExamine correct fields in mount(8) output to determine if root (diff)
downloadwireguard-openbsd-a526b250cd49b795808165b6bbca846c7c9dd248.tar.xz
wireguard-openbsd-a526b250cd49b795808165b6bbca846c7c9dd248.zip
Keep _dl_last_object in sync with reality if last element in list is deleted.
allocated memory is not necessarily 0ed, make sure next pointer is inited.
-rw-r--r--libexec/ld.so/resolve.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/libexec/ld.so/resolve.c b/libexec/ld.so/resolve.c
index 3249f8e0fd7..ad3fb94dedf 100644
--- a/libexec/ld.so/resolve.c
+++ b/libexec/ld.so/resolve.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: resolve.c,v 1.6 2002/02/21 23:17:53 drahn Exp $ */
+/* $OpenBSD: resolve.c,v 1.7 2002/03/17 04:46:53 drahn Exp $ */
/*
* Copyright (c) 1998 Per Fogelstrom, Opsycon AB
@@ -62,6 +62,7 @@ _dl_add_object(const char *objname, Elf_Dyn *dynp, const u_long *dl_data,
object = _dl_malloc(sizeof(elf_object_t));
+ object->next = NULL;
if (_dl_objects == 0) { /* First object ? */
_dl_last_object = _dl_objects = object;
} else {
@@ -147,6 +148,9 @@ _dl_remove_object(elf_object_t *object)
if(object->next) {
object->next->prev = object->prev;
}
+ if (_dl_last_object == object) {
+ _dl_last_object = object->prev;
+ }
if(object->load_name) {
_dl_free(object->load_name);
}