diff options
author | Hans-Christian Noren Egtvedt <hegtvedt@cisco.com> | 2017-11-08 11:34:35 +0100 |
---|---|---|
committer | Dave Watson <davejwatson@fb.com> | 2017-11-09 10:23:18 -0800 |
commit | 46c336d18f4b84f7523983b8198ced25fdfd3033 (patch) | |
tree | d02670f7c08222326547251fc008f6fdf2d92594 | |
parent | f248ac0c6e0a54087fb31f5db4376a73a0777e55 (diff) | |
download | libunwind-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.c | 7 |
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; |