diff options
author | kib <kib@FreeBSD.org> | 2012-03-27 14:10:15 +0000 |
---|---|---|
committer | kib <kib@FreeBSD.org> | 2012-03-27 14:10:15 +0000 |
commit | 4d91f78223dc434eb86fb079f5dbabed9a16eb79 (patch) | |
tree | 74569b2be2f16be7410069e0c69bc01a12326cf1 /libexec/rtld-elf/rtld.c | |
parent | 2f1011004558a0b27cd95f1374185e37450b80e3 (diff) | |
download | FreeBSD-src-4d91f78223dc434eb86fb079f5dbabed9a16eb79.zip FreeBSD-src-4d91f78223dc434eb86fb079f5dbabed9a16eb79.tar.gz |
Prevent rtld_verify_object_versions() from being called several times
for the same object. This can happen when object is a dependency of the
dlopen()ed dso. When called several times, we waste time due to unneeded
processing, and memory, because obj->vertab is allocated anew on each
iteration.
Reviewed by: kan
MFC after: 2 weeks
Diffstat (limited to 'libexec/rtld-elf/rtld.c')
-rw-r--r-- | libexec/rtld-elf/rtld.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/libexec/rtld-elf/rtld.c b/libexec/rtld-elf/rtld.c index e081e09..c4607b2 100644 --- a/libexec/rtld-elf/rtld.c +++ b/libexec/rtld-elf/rtld.c @@ -4158,6 +4158,10 @@ rtld_verify_object_versions(Obj_Entry *obj) const Obj_Entry *depobj; int maxvernum, vernum; + if (obj->ver_checked) + return (0); + obj->ver_checked = true; + maxvernum = 0; /* * Walk over defined and required version records and figure out |