aboutsummaryrefslogtreecommitdiff
path: root/libexec/rtld-elf
diff options
context:
space:
mode:
authorKonstantin Belousov <kib@FreeBSD.org>2020-09-05 22:41:31 +0000
committerKonstantin Belousov <kib@FreeBSD.org>2020-09-05 22:41:31 +0000
commit2b49b95cfa930cec0092188bf1d78a82133a6489 (patch)
tree07129f7a516ac5d1f7ed89231850598fc4831a56 /libexec/rtld-elf
parentea0a0939ef94cee0c5533956d130d12966b11593 (diff)
downloadsrc-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.c5
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: