diff options
author | Dmitriy Ivanov <dimitry@google.com> | 2015-06-29 14:48:25 -0700 |
---|---|---|
committer | Dmitriy Ivanov <dimitry@google.com> | 2015-06-29 14:48:25 -0700 |
commit | f7d5bf334dc4bc5b7399d4c8268e1b0bf676548f (patch) | |
tree | 6ceb11112515fce7d625d8c6d4715bee2f1b05eb /linker/linker.cpp | |
parent | 06700b2b5e92a365505b15d0d05e2d5b0706c511 (diff) | |
download | android_bionic-f7d5bf334dc4bc5b7399d4c8268e1b0bf676548f.tar.gz android_bionic-f7d5bf334dc4bc5b7399d4c8268e1b0bf676548f.tar.bz2 android_bionic-f7d5bf334dc4bc5b7399d4c8268e1b0bf676548f.zip |
Lock on dl_interate_phdr
There is possibility of someone dlclosing a library
while dl_iterate_phdr in progress which can lead to
dl_iterate_phdr calling callback with invalid address
if it was unmapped by dlclose.
Bug: http://b/22047255
Change-Id: I3fc0d9fd2c51fb36fd34cb035f37271fa893a7be
Diffstat (limited to 'linker/linker.cpp')
-rw-r--r-- | linker/linker.cpp | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/linker/linker.cpp b/linker/linker.cpp index e1b8ca97d..f7b58c4c9 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -353,7 +353,7 @@ _Unwind_Ptr dl_unwind_find_exidx(_Unwind_Ptr pc, int* pcount) { // Here, we only have to provide a callback to iterate across all the // loaded libraries. gcc_eh does the rest. -int dl_iterate_phdr(int (*cb)(dl_phdr_info* info, size_t size, void* data), void* data) { +int do_dl_iterate_phdr(int (*cb)(dl_phdr_info* info, size_t size, void* data), void* data) { int rv = 0; for (soinfo* si = solist; si != nullptr; si = si->next) { dl_phdr_info dl_info; |