diff options
author | Konstantin Belousov <kib@FreeBSD.org> | 2020-09-05 22:41:31 +0000 |
---|---|---|
committer | Konstantin Belousov <kib@FreeBSD.org> | 2020-09-05 22:41:31 +0000 |
commit | 2b49b95cfa930cec0092188bf1d78a82133a6489 (patch) | |
tree | 07129f7a516ac5d1f7ed89231850598fc4831a56 /libexec/rtld-elf | |
parent | ea0a0939ef94cee0c5533956d130d12966b11593 (diff) | |
download | src-2b49b95cfa930cec0092188bf1d78a82133a6489.tar.gz src-2b49b95cfa930cec0092188bf1d78a82133a6489.zip |
rtld: do not process absent dynamic.
If object has no dynamic phdr, do not try to dereference NULL. This
means that we cannot process any relocation, and that there cannot be
symbols defined, but it is up to static linker to produce meaningful
objects.
PR: 249121
Reported by: wsh@riski.sh
Sponsored by: The FreeBSD Foundation
MFC after: 1 week
Notes
Notes:
svn path=/head/; revision=365368
Diffstat (limited to 'libexec/rtld-elf')
-rw-r--r-- | libexec/rtld-elf/rtld.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/libexec/rtld-elf/rtld.c b/libexec/rtld-elf/rtld.c index 48de9506154c..758725a24320 100644 --- a/libexec/rtld-elf/rtld.c +++ b/libexec/rtld-elf/rtld.c @@ -1089,7 +1089,10 @@ digest_dynamic1(Obj_Entry *obj, int early, const Elf_Dyn **dyn_rpath, *dyn_runpath = NULL; obj->bind_now = false; - for (dynp = obj->dynamic; dynp->d_tag != DT_NULL; dynp++) { + dynp = obj->dynamic; + if (dynp == NULL) + return; + for (; dynp->d_tag != DT_NULL; dynp++) { switch (dynp->d_tag) { case DT_REL: |