diff options
author | 2002-03-17 04:46:53 +0000 | |
---|---|---|
committer | 2002-03-17 04:46:53 +0000 | |
commit | a526b250cd49b795808165b6bbca846c7c9dd248 (patch) | |
tree | b2c4a61101f47baca2ea48ae148f993a5c176b00 | |
parent | Examine correct fields in mount(8) output to determine if root (diff) | |
download | wireguard-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.c | 6 |
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); } |