summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans-Christian Noren Egtvedt <hegtvedt@cisco.com>2017-11-08 11:34:35 +0100
committerDave Watson <davejwatson@fb.com>2017-11-09 10:23:18 -0800
commit46c336d18f4b84f7523983b8198ced25fdfd3033 (patch)
treed02670f7c08222326547251fc008f6fdf2d92594
parentf248ac0c6e0a54087fb31f5db4376a73a0777e55 (diff)
downloadlibunwind-46c336d18f4b84f7523983b8198ced25fdfd3033.tar.gz
elfxx: store elf image pointer and size after mapping image
If loading debug link is not successful, the initial NULL pointer for ei->image will eventually be restored, causing segfault during a later call to valid_object. Move populating the prev_image and prev_size to after elf_map_image() to fix this. Signed-off-by: Hans-Christian Noren Egtvedt <hegtvedt@cisco.com>
-rw-r--r--src/elfxx.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/elfxx.c b/src/elfxx.c
index 48a08cdc..b03dfcb7 100644
--- a/src/elfxx.c
+++ b/src/elfxx.c
@@ -386,8 +386,8 @@ elf_w (load_debuglink) (const char* file, struct elf_image *ei, int is_local)
{
int ret;
Elf_W (Shdr) *shdr;
- Elf_W (Ehdr) *prev_image = ei->image;
- off_t prev_size = ei->size;
+ Elf_W (Ehdr) *prev_image;
+ off_t prev_size;
if (!ei->image)
{
@@ -396,6 +396,9 @@ elf_w (load_debuglink) (const char* file, struct elf_image *ei, int is_local)
return ret;
}
+ prev_image = ei->image;
+ prev_size = ei->size;
+
/* Ignore separate debug files which contain a .gnu_debuglink section. */
if (is_local == -1) {
return 0;