svn commit: r235054 - head/libexec/rtld-elf
Konstantin Belousov
kib at FreeBSD.org
Sat May 5 11:26:09 UTC 2012
Author: kib
Date: Sat May 5 11:26:08 2012
New Revision: 235054
URL: http://svn.freebsd.org/changeset/base/235054
Log:
Work around a situation where symlook_obj() could be called for the
object for which digest_dynamic1() was not done yet. Just return
EINVAL and do not try to dereference NULL buckets hash array.
This seems to happen on ia64 for rtld object itself, where the
R_IA_64_FPTR64LSB relocations require symbol lookup. The dynamic
linker itself does not rely on identity of the C-level function
pointers (i.e. function descriptors).
Reported and reviewed by: marcel
MFC after: 8 days
Modified:
head/libexec/rtld-elf/rtld.c
Modified: head/libexec/rtld-elf/rtld.c
==============================================================================
--- head/libexec/rtld-elf/rtld.c Sat May 5 10:05:13 2012 (r235053)
+++ head/libexec/rtld-elf/rtld.c Sat May 5 11:26:08 2012 (r235054)
@@ -3480,13 +3480,15 @@ symlook_obj(SymLook *req, const Obj_Entr
int flags, res, mres;
/*
- * There is at least one valid hash at this point, and we prefer to use
- * the faster GNU version if available.
+ * If there is at least one valid hash at this point, we prefer to
+ * use the faster GNU version if available.
*/
if (obj->valid_hash_gnu)
mres = symlook_obj1_gnu(req, obj);
- else
+ else if (obj->valid_hash_sysv)
mres = symlook_obj1_sysv(req, obj);
+ else
+ return (EINVAL);
if (mres == 0) {
if (obj->needed_filtees != NULL) {
More information about the svn-src-all
mailing list