OSDN Git Service

ART: Fix memory unmapped twice issue in ElfFile::Load(bool)
authorJim_Guo <jim_guo@htc.com>
Mon, 28 Apr 2014 03:11:57 +0000 (11:11 +0800)
committerBrian Carlstrom <bdc@google.com>
Tue, 5 Aug 2014 05:27:52 +0000 (22:27 -0700)
commita62a588a9202f69e53fbeb3045ea8ea5ec2587f8
treeafbbcca1eaa59d40fa94db6babeb2ea909777357
parentb5c5646b5ffd3d451af5e8d52b50743bf61d4c40
ART: Fix memory unmapped twice issue in ElfFile::Load(bool)

Root Cause:
  The overlapped memory region will be unmapped by
  (1) ~MemMap() of reservation MemMap (reserve) and
  (2) ~MemMap() of "reuse" MemMap (segment).
  Someone takes the memory region after (1) and it will be unmapped in (2).
  So, SIGSEGV occurs when using the unmapped memory region.

Solution:
  Fixes this issue by skip unmap "reuse" MemMap in destructor.
  And always create reservation MemMap before "reuse" MemMap. (It also solved
  the fixupELF case which does not reserve the whole needed memory region).

Bug: 16486685
Change-Id: I8f2538861d5c3fa7b9a04d2c3f516319cc060291
dex2oat/dex2oat.cc
runtime/elf_file.cc
runtime/mem_map.cc
runtime/mem_map.h