• Jim_Guo's avatar
    ART: Fix memory unmapped twice issue in ElfFile::Load(bool) · a62a588a
    Jim_Guo authored
    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
    a62a588a
mem_map.h 5.87 KB