diff options
author | Szabolcs Nagy <szabolcs.nagy@arm.com> | 2022-09-14 14:04:18 +0100 |
---|---|---|
committer | Szabolcs Nagy <szabolcs.nagy@arm.com> | 2022-10-27 14:46:54 +0100 |
commit | ac41cba6b4853b22ce09697dfcfcd901b69f717a (patch) | |
tree | 7fa8b70f424705515c1fd417a18e163686abac72 /elf/dl-iteratephdr.c | |
parent | 5ea99c81afe66b84460685114e79b95b97c7ba83 (diff) | |
download | glibc-ac41cba6b4853b22ce09697dfcfcd901b69f717a.tar glibc-ac41cba6b4853b22ce09697dfcfcd901b69f717a.tar.gz glibc-ac41cba6b4853b22ce09697dfcfcd901b69f717a.tar.bz2 glibc-ac41cba6b4853b22ce09697dfcfcd901b69f717a.zip |
cheri: elf: make sure dlpi_phdr covers the load segments
In dl_iterate_phdr phdr is the only capability passed to the callback
that may be used to derive pointers of the elf module, so ensure it
has wide bounds.
Diffstat (limited to 'elf/dl-iteratephdr.c')
-rw-r--r-- | elf/dl-iteratephdr.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/elf/dl-iteratephdr.c b/elf/dl-iteratephdr.c index 146850b88a..bd2588fae8 100644 --- a/elf/dl-iteratephdr.c +++ b/elf/dl-iteratephdr.c @@ -69,7 +69,12 @@ __dl_iterate_phdr (int (*callback) (struct dl_phdr_info *info, info.dlpi_addr = l->l_real->l_addr; #endif info.dlpi_name = l->l_real->l_name; +#ifdef __CHERI_PURE_CAPABILITY__ + ElfW(Addr) phdr = (ElfW(Addr)) l->l_real->l_phdr - l->l_real->l_addr; + info.dlpi_phdr = (const void *) dl_rx_ptr (l->l_real, phdr); +#else info.dlpi_phdr = l->l_real->l_phdr; +#endif info.dlpi_phnum = l->l_real->l_phnum; info.dlpi_adds = GL(dl_load_adds); info.dlpi_subs = GL(dl_load_adds) - nloaded; |