Avoid crash when opening broken file
Summary: In `folly::symbolizer::ElfFile`, we `mmap` the file and access the file content via `mmap`-ed pointer directly. This is nice and efficient, but causes the whole program crashes on `SIGBUS` is the underlying frile is broken. This Diff changes the first read of the file, for ELF magic number, to use `read` syscall and check return result, instead of accessing the `mmap`-ed pointer directly. This way APIs like `ElfFile::openNoThrow` would return error instead of crashing if the underlying file is broken. It still doesn't solve the problem if the file becomes broken between we read the ELF magic number and we read file content with the `mmap`-ed file pointer later. But this is the best effort to check for the case with minimal performance cost. Reviewed By: yfeldblum Differential Revision: D9474328 fbshipit-source-id: 969e0323fcb4011e6a080d914452c9215d2fd13c
Showing
Please register or sign in to comment