Fix use after free in PDB linker.
authorZachary Turner <zturner@google.com>
Wed, 28 Feb 2018 18:09:18 +0000 (18:09 +0000)
committerZachary Turner <zturner@google.com>
Wed, 28 Feb 2018 18:09:18 +0000 (18:09 +0000)
commit3868cfd503de8ad2fb676f50d150d512a1b505de
treedb150c7aa945f530f0a5d41acb5e2c71e1c1422e
parent367bfce6117cd5126adffb037946e7aa229348a7
Fix use after free in PDB linker.

When merging in types from a type server PDB, we would use a
pointer into the type server PDB's mapped file buffer directly
to avoid copying data.  However, we would close the type server
PDB after we finished merging in its types, which would unmap
all of its memory.  This would lead to a use after free.

We fix this by making a strong reference in the PDBLinker class
to all referenced type server PDBs, thereby making it safe to
hold pointers into its memory mapped contents.

This fixes llvm.org/pr36455

Differential Revision: https://reviews.llvm.org/D43834

llvm-svn: 326345
lld/COFF/PDB.cpp